非监督学习(unsupervised learning)


k-means步骤

  • 1、随机设置K个特征空间内的点作为初始的聚类中心

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

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

  • 4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程

Kmeans

sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’)

  • k-means聚类

  • n_clusters: 开始的聚类中心数量

  • init: 初始化方法,默认为’k-means ++’

  • labels_:默认标记的类型,可以和真实值比较(不是值比较)

Kmeans性能评估指标

轮廓系数:

计算公式:

在这里插入图片描述

注: 对于每个点 i 为已聚类数据中的样本 ,bi 为 i 到其它族群的所有样本的平均距离,ai 为i 到本身簇的距离平均值

最终计算出所有的样本点的轮廓系数平均值

如果sci 小于0,说明ai 的平均距离大于最近的其他簇。聚类效果不好

如果sci 越大,说明ai 的平均距离小于最近的其他簇。聚类效果好

轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优

Kmeans性能评估指标API

sklearn.metrics.silhouette_score

silhouette_score

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

Kmeans总结

特点分析:
采用迭代式算法,直观易懂并且非常实用

缺点: 容易收敛到局部最优解(多次聚类)
需要预先设定簇的数量(k-means++解决)

k-means案例分析

手写数字数据上K-Means聚类的演示

from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans

def kmeans():
    """
    手写数字聚类过程
    :return: None
    """
    # 加载数据

    ld = load_digits()

    print(ld.target[:20])


    # 聚类
    km = KMeans(n_clusters=810)

    km.fit_transform(ld.data)

    print(km.labels_[:20])

    print(silhouette_score(ld.data,km.labels_))

    return None



if __name__=="__main__":
    kmeans()

猜你喜欢

转载自blog.csdn.net/qq_46456049/article/details/109211863