Обучение без учителя (Unsupervised Learning)

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

Задачей же Unsupervised Learning может быть обнаружение групп похожих примеров в данных, и это называется Кластеризацией (Clustering), или определение того, как данные распределяются в пространстве, и это известно как Оценка плотности (Density Estimation). Такие алгоритмы позволяют выполнять более сложные задачи обработки по сравнению с обучением с учителем, хоть и являются менее предсказуемыми.
Обучение без учителя:
- Находит в данных неизвестные закономерности
- Помогает найти полезные для категоризации Признаки (Features)
- Стоит дешевле (т.е. подготовка неразмеченных данных)
- Не обязывает определять число классов
К примеру, в семье с ребенком есть еще и собака, которую он узнает среди остальных живых существ. Друг семьи приводит с собой другую собаку и пытается подружить своего четвероногого друга с малышом. Малыш раньше не видел этого пса, но узнает характерные черты (два уха, два глаза, ходьба на четырех ногах) и идентифицирует новое животное как собаку. Это простейшая аналогия обучения без учителя, при условии, что гость не указал ребенку, что его компаньон – пес.
Наряду с этим выделяют еще три разновидности обучения:
- Обучение с учителем (Supervised Learning)
- Обучение с частичным привлечением учителя (Semi-Supervised Learning)
- Обучение с подкреплением (Reinforcement Learning)
PCA
Посмотрим, как работает Unsupervised Learning на примере Анализа главных компонент (PCA). Для начала импортируем Scikit-learn и Matplotlib:
from sklearn import datasets
from sklearn import decomposition
import matplotlib.pyplot as plt
Загрузим датасет с помощью встроенного метода load_digits()
:
digits = datasets.load_digits()
X = digits.data
y = digits.target
Мы используем такое разделение данных на X и y, поскольку так создатели организовали данные. Если посмотреть, что эти компоненты из себя представляют, мы увидим два массива:
X
Каждый из рядов – это набор чисел, характеризующий яркость пиксела на сетке 8 х 8:
array([[ 0., 0., 5., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 10., 0., 0.],
[ 0., 0., 0., ..., 16., 9., 0.],
...,
[ 0., 0., 1., ..., 6., 0., 0.],
[ 0., 0., 2., ..., 12., 0., 0.],
[ 0., 0., 10., ..., 12., 1., 0.]])
y, в свою очередь, – это список целевых значений. Нам предстоит научить модель ассоциировать наборы пикселей с цифрами.
y
array([0, 1, 2, ..., 8, 9, 8])
Выстроим пикселы в сетки обратно и отобразим в оттенках серого:
# Зададим размер холста
plt.figure(figsize = (16, 6))
for i in range(10):
# Организуем полотно с двумя рядами по 5 графиков
plt.subplot(2, 5, i + 1)
# Каждый ряд X превратим в матрицу 8 х 8 и используем черно-белую гамму
plt.imshow(X[i,:].reshape([8,8]), cmap = 'gray');
Вот такая магия – из чисел в картинки:

Метод главных компонент сократит количество измерений с 64 (длина каждого ряда) до 2, и с этой точки зрения сможет произвести кластеризацию, т.е. распознавание той или иной цифры в наборе данных:
pca = decomposition.PCA(n_components = 2)
X_reduced = pca.fit_transform(X) # Передадим данные модели
plt.figure(figsize = (12, 10))
plt.scatter(X_reduced[:, 0], X_reduced[:, 1],
# Цветов столько же, сколько и цифр
c = y,
# Настроим уникальный цвет каждой цифре
edgecolor = 'none',
# Сделаем точки на 70% непрозрачными
# Для общего восприятия картины
alpha = 0.7,
# Зададим размер точки
s = 40,
# Используем предустановленную цветовую схему
cmap = plt.cm.get_cmap('nipy_spectral', 10))
# Цветовая шкала справа от графика как легенда
plt.colorbar()
# MNIST (Modified National Institute of Standards and Technology) –
база рукописных цифр
plt.title('MNIST. Проекция PCA');
Теперь мы лучше понимаем, почему капча как идея существует столько лет: компьютеры по-прежнему имеют весьма туманное представление о цифрах, и распознать наверняка одну от другой не в состоянии:

Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Фото: @gabrielperelman