聚类与已知标签
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 13 课,共 51 课。
当标签存在,但 k-means 从未见过它们时,检查它找到的结果:pd.crosstab 会统计每个簇和标签的组合。
labels = KMeans(n_clusters=3, n_init=10, random_state=0).fit_predict(X)
print(pd.crosstab(labels, kind))对于按长度和咖啡因含量聚类的 150 颗、共 3 种咖啡豆:每行代表一个簇,每列代表一种咖啡豆:
每个簇中的豆子大多属于同一类,只有 6 颗豆子分错了簇。而且 k-means 从未见过标签。
不过,簇并不是类。匹配度高意味着各类在数据上有所不同。匹配度低是一项发现,不是 bug。
挑战
中等k 均值聚类能找出鸢尾花的品种吗?起始代码会对花朵进行缩放,将它们的名称保存在 species 中,读取 k 并对它们进行聚类。
- 将聚类结果与品种进行交叉统计。
- 对于每个品种,输出其在一个聚类中的最大数量,以及该品种的总数。
- 统计只包含一个品种的聚类数量。
换一个花园,并设 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)
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器