Menu
CoddyTech

Даем названия кластерам

Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 46 из 51.

Кластеры имеют номера, а не названия. Теперь можно использовать метки: перекрёстная таблица подсчитывает, какие цифры попали в каждый кластер, например эти 1, 7 и 9 в 3 кластерах:

Таблица 3 на 3 с количеством элементов: кластеры расположены по строкам, цифры 1, 7 и 9 — по столбцам. Наибольшее число в каждой строке обведено: в кластере 0 — 166 девяток, в кластере 1 — 176 семёрок, в кластере 2 — 154 единицы

Назовите каждый кластер в честь наиболее часто встречающейся в нём цифры. Сканирования этой цифры в кластере считаются правильно классифицированными:

ct = pd.crosstab(km.labels_, y)
names = ct.idxmax(axis=1)      # столбец с наибольшим значением в каждой строке
right = ct.max(axis=1).sum()
print(names.tolist(), right)

Это выводит [9, 7, 1] 496: 496 из 541 сканирования названы правильно благодаря группам, обнаруженным без единой метки.

challenge icon

Задание

Средне

Назови свои 10 кластеров. В заготовке есть km, обученный без меток; теперь можно использовать цифры из y.

  1. Составь перекрёстную таблицу кластеров и y и назови каждый кластер в честь наиболее часто встречающейся в нём цифры.
  2. В порядке названий выведи количество правильно названных сканов в каждом кластере, его размер и долю правильно названных сканов в процентах, округлённую до целого.
  3. Выведи общее количество правильно названных сканов и процент с точностью до 1 десятичного знака.

Для 5 кластеров:

Cluster named 0: 175 of 177 scans (99%)
Cluster named 2: 160 of 367 scans (44%)
Cluster named 3: 168 of 531 scans (32%)
Cluster named 6: 179 of 359 scans (50%)
Cluster named 7: 176 of 363 scans (48%)
Named right without labels: 858 of 1797 scans (47.7%)

Какой из твоих кластеров самый слабый и что в нём скрывается?

Попробуйте сами

import pandas as pd
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans

# Из «Look at the Digits»: 1,797 изображений по 64 пикселя, значения интенсивности от 0 до 16
digits = load_digits()
X = digits.data
y = digits.target

# Из «Shrink with PCA»: 80% дисперсии в 13 числах на изображение
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)

# Из «Cluster the Digits»: 10 кластеров, найденных без меток
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение без учителя

Потренируйтесь самостоятельно: Онлайн-компилятор Python