В данной статье в виде ссылок представлены все популярные алгоритмы классического машинного обучения с их подробным теоретическим описанием и немного упрощённой реализацией с нуля на Python, отражающей основную идею. Помимо этого, в конце каждой темы указаны дополнительные источники для более глубокого ознакомления, а суммарное время прочтения статей ниже составляет более трёх часов!

Ноутбуки с данными алгоритмами можно загрузить на Kaggle (eng) и GitHub (rus).

Это будет полезно не только начинающим свой путь в ML (хотя и сложновато), но и более опытным специалистам, которые хотят лучше ознакомиться с теорией и тонкостями реализации алгоритмов, пройдя путь от основ до более продвинутых тем, некоторые из которых обсуждаются в последних научных статьях.

Данные статьи являются частью будущего теоретического курса по машинному обучению, который будет представлен немного позже и будет включать в себя туториалы по ML-библиотекам, а также всю необходимую теорию, начиная от способов оценки моделей и заканчивая методами оптимизации в ML и DL в целом.

? Если вам понравился данный формат, буду очень признателен вашей поддержке на Kaggle.

Ну а теперь поехали!


Обучение с учителем

Обучение без учителя


Всем успехов и до новых встреч! ✨

Комментарии (21)


  1. dyadyaSerezha
    01.04.2024 21:15

    Меня опять удивляет только одно - слово "с нуля".


    1. stg34
      01.04.2024 21:15
      +1

      Ну не сказано же, что с абсолютного нуля. Ноль бывает разный :)


      1. dyadyaSerezha
        01.04.2024 21:15
        +2

        А, с нуля по Цельсию!)


    1. egaoharu_kensei Автор
      01.04.2024 21:15

      В контексте машинного обучения и программирования в целом, реализация алгоритмов с нуля (from scratch на английском) означает их создание с нуля без использования готовых библиотек (в данном случае scikit-learn). В каждой статье ниже это название указано перед кодом. Это общепринятый термин и он используется повсеместно.

      Скорее всего, вы подумали, что "с нуля" — это уровень подготовки, но специально для этой цели я указал уровень сложности в как в статье, так и перед её названием. Когда выйдет курс, то я отдельно обозначу, что нужно изучить перед его прохождением и где это можно будет сделать.


      1. dyadyaSerezha
        01.04.2024 21:15

        Нет, я ожидал увидеть ноль импорта или импорт самых базовых системных пакетов (и тут же подумал - а зачем на Питоне с нуля писать математику??). А тут просто куча всего импортируется.


        1. egaoharu_kensei Автор
          01.04.2024 21:15
          +2

          Можете уточнить какие библиотеки в контексте машинного обучения вы считаете базовыми и почему numpy, pandas и matplotlib на ваш взгляд ими не являются? Насколько я понял, вы хотите, чтобы я написал эти библиотеки с нуля, но каким образом это может помочь понять алгоритмы и основные концепции ML? Надеюсь, вы это сказали просто из-за незнания. Просто уточню, что алгоритмы scikit-learn также базируются на очень большом количестве библиотек, включая и вышеперечисленные.

          В данном случае основная идея статей по ML-алгоритмам заключается в том, чтобы показать их основную идею на немного упрощённых реализациях, а библиотеки выше — это инструменты для обработки и визуализации данных, которые используются повсеместно, поэтому реализовывать их с нуля как минимум не имеет смысла.

          К слову, позже по этим библиотекам тоже будут туториалы.


          1. dyadyaSerezha
            01.04.2024 21:15

            Всё уже, разобрались, что такое "с нуля" в понимании автора.


            1. egaoharu_kensei Автор
              01.04.2024 21:15

              Если у вас ещё будут вопросы, то не стесняйтесь спрашивать: всё же у новичков программирование и особенно ML на первых порах вызывают много вопросов.

              Но перед тем как переходить к ML, лучше всё-таки изучить программирование и математику хотя бы на базовом уровне, чтобы это не казалось магией. По Python есть хорошие курсы на Stepik "Поколение Python" (там, кстати, и про библиотеки тоже рассказывается), а по математике есть хороший сайт mathprofi.


              1. dyadyaSerezha
                01.04.2024 21:15

                Спасибо. Закончив универ по специальности "прикладная математика" (численные методы и программирование) и работая программистом с 1985, конечно же смотрю на всё это, как на магию)


                1. egaoharu_kensei Автор
                  01.04.2024 21:15
                  +1

                  Тогда у меня есть к вам предложение: если у вас такой большой опыт в программировании и вы считаете, что в статье приведены недостаточно подробные реализации, не хотите написать по этому поводу собственные реализации ml-алгоритмов без импорта каких-либо библиотек или, как вы считаете, "с нуля", чтобы мы все убедились как надо делать правильно? Если есть человек, который может что-то сделать лучше, я буду только "за".

                  Можете использовать любой удобный для вас ЯП: в любом случае я прочитаю с большим интересом. Как вам идея? Сможете сразу показать мастер-класс и поделиться полезной информацией с молодёжью.

                  Если кому-то понравилась такая идея, давайте поддержим дядю Серёжу лайками под этим комментарием :)


                  1. dyadyaSerezha
                    01.04.2024 21:15

                    Тогда у меня еще "более лучшее" предложение - дайте мне миллион и я напишу такие статьи в ближайшие сто лет.

                    Насчёт "с нуля" я уже объяснил - это без import вообще или с импортом самых базовых пакетов. И ёжику ясно, что такой алгоритм на самом питоне, без численных библиотек (то есть, с нуля) будет работать раз в сто медленнее, в лучшем случае. Поэтому и удивился с самого начала. Поэтому меня даже кто-то понял и пошутил (увы, не автор).

                    Если всё ещё непонятно, то можно пойти почитать определение выражения "с нуля".


                    1. egaoharu_kensei Автор
                      01.04.2024 21:15
                      +1

                      Без шуток, если вы считаете, что эту тему можно раскрыть более подробно и у вас это вызывает такой интерес, то почему бы не внести вклад в развитие IT-сообщества и сделать статьи по ML так, как хочется вам? По-моему, Хабр как раз для чего-то подобного и создавался.

                      Я не знаю по какой причине вас это так напугало и вы начали оправдываться, но уверен, что если вы сделаете то о чём говорите, то аудитория обязательно вас примет с теплом.

                      На гитхабе и kaggle также есть похожие проекты, которые так и называются "ml-алгоритмы с нуля". Правда, большинство из них либо слишком простые и представлены не в таком объёме, либо не работают вообще. Поэтому, если вам будет интересно, что такое "с нуля" и как это выглядит, то рекомендую посетить эти сайты. В любом случае, это будет гораздо лучше, чем писать глупости и придираться по мелочам.


                    1. VPryadchenko
                      01.04.2024 21:15

                      А где граница между "самыми базовыми пакетами" и "уже не совсем базовыми"?

                      Без numpy жизни нет, вот он - базовый пакет?


                      1. egaoharu_kensei Автор
                        01.04.2024 21:15

                        Честно говоря, товарищ выше так и не смог ответить, что в его понимании является базовым пакетом.

                        В контексте машинного обучения numpy, pandas, matplotlib — это минимальный набор для анализа и обработки данных, которым предстоит пользоваться всегда или почти всегда. Хотя, лично я сюда бы ещё отнёс scipy и seaborn.

                        Например, при построении графиков решающих границ алгоритмов, я пользовался библиотекой MLxtend — вот она уже точно не является базовой, поскольку можно было бы обойтись и без неё, но просто она делает жизнь немного проще.


  1. kjokkjok
    01.04.2024 21:15
    +1

    спасибо, теперь перейду с биоинформатики на датасаенс


    1. FromMed
      01.04.2024 21:15

      Какой опыт? Почему не зашла?


  1. nikolz
    01.04.2024 21:15

    Вопросы:

    1) С какой целью Вы пишите конечные математические формулы, например, частные производные?

    2)Как они используются в дальнейшей реализации алгоритмов ?

    3)Какой уровень знаний математики предполагается у изучающих Ваш курс?


    1. egaoharu_kensei Автор
      01.04.2024 21:15

      Первые два вопроса будет трудно обобщить на все алгоритмы, но суть такова, что мы пытаемся минимизировать ошибку модели, представленной в виде функции потерь. Для её минимизации в некоторых алгоритмах типа линейной регрессии используется антиградиент (градиентный спуск )— именно для этого мы используем производные, но это только один из возможных примеров использования.

      По математике нужно знать линейную алгебру и аналитическую геометрию, матанализ и теорвер с матстатом. Подробный план обучения можно найти здесь.


      1. nikolz
        01.04.2024 21:15

        Спасибо за ответы. но я немного иное спрашивал. Меня интересует зачем Вы формулы пишите. Как именно эти формулы вы используете? Не готовые библиотеки, а формулы. Вы же не пишите функцию вычисления частной производной, а используете библиотеку. Верно?

        Студенты должны будут эти формулы учить наизусть?


        1. egaoharu_kensei Автор
          01.04.2024 21:15
          +1

          Нет, как раз-таки мы выводим формулы, объясняя их интуицию, то есть показываем как к ним пришли. После мы используем полученные формулы в коде при построении алгоритма с нуля, чтобы показать как они применяются и какое место в этом занимают. Учить формулы наизусть не нужно: их нужно понимать.

          Да, на практике используются готовые, оптимизированные модели, но их хорошее и глубокое понимание будет очень большим плюсом при выборе и отладке алгоритма, и тогда машинное обучение не будет казаться чёрным ящиком. Или если вы захотите заниматься исследованиями в ML, то есть разрабатывать свои собственные модели, то для этого также нужно иметь хорошее понимание как устроены классические концепции.


          1. nikolz
            01.04.2024 21:15
            +1

            Спасибо. Понятно.