• 无监督分类算法—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
  • 相关阅读:
    JavaAndroid项目结构
    Python 常用系统模块整理
    Python 部分系统类的常用方法整理
    xpath语法笔记
    xml笔记
    Python 内置函数笔记
    剑指Offer-二叉搜索树的第k个结点
    Java中Set集合是如何实现添加元素保证不重复的?
    剑指Offer-链表中倒数第k个结点
    Leetcode#1.Two Sum(两数之和)
  • 原文地址:https://www.cnblogs.com/binwone/p/6041568.html
Copyright © 2020-2023  润新知