Наскрізне навчання без учителя

Наглядове навчання в Python

Benjamin Wilson

Director of Research at lateral.io

Навчання без учителя

  • Навчання без учителя знаходить закономірності в даних
  • Напр., кластеризація клієнтів за покупками
  • Стискання даних за шаблонами покупок (зниження розмірності)
Наглядове навчання в Python

Навчання з учителем vs без учителя

  • Навчання з учителем шукає патерни для задачі передбачення
  • Напр., класифікувати пухлини як доброякісні чи злоякісні (мітки)
  • Навчання без учителя знаходить закономірності в даних
  • ... але без конкретної задачі передбачення
Наглядове навчання в Python

Набір даних Iris

  • Вимірювання багатьох рослин ірису
  • Три види ірису:
    • setosa
    • versicolor
    • virginica
  • Довжина та ширина пелюстки, довжина та ширина чашолистка (ознаки набору даних)

Ірис

1 https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html
Наглядове навчання в Python

Масиви, ознаки й вибірки

  • 2D-масив NumPy
  • Стовпці — вимірювання (ознаки)
  • Рядки — окремі рослини ірису (вибірки)
Наглядове навчання в Python

Дані Iris мають 4 виміри

  • Вибірки ірису — це точки у 4-вимірному просторі
  • Розмірність = кількість ознак
  • Забагато вимірів для візуалізації!
  • ... але навчання без учителя допомагає зрозуміти дані
Наглядове навчання в Python

Кластеризація k-means

  • Знаходить кластери вибірок
  • Кількість кластерів потрібно задати
  • Реалізовано в sklearn ("scikit-learn")
Наглядове навчання в Python
print(samples)
[[ 5.   3.3  1.4  0.2]
 [ 5.   3.5  1.3  0.3]
 ...
 [ 7.2  3.2  6.   1.8]]
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
KMeans(n_clusters=3)
labels = model.predict(samples)

print(labels)
[0 0 1 1 0 1 2 1 0 1 ...]
Наглядове навчання в Python

Мітки кластерів для нових вибірок

  • Нові вибірки можна віднести до наявних кластерів
  • k-means запам'ятовує середні кожного кластера ("центроїди")
  • Знаходить найближчий центроїд для кожної нової вибірки
Наглядове навчання в Python

Мітки кластерів для нових вибірок

print(new_samples)
[[ 5.7  4.4  1.5  0.4]
 [ 6.5  3.   5.5  1.8]
 [ 5.8  2.7  5.1  1.9]]
new_labels = model.predict(new_samples)

print(new_labels)
[0 2 1]
Наглядове навчання в Python

Точкові діаграми

  • Точкова діаграма: довжина чашолистка vs довжина пелюстки
  • Кожна точка — вибірка ірису
  • Розфарбуйте точки за мітками кластерів
  • PyPlot (matplotlib.pyplot)

Точкова діаграма

Наглядове навчання в Python

Точкові діаграми

import matplotlib.pyplot as plt

xs = samples[:,0] ys = samples[:,2]
plt.scatter(xs, ys, c=labels)
plt.show()
Наглядове навчання в Python

Давайте потренуємось!

Наглядове навчання в Python

Preparing Video For Download...