python的scikit-learn机器学习库实现kmeans聚类(参数、方法、实例、评估)

本文主要为scikit-learn中kmeans的介绍

kmeans主要参数

  1. n_clusters:
    k值 缺省值=8 【生成的聚类数,即产生的质心(centroids)数。】

  2. max_iter
    最大迭代次数。 缺省值=300 如果数据集不是凸集,可能很难收敛,此时可以通过指定最大的迭代次数让算法可以及时退出循环。

  3. n_init
    使用不同的初始化质心运行算法的次数。由于K-Means的结果会受初始值影响,属于局部最优的迭代算法,因此需要多跑几次以选择一个较好的聚类效果,默认是10,一般不需要改。k值较大时,可以适当增大这个值。

  4. init
    即初始值选择的方式。可以为完全随机选择’random’,优化过的’k-means++‘或者自己指定初始化的k个质心。一般建议使用默认的’k-means++’。
    (1)‘k-means++’ 用一种特殊的方法选定初始质心从而能加速迭代过程的收敛
    (2)‘random’ 随机从训练数据中选取初始质心。
    (3)如果传递的是一个ndarray,则应该形如 (n_clusters, n_features) 并给出初始质心。

  5. algorithm
    有“auto”, “full” or “elkan”三种选择。“full"就是传统的K-Means算法, “elkan”是elkan K-Means算法。默认的"auto"则会根据数据值是否是稀疏的,来决定如何选择"full"和“elkan”。一般数据是稠密的,那么就是 “elkan”,否则就是"full"。一般来说建议直接用默认的"auto"

  6. random_state
    整形或 numpy.RandomState 类型,可选。
    用于初始化质心的生成器(generator)。如果值为一个整数,则确定一个seed。此参数默认值为numpy的随机数生成器。

kmeans 的方法:

  1. fit(X[,y]):  
    计算k-means聚类。
  2. fit_predict(X[,y]):  
    计算簇质心并给每个样本预测类别。
  3. fit_transform(X[,y]):
    计算簇并 transform X to cluster-distance space。
  4. get_params([deep]):  
    取得估计器的参数
  5. predict(X):  
    给每个样本估计最接近的簇.。
  6. score(X[,y]):
    计算聚类误差
  7. set_params(*params):
    为这个估计器手动设定参数。
  8. 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属性:

  1. cluster_centers_:向量,[n_clusters, n_features] (聚类中心的坐标)

[ [ 第一类的中心在各个维度的坐标],
[ 第二类的中心在各个维度的坐标 ],
[ 第三类的中心在各个维度的坐标 ],
。。。
[ 。。。 ] ]

  1. Labels_:每个点的分类
  2. 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)k1mk
其中m为训练集样本数,k为类别数。Bk为类别之间的协方差矩阵,Wk为类别内部数据的协方差矩阵。tr为矩阵的迹。

也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。

在scikit-learn中, Calinski-Harabasz Index对应的方法是metrics.calinski_harabaz_score.

kmeans实例

待完善

参考文献

  1. 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
  2. https://www.cnblogs.com/pinard/p/6169370.html
  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值