Недавно я начал изучать machine learning. Начал с прекрасного, на мой взгляд, курса от Andrew Ng. И чтобы не забыть, а так же повторить выученное решил создать репозиторий Machine Learning in Octave. В нем я собрал математические формулы для гипотез, градиентных спусков, "cost function"-ов, сигмоидов и прочих фундаментальных для машинного обучения "штук". Так же добавил туда упрощенные и доработанные примеры реализации некоторых популярных алгоритмов (нейронная сеть, линейная/логистическая регрессия и пр.) для MatLab/Octave. Надеюсь эта информация будет полезна для тех из вас, кто планирует начать изучение machine learning-а.
Тема машинного обучения достаточно обширная, о чем можно судить, например, из следующей схемы, которую я взял (перевел) из великолепной статьи vas3k-а.
На данный момент из всего этого разнообразия в репозитории есть примеры пяти supervised и unsupervised алгоритмов:
- Линейная регрессия? с примером прогнозирования стоимости дома.
- Логистическая регрессия с примерами определения неисправных чипов, а так же распознавания рукописных цифр с применением принципа "один против всех".
- Алгоритм K-means? с примером распределения данных на три кластера.
- Поиск аномалий с помощью распределения Гаусса ?с примером определения перегруженного сервера.
- Нейронная сеть на основании многослойного "персептрона" ?с примером распознавания рукописных цифр.
Для каждого алгоритма есть файл demo.m
, с которого можно начать анализ отдельно взятого алгоритма. При запуске этого файла из консоли Octave (или из MatLab-а) будет выведена служебная информация, иллюстрирующая работу алгоритма, а так же будут построены графики, помогающие разобраться с каким тренировочным сетом идет работа.
Надеюсь этот репозиторий будет для вас полезным и поможет сделать очередной шаг в сторону машинного обучения.
P.S. Примеры в репозитории созданы для MatLab/Octave. Это, возможно, не такая популярная опция сейчас, как Python, но все-же для обучения, быстрого прототипирования и того же перемножения матриц без дополнительных плагинов и библиотек может неплохо подойти. Еще раз успешного вам кодинга!