聚类评估和K值确定

聚类评估

聚类评估估计在数据集上进行聚类的可行性和被聚类方法产生的结果的质量。聚类评估主要包括:估计聚类趋势、确定数据集中的簇数、测定聚类质量。

估计聚类趋势:对于给定的数据集,评估该数据集是否存在非随机结构。盲目地在数据集上使用聚类方法将返回一些簇,所挖掘的簇可能是误导。数据集上的聚类分析是有意义的,仅当数据中存在非随机结构。

聚类趋势评估确定给定的数据集是否具有可以导致有意义的聚类的非随机结构。一个没有任何非随机结构的数据集,如数据空间中均匀分布的点,尽管聚类算法可以为该数据集返回簇,但这些簇是随机的,没有任何意义。聚类要求数据的非均匀分布。

霍普金斯统计量(Hopkins Statistic)是一种空间统计量,检验空间分布的变量的空间随机性。

计算步骤:

(1) 均匀地从D的空间中抽取n个点p1,p2,...pn,对每个点pi(1≤i≤n),找出pi在D中的最近邻,并令xi为pi与它在D中的最近邻之间的距离,即

(2) 均匀地从D的空间中抽取n个点q1,q2,...qn,对每个点qi(1≤i≤n),找出qi在D-{qi}中的最近邻,并令yi为qi与它在D-{qi}中的最近邻之间的距离,即

(3) 计算霍普金斯统计量H

如果D是均匀分布的,则将会很接近,H大约为0.5.而如果D是高度倾斜的,则,因而H将会接近与0. 

 

确定数据集中的簇数:K-均值这样的算法需要数据集的簇数作为参数,簇数也可以看作是数据集的有趣并且重要的概括统计量。因此,在使用聚类算法导出详细的簇之前,估计簇数是可取的。

经验方法:

肘方法(elbow method):

给定k>0,使用像K-均值这样的算法对数据集聚类,并计算簇内方差和var(k)。然后,绘制var关于k的曲线。曲线的第一个(或最显著的)拐点暗示“正确的”簇数。

交叉验证法:将数据分为m部分;用m-1部分获得聚类模型,余下部分评估聚类质量(测试样本与类中心的距离和);对k>0重复m次,比较总体质量,选择能获得最好聚类质量的k

测定聚类质量:在数据集上使用聚类方法之后,需要评估结果簇的质量。

 

两类方法:外在方法和内在方法

外在方法:

有监督的方法,需要基准数据。用一定的度量评判聚类结果与基准数据的符合程度。(基准是一种理想的聚类,通常由专家构建)

Jaccard系数(Jaccard Coefficient, JC)

FM指数(Fowlkes and Mallows Index, FMI)

Rand指数(Rand Index, RI)

     (  a+b+c+d=m(m-1)/2  )

上述性能度量的结果值均在[0,1]区间,值越大越好。

 

用Q(C,Cg)表示聚类C在给定基准数据Cg条件下的质量度量

Q的好坏取决于四个条件:

簇的同质性:簇内越纯越好

簇的完整性:能够将基准数据中属于相同类的样本聚类为相同的类

碎布袋:把一个异种数据加入纯类应该比放入碎布袋受到更大的“处罚”

小簇的保持性:把小簇划分成更小簇比把大簇划分为小簇的危害更大

BCubed精度和召回率:一个对象的精度指示同一个簇中有多少个其他对象与该对象同属一个类别。一个对象的召回率反映有多少同一类别的对象被分配在相同的簇中。

设D={o1,o2,...on}是对象的集合,C是D中的一个聚类。设L(oi)(1≤i≤n)是基准确定的oi的类别,C(oi)是C中oi的cluster_ID,对于两个对象oi和oj(1≤i,j≤n,i≠j),它们之间在聚类C中的关系的正确性由给出。

BCubed精度定义为

BCubed召回率定义为

内在方法:

无监督的方法,无需基准数据。类内聚集程度和类间离散程度。

考虑聚类结果的簇划分C={C1,C2,...,Ck},定义簇C内样本间的平均距离

簇C内样本间的最远距离:

簇Ci与簇Cj最近样本间的距离:

簇Ci与簇Cj中心点间的距离:

DB指数(Davies-Bouldin Index,DBI)

Dunn指数(Dunn Index,DI)

DBI值越小越好,而DI则相反,值越大越好。

 

轮廓系数(silhouette coefficient):

对于D中的每个对象o,计算o与o所属的簇内其他对象之间的平均距离a(o):

b(o)是o到不包含o的所有簇的最小平均距离:

轮廓系数定义为:

轮廓系数的值在-1和1之间。

a(o)的值反映o所属的簇的紧凑性。该值越小,簇越紧凑。

b(o)的值捕获o与其他簇的分离程度。b(o)的值越大,o与其他簇越分离。

当o的轮廓系数值接近1时,包含o的簇是紧凑的,并且o远离其他簇,这是一种可取的情况。

当轮廓系数的值为负时,这意味在期望情况下,o距离其他簇的对象比距离与自己同在簇的对象更近,许多情况下,这很糟糕,应当避免。

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Matlab中求聚类数K时,可以使用一些常见的方法,如肘部法则(Elbow Method)和轮廓系数(Silhouette Coefficient)来帮助确定最佳的聚类数。 1. 肘部法则(Elbow Method):该方法通过绘制聚类数K与聚类结果的误差平方和(SSE)之间的关系图来确定最佳的聚类数。在绘制图形时,选择一个K,使得误差平方和的下降幅度变得不那么显著,形成一个类似于"肘部"的拐点。这个拐点对应的K就是最佳的聚类数。 ```matlab sse = zeros(1, maxK); % 存储每个K对应的SSE for k = 1:maxK idx = kmeans(data, k); % 使用kmeans进行聚类 centers = zeros(k, size(data, 2)); for i = 1:k centers(i, :) = mean(data(idx == i, :)); % 计算每个聚类的中心 end sse(k) = sum(sum((data - centers(idx, :)).^2)); % 计算SSE end % 绘制聚类数K与SSE之间的关系图 plot(1:maxK, sse, 'o-'); xlabel('Number of clusters'); ylabel('Sum of Squared Errors (SSE)'); title('Elbow Method'); ``` 通过观察绘制的图形,找到拐点对应的K即可确定最佳的聚类数。 2. 轮廓系数(Silhouette Coefficient):该方法通过计算每个样本的轮廓系数,并求取所有样本的平均评估聚类的质量。轮廓系数的取范围为[-1, 1],越接近1表示聚类效果越好,越接近-1表示聚类效果越差。选择轮廓系数最大的K作为最佳的聚类数。 ```matlab silhouette_vals = zeros(1, maxK); for k = 2:maxK idx = kmeans(data, k); % 使用kmeans进行聚类 silhouette_vals(k) = mean(silhouette(data, idx)); % 计算轮廓系数 end % 绘制聚类数K与轮廓系数之间的关系图 plot(2:maxK, silhouette_vals(2:end), 'o-'); xlabel('Number of clusters'); ylabel('Silhouette Coefficient'); title('Silhouette Coefficient'); ``` 选择轮廓系数最大的K作为最佳的聚类数。 这些方法都是常见的聚类数选择方法,但结果可能因数据集的特点而有所不同。因此,根据具体情况选择适合的方法来确定最佳的聚类数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值