Menu
CoddyTech

Кластеры и известные метки

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

Если метки есть, но алгоритм k-средних их никогда не видел, проверь, что он обнаружил: pd.crosstab подсчитывает каждую пару кластера и метки.

labels = KMeans(n_clusters=3, n_init=10, random_state=0).fit_predict(X)
print(pd.crosstab(labels, kind))

Для 150 кофейных зёрен 3 видов, сгруппированных по длине и содержанию кофеина: одна строка на кластер, один столбец на вид:

Таблица 3 на 3 с количеством зёрен: кластеры расположены по строкам, а виды кофе — по столбцам: арабика, либерика, робуста. В кластере 0 — 49 зёрен робусты; в кластере 1 — 48 зёрен арабики, 3 зёрнышка либерики и 1 зерно робусты; в кластере 2 — 47 зёрен либерики и 2 зерна арабики

Каждый кластер состоит преимущественно из одного вида; отклонились только 6 бобов. И k-средние ни разу не видели метку.

Однако кластеры — это не классы. Близкое соответствие означает, что классы различаются данными. Плохое соответствие — это результат анализа, а не ошибка.

challenge icon

Задание

Средне

Помогают ли кластеры k-means определить виды ирисов? Стартовый код масштабирует данные цветов, сохраняет их названия в species, считывает k и кластеризует их.

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

Для другого сада и k = 3:

setosa: 48 of 50 share a cluster
versicolor: 41 of 50 share a cluster
virginica: 33 of 50 share a cluster
Clusters with one species: 0 of 3

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

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

# 150 цветков ириса с масштабированными признаками и название вида каждого из них, скрытое от k-means
iris = load_iris()
X = StandardScaler().fit_transform(iris.data)
species = iris.target_names[iris.target]

k = int(input())
labels = KMeans(n_clusters=k, n_init=10, random_state=0).fit_predict(X)

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

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

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

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