聚类算法直接从数据的内在性质中学习最优的划分结果或者确定离散标签类型。
虽然在 Scikit-Learn 或其他地方有许多聚类算法,但最简单、最容易理解的聚类算法可能还得算是 k-means 聚类算法了,在sklearn.cluster.KMeans中实现。首先还是先输入标准程序包:%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set() # for plot styling
import numpy as np
01/ k-means简介
k-means 算法在不带标签的多维数据集中寻找确定数量的簇。最优的聚类结果需要符合以下两个假设。“簇中心点”(cluster center)是属于该簇的所有数据点坐标的算术平均值。
一个簇的每个点到该簇中心点的距离,比到其他簇中心点的距离短。
这两个假设是 k-means 模型的基础,后面会具体介绍如何用该算法解决问题。先通过一个简单的数据集,看看 k-means 算法的处理结果。首先,生成一个二维数据集,该数据集包含 4 个明显的簇。由于要演示无监督算法,因此去除可视化图中的标签:
from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples=300, centers=4,
cluster_std=0.60, random_state=0)
plt.scatter(X[:, 0], X[:, 1], s=50);
通过肉眼观察,可以很轻松地挑选出 4 个簇。而 k-means 算法可以自
动完成 4 个簇的识别工作,并且在 Scikit-Learn 中使用通用的评估器API:from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
下面用带彩色标签的数据来展示聚类结果。同时,画出簇中心点,这些簇中心点是由 k-means 评估器确定的:plt.scatter(X[:, 0], X[:, 1], c&#