• K-Means聚类


    K-Means聚类

    K-Means算法思想

    给定样本集,按照样本之间的距离大小,将样本集分为K个簇,让簇内尽量紧密,让簇间尽量大。

    假设簇划分为(C_1,C_2,...,C_k),则我们的目标是最小化平方误差E

    [E=sum_{i=1}^ksum_{xin C_i}lVert x-mu_i Vert_2^2 ]

    其中,(mu_i)是簇(C_i)的均值向量,也称为质心,表达式为

    [mu_i=frac{1}{|C_i|}sum_{xin C_i}x ]

    直接求E的最小值是一个NP难问题,我们随机取K个质心点,分别求所有样本到质心的距离,并标记好每个样本的类别,再重新计算质心。经过迭代后,找到最优的簇。

    K-Means推广

    1. K-Means++初始优化
    2. elkan K-Means距离优化
    3. Mini Batch K-Means大样本优化

    K-Means与KNN

    K-Means是无监督学习聚类,没有样本输出,需要训练;

    KNN的监督学习分类算法,有类别输出,不需要训练。

    K-Means总结

    K-Means优点:

    1. 原理简单,实现容易,收敛快
    2. 聚类效果好
    3. 算法可解释性强
    4. 参数少

    K-Means缺点:

    1. K值选择不好把握
    2. 对于不是凸的数据集比较难收敛
    3. 如果隐含类别的数据不平衡,如隐含类别数据严重失衡,或者隐含类别的方差不同,聚类效果不佳
    4. 采用迭代方法,得到的结果是局部最优
    5. 对噪音和异常点比较敏感。

    sklearn K-Means使用

    类库

    from sklearn.cluster import KMeans
    

    参数

    1. n_clusters:即K值
    2. max_iter:最大迭代次数
    3. n_init:不同的初始化质心运行算法的次数
    4. init:初值的初始化方式
    5. algorithm:算法优化

    K值评价

    不像监督学习和回归问题,无监督聚类问题没有样本输出,没有比较好的评估方法。有的从簇内稠密程度和簇间离散程序评价效果,如Calinski-Harabasz的评价如下:

    [s(k)=frac{tr(B_k)m-k}{tr(W_k)k-1} ]

    其中,m为训练样本数,k为类别数,(B_k)为类别之间协方差矩阵,(W_k)为类别内部数据的协方差矩阵,tr为矩阵的迹。类内部数据协方差越小越好,类别之间协方差越大越好。

    实例

    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans
    from sklearn import metrics
    
    y_pred = KMeans(n_clusters=2, random_state=9).fit(x)
    plt.scatter(x[:, 0], x[:, 1], c=y_pred)
    plt.show()
    metrics.calinski_harabaz_score(x, y_pred)
    
  • 相关阅读:
    微服务概念
    Oracle 语法汇总
    Docker 安装 MSSqlServer
    数据库和缓存一致性
    Redis Cluster 集群搭建与扩容、缩容
    阿里云centos 8无法安装应用
    [JavaScript] 异步加载
    ArrayList
    Java面经之:HashMap
    JVM面试题
  • 原文地址:https://www.cnblogs.com/guesswhy/p/12882668.html
Copyright © 2020-2023  润新知