《Python数据科学手册》笔记
聚类算法直接从数据的内在性质中学习最优的划分结果或者确定离散标签类型。
一、k-means需要达到的效果
k-means算法在不带标签的多维数据中寻找确定数量的簇,聚类结果应符合以下两个假设:
①“簇中心点”是属于该簇的所有数据点坐标的算术平均值。
②一个簇的每个点到该簇中心点的距离,比到其他簇中心点的距离短。
例如图1的二维数据,应用k-means算法聚类出4个簇,如图2。
图1 图2
需要注意的是,簇数量需要事先定好,k-means评估器不负责计算簇个数。
二、计算簇中心点
k-means应用期望最大化(EM)来计算簇中心点,其步骤用一个不太标准的流程图表示,如下:
三、需要注意的问题及解决方案
四、相关代码
1.生成一个包含4个明显簇的二维数据集(图1)
from sklearn.datasets.samples_generator import make_blobs
X,y_true = make_blobs(n_samples=300,centers=4,cluster_std=0.6,random_state=0)
plt.scatter(X[:,0],X[:,1],s=50)
2.应用k-means对该二维数据进行聚类(图2)
#用k-means算法完成4个簇的识别工作
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
#用带彩色标签的数据来展示聚类结果
plt.scatter(X[:,0],X[:,1],c=y_kmeans,s=50,cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)