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

版权声明:原创禁止转载 https://blog.csdn.net/u013249853/article/details/82759848

聚类是很快的,所以不需要自适应,只需要[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.

猜你喜欢

转载自blog.csdn.net/u013249853/article/details/82759848