Вы подписаны на Машинное обучение доступно
Отлично! завершите оплату для полного доступа к Машинное обучение доступно
Снова приветствуем Вас! Вы успешно авторизовались
Успех! Аккаунт активирован, и Вы имеете полный доступ к контенту.
Обучение без учителя (Unsupervised Learning)

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

in

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

Обучение с учителем (Supervised Learning) предполагает, что учебные данные размечены вручную, и модель получает четкий ответ на вопрос, к какой категории принадлежит то или иное Наблюдение (Observation):

Метрики опухолей (сверху) и клиентская база

Задачей же Unsupervised Learning может быть обнаружение групп похожих примеров в данных, и это называется Кластеризацией (Clustering), или определение того, как данные распределяются в пространстве, и это известно как Оценка плотности (Density Estimation). Такие алгоритмы позволяют выполнять более сложные задачи обработки по сравнению с обучением с учителем, хоть и являются менее предсказуемыми.

Обучение без учителя:

  • Находит в данных неизвестные закономерности
  • Помогает найти полезные для категоризации Признаки (Features)
  • Стоит дешевле (т.е. подготовка неразмеченных данных)
  • Не обязывает определять число классов

К примеру, в семье с ребенком есть еще и собака, которую он узнает среди остальных живых существ. Друг семьи приводит с собой другую собаку и пытается подружить своего четвероногого друга с малышом. Малыш раньше не видел этого пса, но узнает характерные черты (два уха, два глаза, ходьба на четырех ногах) и идентифицирует новое животное как собаку. Это простейшая аналогия обучения без учителя, при условии, что гость не указал ребенку, что его компаньон – пес.

Наряду с этим выделяют еще три разновидности обучения:

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