本文主要为scikit-learn中kmeans的介绍
kmeans主要参数
-
n_clusters:
k值 缺省值=8 【生成的聚类数,即产生的质心(centroids)数。】 -
max_iter:
最大迭代次数。 缺省值=300 如果数据集不是凸集,可能很难收敛,此时可以通过指定最大的迭代次数让算法可以及时退出循环。 -
n_init:
使用不同的初始化质心运行算法的次数。由于K-Means的结果会受初始值影响,属于局部最优的迭代算法,因此需要多跑几次以选择一个较好的聚类效果,默认是10,一般不需要改。k值较大时,可以适当增大这个值。 -
init:
即初始值选择的方式。可以为完全随机选择’random’,优化过的’k-means++‘或者自己指定初始化的k个质心。一般建议使用默认的’k-means++’。
(1)‘k-means++’ 用一种特殊的方法选定初始质心从而能加速迭代过程的收敛
(2)‘random’ 随机从训练数据中选取初始质心。
(3)如果传递的是一个ndarray,则应该形如 (n_clusters, n_features) 并给出初始质心。 -
algorithm:
有“auto”, “full” or “elkan”三种选择。“full"就是传统的K-Means算法, “elkan”是elkan K-Means算法。默认的"auto"则会根据数据值是否是稀疏的,来决定如何选择"full"和“elkan”。一般数据是稠密的,那么就是 “elkan”,否则就是"full"。一般来说建议直接用默认的"auto" -
random_state:
整形或 numpy.RandomState 类型,可选。
用于初始化质心的生成器(generator)。如果值为一个整数,则确定一个seed。此参数默认值为numpy的随机数生成器。
kmeans 的方法:
- fit(X[,y]):
计算k-means聚类。 - fit_predict(X[,y]):
计算簇质心并给每个样本预测类别。 - fit_transform(X[,y]):
计算簇并 transform X to cluster-distance space。 - get_params([deep]):
取得估计器的参数 - predict(X):
给每个样本估计最接近的簇.。 - score(X[,y]):
计算聚类误差 - set_params(*params):
为这个估计器手动设定参数。 - transform(X[,y]):
将X转换为群集距离空间。 在新空间中,每个维度都是到集群中心的距离。请注意,即使X是稀疏的,转换返回的数组通常也是密集的。
注意:
方法1和方法2存在区别
fit( )执行聚类,
而fit_predict( )负责提供聚类标签。获得的结果是预测得到的类别,是一个数组。使用场景存在不同:
方法1. fit(X[,y]): 这里面X是已标记的数据集/训练数据集方法2. fit_predict(X[,y]): 这里面 X’是未标记/测试数据集。即,使用fit_predict来预测未标记的数据集。
使用 fit( )方法可获得下面的属性:
kmeans属性:
- cluster_centers_:向量,[n_clusters, n_features] (聚类中心的坐标)
[ [ 第一类的中心在各个维度的坐标],
[ 第二类的中心在各个维度的坐标 ],
[ 第三类的中心在各个维度的坐标 ],
。。。
[ 。。。 ] ]
- Labels_:每个点的分类
- inertia_:float形 每个点到其簇的质心的距离之和。
聚类效果评估
可以从簇内的稠密程度和簇间的离散程度来评估聚类的效果。常见的方法有轮廓系数Silhouette Coefficient和Calinski-Harabasz Index。
本文选择Calinski-Harabasz Index,这个计算简单直接,得到的Calinski-Harabasz分数值s越大则聚类效果越好。
Calinski-Harabasz分数值s的数学计算公式是:
s
(
k
)
=
t
r
(
B
k
)
t
r
(
W
k
)
m
−
k
k
−
1
s(k)=\cfrac{tr(B_k)}{tr(W_k)}\cfrac{m-k}{k-1}
s(k)=tr(Wk)tr(Bk)k−1m−k
其中m为训练集样本数,k为类别数。Bk为类别之间的协方差矩阵,Wk为类别内部数据的协方差矩阵。tr为矩阵的迹。
也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。
在scikit-learn中, Calinski-Harabasz Index对应的方法是metrics.calinski_harabaz_score.
kmeans实例
待完善
参考文献
- https://blog.csdn.net/github_39261590/article/details/76910689?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
- https://www.cnblogs.com/pinard/p/6169370.html