Quantcast
Channel: Найцікавіше на DOU
Viewing all articles
Browse latest Browse all 8115

DOU Проектор: Homemade Machine Learning — репозиторий для изучения ML на Python с Jupyter-демо

$
0
0

Здравствуйте, читатели! Меня зовут Алексей, я работаю JavaScript-программистом. Ранеея писал о том, как в свободное от работы время начал изучать Python и поделился ссылкой на созданный мной репозиторий, который может быть полезным начинающим Pythonist-ам. Эта статья является, по сути, продолжением пути в около-Python-овские «дебри» и, надеюсь, станет полезной тем из вас, кто начинает изучать машинное обучение на Python.

Идея проекта

Сфера машинного обучения для меня лично выглядит очень заманчивой, перспективной и даже «магической». Все эти распознанные лица друзей в Facebook, качественные субтитры на YouTube, мультиязычные переводы, копирование стилей художников, поиск картинок перечислением предметов, изображенных на них, самоуправляемые автомобили и многое другое не может оставить равнодушным. Я понимаю, что «магичность» этой сферы для меня обусловлена отсутствием знания.

Развеивание этой излишней «магичности» я начал с потрясающего курсаот Andrew Ng. В нем довольно понятно и детально объясняются базовые алгоритмы машинного обучения и делается это с использованием MatLab/Octave. Сначала я попытался систематизировать полученные знания для себя же, создав репозиторий machine-learning-octave, в котором добавил поддержку «многослойности» для нейронной сети (многослойного перцептрона) и отрефакторил код, чтобы сделать его более читаемым. Но код все так же был написан на Octavе, а использование MatLab/Octave в 2018-м —это, наверное, был немного «привет» из 2010-го...

Чтобы вернуть себя к реальности заканчивающегося 2018 года я запустил новый репозиторий Homemade Machine Learning, который содержит примеры популярных алгоритмов и подходов машинного обучения, таких как линейная регрессия, логистическая регрессия, метод K-средних и нейронная сеть (многослойный перцептрон). Каждый алгоритм содержит интерактивные демостранички, запускаемые в Jupyter NBViewer или Binder. Таким образом у каждого желающего есть возможность изменить тренировочные данные, параметры обучения и сразу же увидеть результат обучения, визуализации и прогнозирования модели у себя в браузере без установки Jupyter локально.

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

Реализация проекта

За основу я взял свой предыдущий репозиторий, который начал переписывать на Python и расширять новыми демками на основании новых датасетов. Я новичок в Python и машинном обучении, поэтому для меня многие базовые задачи были сложными. Например, где найти подходящие данные (небольшого размера, ведь мне нужна всего лишь демонстрация алгоритма, а не production-ready продукт), как хранить/деплоить Jupyter ноутбуки (NBViwer или MyBinder? Поддержит ли NBViwer мои кастомные плагины в ноутбуке?), какие библиотеки использовать для обработки данных (Pandas? NumPy? Или их комбинацию?), какие библиотеки использовать для построения графиков (ту же Pandas? Или MatPlotLib? А если надо интерактивное 3D? Может PyPlot?) и многое другое...

В итоге основными используемыми библиотеками стали NumPyи Pandas. Эти библиотеки используются для эффективных операций над матрицами, а также для загрузки и парсинга CSV-данных. В демостраничках для построения графиков и визуализации тренировочных данных также используются библиотеки Matplotlibи Plotly. В случае с логистической регрессией для минимизации функции потерь используется библиотека SciPy, но в остальных случаях градиентный спуск реализован на чистом NumPy/Python. Использования библиотек на подобии PyTorchили TensorFlowизбегаю из-за обучающей цели репозитория.

Работа над проектом заняла около одного месяца в свободное от работы время (приблизительно 1-2часа в день). Ниже опишу алгоритмы, которые на данный момент реализованы в репозитории.

Регрессия. Линейная регрессия

В задачах, связанных с регрессией, мы пытаемся предсказать реальное число на основании входящих данных. По сути, мы строим линию/плоскость/n-мерную плоскость вдоль тренировочных данных, чтобы иметь возможность сделать прогноз для входных данных, отсутствующих в тренировочном сете. Это происходит, например, если мы хотим предсказать стоимость 2-комнатнойквартиры в центре города N на 7-мэтаже.

Классификация. Логистическая регрессия

В задачах, связанных с классификацией, мы разбиваем данные на классы в зависимости от параметров этих данных. Примером задачей классификации может быть распознавание спама. В зависимости от текста письма (входящие данные) мы относим каждое письмо к одному из двух классов: «спам» или «не спам».

Кластеризация. Метод K-средних

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

Нейронные сети. Многослойный перцептрон (MLP)

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

Поиск аномалий с помощью распределения Гаусса

В задачах, связанных с поиском аномалий, мы пытаемся выделить те экземпляры данных, которые выглядят «подозрительно» в сравнении с большинством других экземпляров. Например, определение нетипичных (подозрительных) транзакций по банковской карте.

Дальнейшие планы

По мере изучения machine learning я планирую расширять репозиторий дополнительными примерами реализаций AI алгоритмов и примерами их использования. В планах также возможна адаптация Jupyter ноутбуков под Colaboratoryи покрытие кода тестами.

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

Успешного кодинга!


Viewing all articles
Browse latest Browse all 8115

Trending Articles