В данной статье в виде ссылок представлены все популярные алгоритмы классического машинного обучения с их подробным теоретическим описанием и немного упрощённой реализацией с нуля на Python, отражающей основную идею. Помимо этого, в конце каждой темы указаны дополнительные источники для более глубокого ознакомления, а суммарное время прочтения статей ниже составляет более трёх часов!
Ноутбуки с данными алгоритмами можно загрузить на Kaggle (eng) и GitHub (rus).
Это будет полезно не только начинающим свой путь в ML (хотя и сложновато), но и более опытным специалистам, которые хотят лучше ознакомиться с теорией и тонкостями реализации алгоритмов, пройдя путь от основ до более продвинутых тем, некоторые из которых обсуждаются в последних научных статьях.
Данные статьи являются частью будущего теоретического курса по машинному обучению, который будет представлен немного позже и будет включать в себя туториалы по ML-библиотекам, а также всю необходимую теорию, начиная от способов оценки моделей и заканчивая методами оптимизации в ML и DL в целом.
? Если вам понравился данный формат, буду очень признателен вашей поддержке на Kaggle.
Ну а теперь поехали!
Обучение с учителем
Обучение без учителя
Всем успехов и до новых встреч! ✨
Комментарии (21)
nikolz
01.04.2024 21:15Вопросы:
1) С какой целью Вы пишите конечные математические формулы, например, частные производные?
2)Как они используются в дальнейшей реализации алгоритмов ?
3)Какой уровень знаний математики предполагается у изучающих Ваш курс?
egaoharu_kensei Автор
01.04.2024 21:15Первые два вопроса будет трудно обобщить на все алгоритмы, но суть такова, что мы пытаемся минимизировать ошибку модели, представленной в виде функции потерь. Для её минимизации в некоторых алгоритмах типа линейной регрессии используется антиградиент (градиентный спуск )— именно для этого мы используем производные, но это только один из возможных примеров использования.
По математике нужно знать линейную алгебру и аналитическую геометрию, матанализ и теорвер с матстатом. Подробный план обучения можно найти здесь.
nikolz
01.04.2024 21:15Спасибо за ответы. но я немного иное спрашивал. Меня интересует зачем Вы формулы пишите. Как именно эти формулы вы используете? Не готовые библиотеки, а формулы. Вы же не пишите функцию вычисления частной производной, а используете библиотеку. Верно?
Студенты должны будут эти формулы учить наизусть?
egaoharu_kensei Автор
01.04.2024 21:15+1Нет, как раз-таки мы выводим формулы, объясняя их интуицию, то есть показываем как к ним пришли. После мы используем полученные формулы в коде при построении алгоритма с нуля, чтобы показать как они применяются и какое место в этом занимают. Учить формулы наизусть не нужно: их нужно понимать.
Да, на практике используются готовые, оптимизированные модели, но их хорошее и глубокое понимание будет очень большим плюсом при выборе и отладке алгоритма, и тогда машинное обучение не будет казаться чёрным ящиком. Или если вы захотите заниматься исследованиями в ML, то есть разрабатывать свои собственные модели, то для этого также нужно иметь хорошее понимание как устроены классические концепции.
dyadyaSerezha
Меня опять удивляет только одно - слово "с нуля".
stg34
Ну не сказано же, что с абсолютного нуля. Ноль бывает разный :)
dyadyaSerezha
А, с нуля по Цельсию!)
egaoharu_kensei Автор
В контексте машинного обучения и программирования в целом, реализация алгоритмов с нуля (from scratch на английском) означает их создание с нуля без использования готовых библиотек (в данном случае scikit-learn). В каждой статье ниже это название указано перед кодом. Это общепринятый термин и он используется повсеместно.
Скорее всего, вы подумали, что "с нуля" — это уровень подготовки, но специально для этой цели я указал уровень сложности в как в статье, так и перед её названием. Когда выйдет курс, то я отдельно обозначу, что нужно изучить перед его прохождением и где это можно будет сделать.
dyadyaSerezha
Нет, я ожидал увидеть ноль импорта или импорт самых базовых системных пакетов (и тут же подумал - а зачем на Питоне с нуля писать математику??). А тут просто куча всего импортируется.
egaoharu_kensei Автор
Можете уточнить какие библиотеки в контексте машинного обучения вы считаете базовыми и почему numpy, pandas и matplotlib на ваш взгляд ими не являются? Насколько я понял, вы хотите, чтобы я написал эти библиотеки с нуля, но каким образом это может помочь понять алгоритмы и основные концепции ML? Надеюсь, вы это сказали просто из-за незнания. Просто уточню, что алгоритмы scikit-learn также базируются на очень большом количестве библиотек, включая и вышеперечисленные.
В данном случае основная идея статей по ML-алгоритмам заключается в том, чтобы показать их основную идею на немного упрощённых реализациях, а библиотеки выше — это инструменты для обработки и визуализации данных, которые используются повсеместно, поэтому реализовывать их с нуля как минимум не имеет смысла.
К слову, позже по этим библиотекам тоже будут туториалы.
dyadyaSerezha
Всё уже, разобрались, что такое "с нуля" в понимании автора.
egaoharu_kensei Автор
Если у вас ещё будут вопросы, то не стесняйтесь спрашивать: всё же у новичков программирование и особенно ML на первых порах вызывают много вопросов.
Но перед тем как переходить к ML, лучше всё-таки изучить программирование и математику хотя бы на базовом уровне, чтобы это не казалось магией. По Python есть хорошие курсы на Stepik "Поколение Python" (там, кстати, и про библиотеки тоже рассказывается), а по математике есть хороший сайт mathprofi.
dyadyaSerezha
Спасибо. Закончив универ по специальности "прикладная математика" (численные методы и программирование) и работая программистом с 1985, конечно же смотрю на всё это, как на магию)
egaoharu_kensei Автор
Тогда у меня есть к вам предложение: если у вас такой большой опыт в программировании и вы считаете, что в статье приведены недостаточно подробные реализации, не хотите написать по этому поводу собственные реализации ml-алгоритмов без импорта каких-либо библиотек или, как вы считаете, "с нуля", чтобы мы все убедились как надо делать правильно? Если есть человек, который может что-то сделать лучше, я буду только "за".
Можете использовать любой удобный для вас ЯП: в любом случае я прочитаю с большим интересом. Как вам идея? Сможете сразу показать мастер-класс и поделиться полезной информацией с молодёжью.
Если кому-то понравилась такая идея, давайте поддержим дядю Серёжу лайками под этим комментарием :)
dyadyaSerezha
Тогда у меня еще "более лучшее" предложение - дайте мне миллион и я напишу такие статьи в ближайшие сто лет.
Насчёт "с нуля" я уже объяснил - это без import вообще или с импортом самых базовых пакетов. И ёжику ясно, что такой алгоритм на самом питоне, без численных библиотек (то есть, с нуля) будет работать раз в сто медленнее, в лучшем случае. Поэтому и удивился с самого начала. Поэтому меня даже кто-то понял и пошутил (увы, не автор).
Если всё ещё непонятно, то можно пойти почитать определение выражения "с нуля".
egaoharu_kensei Автор
Без шуток, если вы считаете, что эту тему можно раскрыть более подробно и у вас это вызывает такой интерес, то почему бы не внести вклад в развитие IT-сообщества и сделать статьи по ML так, как хочется вам? По-моему, Хабр как раз для чего-то подобного и создавался.
Я не знаю по какой причине вас это так напугало и вы начали оправдываться, но уверен, что если вы сделаете то о чём говорите, то аудитория обязательно вас примет с теплом.
На гитхабе и kaggle также есть похожие проекты, которые так и называются "ml-алгоритмы с нуля". Правда, большинство из них либо слишком простые и представлены не в таком объёме, либо не работают вообще. Поэтому, если вам будет интересно, что такое "с нуля" и как это выглядит, то рекомендую посетить эти сайты. В любом случае, это будет гораздо лучше, чем писать глупости и придираться по мелочам.
VPryadchenko
А где граница между "самыми базовыми пакетами" и "уже не совсем базовыми"?
Без numpy жизни нет, вот он - базовый пакет?
egaoharu_kensei Автор
Честно говоря, товарищ выше так и не смог ответить, что в его понимании является базовым пакетом.
В контексте машинного обучения numpy, pandas, matplotlib — это минимальный набор для анализа и обработки данных, которым предстоит пользоваться всегда или почти всегда. Хотя, лично я сюда бы ещё отнёс scipy и seaborn.
Например, при построении графиков решающих границ алгоритмов, я пользовался библиотекой MLxtend — вот она уже точно не является базовой, поскольку можно было бы обойтись и без неё, но просто она делает жизнь немного проще.