Простое объяснение с примерами из математики, программирования и реальной жизни.
Для кого это руководство?
- Для технических специалистов, которые хотят повторить основы машинного обучения.
- Для тех, кто не смыслит в технике, но хочет ознакомиться с машинным обучением и не знает, с чего начать.
- Для тех, кто считает, что машинное обучение “тяжело” освоить.
Почему именно машинное обучение?
Искусственный интеллект влияет на наше будущее значительнее, чем любая другая инновация. Скорость развития ИИ поразительна: быстро растущее количество и разнообразие доступных данных, более дешевая и мощная вычислительная обработка, доступные хранилища данных.
В этой статье вы ознакомитесь с основами машинного обучения и алгоритмами, которые лежат в основе технологий, влияющих на нашу повседневную жизнь. Вы узнаете, как они функционируют, а также какие инструменты использовать для построения схожих моделей и приложений.
Подготовка к изучению машинного обучения
Чтобы разобраться в представленных концепциях, нужно обладать следующими знаниями:
- Углубленные знания начального уровня алгебры: Вы должны разбираться в таких понятиях, как переменные, коэффициенты, линейные уравнения, исчисления, а также графики.
- Владение основами программирования, а также опыт написания кода на Python: Опыт в машинном обучении не требуется, однако вы должны уметь читать и писать код Python с базовыми конструкциями, такими как определения функций, списки, словари, циклы и условные выражения.
- Базовые знания следующих библиотек Python:
Семантическое дерево:
Искусственный интеллект — это наука об агентах, которые воспринимают окружающий мир, формируют планы и принимают решения для достижения целей.
Машинное обучение — это подраздел искусственного интеллекта. Его цель заключается в том, чтобы научить компьютеры обучаться самостоятельно. С помощью алгоритма обучения машина может определять закономерности в указанных данных, выполнять построение модели и предсказывать вещи без явно запрограммированных правил и моделей.
Что такое машинное обучение?
Артур Сэмюэл описывает машинное обучение как: “Область науки, благодаря которой компьютеры могут обучаться без явного программирования.” Это старое и неформальное определение, которое на данный момент почти потеряло смысл.
Том Митчелл дает более современное определение: “Компьютерная программа обучается на основе опыта E по отношению к некоторому классу задач T и меры качества P, если качество решения задач из T, измеренное на основе P, улучшается с приобретением опыта E.”
Простыми словами, смысл машинного обучения заключается в том, что базовые алгоритмы могут предоставить информацию о наборе данных без написания кода для решения этой проблемы вручную. Вместо написания кода, вы предоставляете данные для базового алгоритма, а он формирует собственные выводы на основе этих данных.
Алгоритмы машинного обучения относятся к следующим категориям: обучение с учителем (Supervised Learning), обучение без учителя (Unsupervised Learning) и обучение с подкреплением (Reinforcement Learning).
- Supervised Learning: Алгоритм обучения с учителем принимает маркированные данные и создает модель, которая выполняет предсказания, предоставляя новые данные. Это могут быть как задачи классификации, так и задачи регрессии.
- Unsupervised Learning: Приобучении без учителя предоставляются непомеченные и неклассифицированные данные, в которых нужно найти закономерности и создать структуру данных для получения значения. Формы обучения без учителя: кластеризация (clustering) и уменьшение размерности (dimensionality reduction).
- Reinforcement Learning: Обучение с подкреплением использует систему поощрений и метод проб и ошибок в целях максимизации долгосрочного поощрения.
Roadmap для начала изучения машинного обучения:
- Начать стоит с изучения/повторения линейной алгебры. MIT предоставляет отличный open course по линейной алгебре, с помощью которого можно ознакомиться с ключевыми концепциями. Особое внимание следует уделить изучению векторов, умножению матриц, детерминантам и спектральному разложению матрицы — они играют важную роль в работе алгоритмов машинного обучения.
- Затем уделите внимание высшей математике. Изучите производные и способы их использования для оптимизации. Обязательно разберите все темы в Single Variable Calculus и (как минимум) первые два раздела Multivariable Calculus.
- Изучите библиотеки Python, используемые в машинном обучении, такие как Numpy, Pandas, Matplotlib и SKLearn. Разобраться в машинном обучении без этих ‘инструментов’ будет довольно сложно.
- Начните программировать! Советую реализовать все алгоритмы из scratch вPython, прежде чем использовать готовые модели в SciKit — Learn, чтобы разобраться, как все это работает. Я делал алгоритмы в следующем порядке по возрастанию сложности:
- Линейная регрессия (Linear Regression)
- Логистическая регрессия (Logistic Regression)
- Наивный байесовский классификатор (Naive Bayes Classifier)
- Метод k-ближайших соседей (K — Nearest Neighbors — KNN)
- Метод k-средних (K — Means)
- Метод опорных векторов (Support Vector Machine — SVM)
- Дерево принятия решений (Decision Trees)
- Random Forests
- Gradient Boosting
Roadmap для реализации алгоритма:
- Соберите данные для работы. В интернете доступны миллионы наборов данных, удовлетворяющих даже самым причудливым потребностям. Kaggle и UCI— отличные ресурсы для просмотра наборов данных. Вы также можете сгенерировать собственные данные.
- Выберите алгоритм(ы). После сбора данных можно начать работу над алгоритмами. На изображении показан приблизительный ориентир. (Из документации SKLearn)
На этой стадии следует пройтись по краткой теории каждого алгоритма, которые я разместил на Github с каждой реализацией.
3. Визуализируйте данные! В Python есть множество библиотек, таких как Matplotlib и Seaborn, с помощью которых можно выстроить данные в график и получить финальный результат. Таким образом, вам будет легче разобраться в данных и в том, какие действия они выполняют. (и конечно, сделать крутую модель!)
4. Настройте алгоритм. Все реализованные модели обладают множеством кнопок и рычагов, известными как гиперпараметры. Коэффициент скорости обучения, значение k и т. д. — все это можно изменить, чтобы получить наилучшую из возможных моделей.
5. Оцените модель. БиблиотекаPython SKLearn предоставляет множество инструментов для анализа модели и проверки показателей, таких как правильность, показатель f1, точность и т. д.
Примечания:
- Ознакомившись с несколькими алгоритмами и концепциями, попробуйте выполнить один или несколько простых и краткосрочных проектов (для начала).
- Не бойтесь совершать ошибки. По-началу вы будете тратить большую часть времени на попытки разобраться в математике и причинах возникновения ошибок. Однако терпение — ключ к успеху.
- Маленькие модели — основа для изучения чего-то большего. Пробуйте все подряд и тогда у вас получится создать лучшую модель.
- Наилучший способ изучить библиотеки Python — пройти Datacamp courses или начать с изучения документации.
Все вышеописанное можно найти на Github в репозитории Machine-Learning. Все алгоритмы систематизированы, как с реализациями из scratch, так и с использованием SciKit-Learn. Также представлены используемые наборы данных и краткая теория о работе алгоритмов вместе с примерами из реальной жизни.
Перевод статьи Shaurya Bhandari: A Beginner’s Guide to Machine Learning