zoukankan      html  css  js  c++  java
  • 无监督分类算法—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
  • 相关阅读:
    爬虫代理及ssl验证
    python3编程基础之一:量的表示
    python3编程基础之一:标识符
    python3编程基础之一:关键字
    dell如何安装Win10/Ubuntu双系统
    linux修改用户名和密码
    cmake入门之内部构建
    入门cmake,窥探编译过程
    数据结构交作业代码的仓库名称
    手动制作BIOS和EFI多启动U盘
  • 原文地址:https://www.cnblogs.com/binwone/p/6041568.html
Copyright © 2011-2022 走看看