MATLAB聚类 自适应 从类别数目的选择到聚类

本文介绍了如何通过不同聚类算法(如k-means、层次聚类和高斯混合聚类)结合多种评估标准(包括Calinski-Harabasz、Davies-Bouldin等)来确定最佳聚类中心数目。

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

聚类是很快的,所以不需要自适应,只需要[1.....N]个类中心,遍历一遍,得到N个评估值,[1.....N]选一个最好的类中心数目即可。

类中心个数的评估:

eva = evalclusters(mat,'kmeans','CalinskiHarabasz',...
    'klist',[1:6])
eva = evalclusters(mat,'linkage','CalinskiHarabasz',...
    'klist',[1:6])
eva = evalclusters(mat,'gmdistribution','CalinskiHarabasz',...
    'klist',[1:6])

mat------你自己的要聚类的数据,(n*d)每行是一个样本。

'kmeans'-----这里是聚类算法,kmeans大家都知道。linkage是针对有层次数据的聚类算法,而gmd是高斯混合聚类。

'CalinskiHarabasz'-------是聚类的评价标准,还有另外 三个选项:

'DaviesBouldin''gap''silhouette'

那么,假如你已经用这个算法得到了结果,关键问题就变成了怎么挑选最佳聚类中心数目。

klist-----聚类中心的范围。

挑选聚类中心

同样的数据,不同的评价标准,都是kmeans聚类方式。

‘CalinskiHarabasz(CH)'挑选拐点,所以这张图的聚类中心是20.,为了看不同的同学,我给出代码:

plot(eva.CriterionValues)

'DaviesBouldin'最大值点,拐点,所以可以选择20-40之间。

聚类标准含义

'DaviesBouldin'(DB)标准以及CH标准

聚类代码

[IDX,C,SUMD,D]=kmeans(mat(label==class,:),C_amount);
[IDX,C,SUMD,D]=kmeans(mat,C_amount);

mat就是你要聚类的数据,n*d,返回值:

 [IDX, C] = kmeans(X, K) returns the K cluster centroid locations in
    the K-by-P matrix C.
 
    [IDX, C, SUMD] = kmeans(X, K) returns the within-cluster sums of
    point-to-centroid distances in the K-by-1 vector sumD.
 
    [IDX, C, SUMD, D] = kmeans(X, K) returns distances from each point
    to every centroid in the N-by-K matrix D.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值