sklearn聚类方法详解

本文详细介绍了sklearn中的聚类方法,包括KMeans的算法描述、优缺点、效果评价及K值确定。KMeans算法在簇近似高斯分布时效果较好,但对初始中心点敏感,且不适合非凸形状的簇。DBSCAN算法无需预设K值,能发现任意形状的簇,但对密度差异大的数据集可能效果不佳。两者在聚类效果和适用场景上有明显区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 KMeans

1.1 算法描述

  1. 随机选择k个中心
  2. 遍历所有样本,把样本划分到距离最近的一个中心
  3. 划分之后就有K个簇,计算每个簇的平均值作为新的质心
  4. 重复步骤2,直到达到停止条件

停止条件:

聚类中心不再发生变化;所有的距离最小;迭代次数达到设定值,

代价函数:误差平方和(SSE)

1.2 算法优缺点

优点:

  • 算法容易理解,聚类效果不错
  • 具有出色的速度
  • 当簇近似高斯分布时,效果比较好

缺点:

  • 需要自己确定K值,k值的选定是比较难确定
  • 对初始中心点敏感
  • 不适合发现非凸形状的簇或者大小差别较大的簇
  • 特殊值/离群值对模型的影响比较大
  •  从数据先验的角度来说,在 Kmeans 中,我们假设各个 cluster 的先验概率是一样的,但是各个 cluster 的数据量可能是不均匀的。举个例子,cluster A 中包含了10000个样本,cluster B 中只包含了100个。那么对于一个新的样本,在不考虑其与A cluster、 B cluster 相似度的情况,其属于 cluster A 的概率肯定是要大于 cluster B的。

1.3 效果评价

从簇内的稠密程度和簇间的离散程度来评估聚类的效果。

常见的方法有轮廓系数Silhouette Coefficient和Calinski-Harabasz Index

1.3.1 轮廓系数

轮廓系数(Silhouette Coefficient)结合了聚类的凝聚度(Cohesion)和分离度(Separation),用于评估聚类的效果。该值处于-1~1之间,值越大,表示聚类效果越好。具体计算方法如下:

  1. 对于第i个元素x_i,计算x_i与其同一个簇内的所有其他元素距离的平均值,记作a_i,用于量化簇内的凝聚度。
  2. 选取x_i外的一个簇b,计算x_i与b中所有点的平均距离,遍历所有其他簇,找到最近的这个平均距离,记作b_i,用于量化簇之间分离度。
  3. 对于元素x_i,轮廓系数s_i = (b_i – a_i)/max(a_i,b_i)
  4. 计算所有x的轮廓系数,求出平均值即为当前聚类的整体轮廓系数

先是计算每一个样本的轮廓系数,然后计算所有样本的轮廓系数,求平均值作为整体轮廓系数

从上面的公式,不难发现若s_i小于0,a_i  > b_i, 说明x_i与其簇内元素的平均距离大于最近的其他簇,表示聚类效果不好。如果a_i趋于0,或者b_i足够大,那么s_i趋近与1,说明聚类效果比较好。

相关代码:

import numpy as np
from sklearn.cluster import KMeans
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
labels = kmeans_model.labels_
metrics.silhouette_score(X, labels, metric='euclidean')

1.3.2 Calinski-Harabasz Index

这个不知道怎么翻译,估计是两个人名。

类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。 
在scikit-learn中, Calinski-Harabasz Index对应的方法是metrics.calinski_harabaz_score。

import numpy as np
from sklearn.cluster import KMeans
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
labels = kmeans_model.labels_
metrics.calinski_harabaz
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值