Kmeans 流程: 1 随机抽取K个样本作为最初的质心 2 开始循环: 2.1 将每个样本点分配到离他们最近的质心,生成K个簇 2.2 对于每个簇,计算所有被分到该簇的样本点的平均值作为新的质心 3 当质心的位置不再发生变化,迭代停止,聚类完成
优点: 1 简单,容易实现 2 时间复杂度也不是很高
缺点: 1 K不好确定,得画学习曲线才能找到合适的K 2 初始质心的选择会影响聚类的效果 3 因为2,所以是局部最优,不是全局最优 4 因为要计算距离,所以对噪声比较敏感 5 因为需要样本能求得出均值,所以限制了样本的数据类型得是数值型的
python使用: kmeans = KMeans(n_clusters=k).fit(X) kmeans.predict(test)
效果评价指标: 轮廓系数 silhouette_score(越大越好)
from sklearn.cluster import KMeans import numpy as np >>> X = np.array([[1, 2], [1, 4], [1, 0], ... [10, 2], [10, 4], [10, 0]]) >>> kmeans = KMeans(n_clusters=2, random_state=0).fit(X) >>> kmeans.labels_ array([1, 1, 1, 0, 0, 0]) >>> kmeans.predict([[0, 0], [12, 3]]) array([1, 0]) >>> kmeans.cluster_centers_ array([[10., 2.], [ 1., 2.]]) from sklearn.metrics import silhouette_score from sklearn.metrics import silhouette_samples X y_pred silhouette_score(X,y_pred) silhouette_score(X,cluster_.labels_) silhouette_samples(X,y_pred)