非监督学习(unsupervised learning)

it2025-05-18  3

文章目录

k-means步骤KmeansKmeans性能评估指标Kmeans性能评估指标APIsilhouette_scoreKmeans总结k-means案例分析


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()
最新回复(0)