聚类

聚类算法的概念

一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。

在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离法。

聚类算法实现流程

k-means其实包含两层内容:

K : 初始中心点个数(计划聚类数)
means:求中心点到其他数据点距离的平均值

k-means聚类步骤:

  • 1、随机设置K个特征空间内的点作为初始的聚类中心
  • 2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
  • 3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
  • 4、如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程

案例练习

1、随机设置K个特征空间内的点作为初始的聚类中心(本案例中设置p1和p2)

2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别

3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)

4、如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程【经过判断,需要重复上述步骤,开始新一轮迭代】

5、当每次迭代结果不变时,认为算法收敛,聚类完成,K-Means一定会停下,不可能陷入一直选质心的过程。

api介绍

  • sklearn.cluster.KMeans(n_clusters=8)
    • 参数:
      • n_clusters:开始的聚类中心数量
        • 整型,缺省值=8,生成的聚类数,即产生的质心(centroids)数。
    • 方法:
      • estimator.fit(x)
      • estimator.predict(x)
      • estimator.fit_predict(x)
        • 计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)

Kmeans性能评估指标

轮廓系数:

结合了聚类的凝聚度(Cohesion)和分离度(Separation),用于评估聚类的效果:

注:对于每个点i 为已聚类数据中的样本 ,bi 为i 到最近族群的所有样本的平均距离ai 为i 到本身簇的距离平均值max是bi或者ai的中较大的那个!最终计算出所有的样本点的轮廓系数平均值

对于每一个样本
1、计算蓝1到自身类别的点距离的平均值a_i
2、计算蓝1分别到红色类别,绿色类别所有的点的距离,求出平均值b1, b2,取其中最小的值当做b_i
极端:–这样容易理解
b_ i>>a_ i: 1完美
a_ i>>b_ i:-1最差
蓝1:轮廓系数[-1, 1]
超过0.1,说明聚类效果很好—经验

  • sklearn.metrics.silhouette_score(X, labels)
    • 计算所有样本的平均轮廓系数
    • X:特征值
    • labels:被聚类标记的目标值

流程:

  • 事先确定常数K,常数K意味着最终的聚类类别数;
  • 首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,
  • 接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变
  • 最终就确定了每个样本所属的类别以及每个类的质心。

注意:

  • 由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。