Контролируемое обучение (Supervised Learning)
Контролируемое обучение (обучение с учителем) – это метод Машинного обучения (ML), при котором Модель (Model) обучается на Размеченных данных (Labeled Data). Например, исследовав опухоли, установив их размер, плотность и другие метрики, мы передаем эти данные модели с обязательной пометкой, какое Наблюдение (Observation) к какому строению (доброкачественному или злокачественному) относится. Размеченные данные для контролируемого обучения изображены на верхней таблице, на нижней – неразмеченная клиентская база:

Категории обучения с учителем
Алгоритмы контролируемого обучения подразделяются на следующие модели:
- Классификация: используются для задач, в которых выходная переменная может быть категоризирована («Да» / «Нет» и проч.). Например, обнаружение спама, анализ эмоциональной окраски твита, прогнозирование сдачи экзамена.

- Регрессия (Regression): используются для задач, где выходной переменной является значение той или иной величины. Чаще всего используется для прогнозирования числовых значений на основе предыдущих наблюдений. Например, прогнозирование стоимости недвижимости, прогнозирование оценки на экзамене на основании часов, потраченных на обучение:

Наряду с этим выделяют еще три разновидности обучения:
- Обучение без учителя (Unsupervised Learning)
- Обучение с частичным привлечением учителя (Semi-Supervised Learning)
- Обучение с подкреплением (Reinforcement Learning)
Контролируемое обучение и Scikit-learn
Посмотрим, как работает контролируемое обучение на примере Линейной регрессии (Linear Regression). Мы попытаемся предсказать вес в фунтах в зависимости от роста в метрах. Для начала импортируем необходимые библиотеки:
import numpy as np
import sklearn
from sklearn.linear_model import LinearRegression
Допустим, положение той или иной точки на оси y двумерной плоскости описывается с помощью следующего уравнения:
$$y = 1 * x_0 + 2 * x_1 + 3$$
В реальности задача Дата-сайентиста (Data Scientist) – как раз найти такое уравнение, сейчас раскроем его сначала, чтобы упростить понимание. Мы располагаем скромными учебными данными – рядами, содержащими значения x_0 и x_1:
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.dot(X, np.array([1, 2])) + 3
Посмотрите, как выглядит на языке Python то же уравнение, описывающее взаимосвязь x_0, x_1 и у: метод dot()
вычисляет скалярное произведение массивов X
и np.array([1, 2])
, в конце мы добавляем к уравнению 3. К примеру, для первого элемента ряда значением Y будет:
$$y_1 = 1 * 1 + 2 * 1 + 3 = 6$$
Инициализируем функцию линейной регрессии и передадим ей учебные данные с помощью метода fit()
. Чтобы узнать, какова предсказательная способность модели, используем метод score()
:
reg = LinearRegression().fit(X, y)
reg.score(X, y)
Скор (Score) у нее пока совсем неправдоподобный – 100%, это происходит из-за того, что в проверочную часть y Датасета (Dataset) входит и учебная X, но принцип, надеюсь, понятен:
1.0
Напоследок попросим модель предсказать значение y для x_0 и x_1, равных 3 и 5 соответственно:
reg.predict(np.array([[3, 5]]))
Модель считает, что координатой y точки, где x_0 и x_1 равны 3 и 5, будет число 16:
array([16.])
Давайте проверим простой подстановкой:
$$y_1 = 1 * 3 + 2 * 5 + 3 = 16$$
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Фото: @zmachacek