无监督分类算法—K-Means

无监督学习(unsupervised learning)

没有已知标签的训练集,只给一堆数据集,通过学习去发现数据内在的性质及规律。

K-Means聚类算法步骤

  1. 随机取k个样本作为初始均值向量(或者采用别的方式获取初始均值向量);
  2. 根据每个样本与均值向量的距离来判断各个样本所属的蔟。
  3. 根据分好的蔟再次计算新的均值向量,根据新的均值向量再对每个样本进行划分。
  4. 循环步骤2,3,直到分类结果相同或者在我们规定的误差范围内时中止。

如何选择合适的k(即应当把数据聚成几类?)

K-means 算法需要你先确定把数据分成几类,当你面对一个庞大的多维数据集时,你也不知道应该将数据分成几类比较好,这个时候就需要有一些适当的方法来进行判断。

1. Elbow method

一般得到的曲线拐点不是很明显,较难确定最佳的k值。

2. Average silhouette method

计算聚成不同的类时的轮廓系数(silhouette score),系数越大说明聚类的效果越好。

from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

K = range(1,15)
KM = [KMeans(n_clusters=k).fit(normalized_features) for k in K]   # clustering

# Average silhouette method
s = []
for k_means in KM[1:]:
    
    labels = k_means.labels_
    centroids = k_means.cluster_centers_

    # calculate silhouette_score
    s.append(silhouette_score(normalized_features, labels, metric='euclidean'))  

K-means 算法优缺点

K-means 算法优点

  • 算法框架清晰,简单,容易理解。
  • 本算法确定的k个划分到达平方误差最小。当聚类是密集的,且类与类之间区别明显时,效果较好。
  • 对于处理大数据集,这个算法是相对可伸缩和高效的,计算的复杂度为O(NKt),其中N是数据对象的数目,t是迭代的次数。一般来说,K<<N,t<<N 。

K-means 算法缺点

  • K-means算法中k是事先给定的,这个k值的选定是非常难以估计的。
  • 算法的时间开销是非常大的。
  • K-means算法对异常数据很敏感。在计算质心的过程中,如果某个数据很异常,在计算均值的时候,会对结果影响非常大。

参考资料

  1. http://blog.csdn.net/jwh_bupt/article/details/7654120
  2. http://www.jianshu.com/p/6c097c4d376b
  3. https://en.wikipedia.org/wiki/K-means_clustering
原文地址:https://www.cnblogs.com/binwone/p/6041568.html