K-Means в scikit-learn
Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 4 из 51.
scikit-learn выполняет за тебя весь цикл k-средних — здесь на 180 яблоках, оценённых по сладости и хрусткости:
Обучение только на X, без y:
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)
print(km.labels_[:8])
print(km.cluster_centers_.round(1))Это выводит номера кластеров для 8 строк, затем по одной строке на центр:
[2 0 0 1 2 0 1 1]
[[7. 7.5]
[6. 3. ]
[2.9 8.1]]n_init=10 выполняет 10 запусков и выбирает самый компактный кластер. km.predict([[8.6, 9.2]]) находит для нового яблока ближайший центр — [0].
labels = km.fit_predict(X) выполняет обе операции сразу: обучает модель, а затем возвращает labels_.
Числа — это всего лишь названия: для других данных кластер 0 может обозначать любую группу.
Задание
ЛегкоБиолог записал 150 погружений одного горбатого кита: время погружения и последующий отдых на поверхности. Бывают ли разные типы погружений? Заготовка создаёт диаграмму.
- Обучи KMeans на
X: 3 кластера,n_init=10,random_state=0. - Отобрази каждый кластер как отдельную группу с метками от
cluster 0доcluster 2. - Отметь центры чёрными звёздами с меткой
centers. Добавь легенду и покажи диаграмму.
Вот пример с другим китом:
Coddy опишет твою диаграмму.
Попробуйте сами
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# Не изменяйте строки ниже
rng = np.random.default_rng(14)
dive = np.concatenate([rng.normal(4, 1.0, 60), rng.normal(12, 2.0, 50), rng.normal(2.5, 0.7, 40)])
rest = np.concatenate([rng.normal(1.5, 0.5, 60), rng.normal(4, 1.0, 50), rng.normal(8, 1.5, 40)])
# 150 погружений одного горбатого кита: продолжительность погружения и последующего отдыха на поверхности, в минутах
X = np.round(np.clip(np.column_stack([dive, rest]), 0.5, None), 1)
fig, ax = plt.subplots()
ax.set_title("Whale Dives")
ax.set_xlabel("Dive (min)")
ax.set_ylabel("Surface rest (min)")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение без учителя
1Поиск групп
Обучение без метокИзмерение сходстваK-Means вручнуюK-Means в scikit-learnПовторение: участники спортзала4Иерархическая кластеризация
Пошаговое объединениеАгломеративные моделиДендрограммыПовторение: породы собак2Выбор k
ИнерцияМетод локтяОценки силуэтаМасштабирование перед кластеризациейПовторение: зоны доставкиПотренируйтесь самостоятельно: Онлайн-компилятор Python