繁体   English   中英

我如何在Matlab中使用轮廓函数

[英]How do i use the silhouette function in matlab

我对如何在Matlab中使用轮廓函数有疑问

如果我有我的相关矩阵X = 90x90和我的数据的集群成员数; 说我有五个集群。 定义为cidx,其长度为90x1,每个值分配一个从1到5的数字。

我可以只将相关矩阵和cidx传递给Silhouette函数并将度量指定为“ correlation”,还是应该将其传递给我的收益矩阵?

谢谢你的帮助!

首先,您需要建立集群。 例如,matlab中的kmeans函数可以为您完成此任务。

cidx = kmeans(X,2,'distance','Euclidean');

根据MATLAB:

IDX = k均值(X,k)的划分的n乘p个数据矩阵X的点分成k个簇。 此迭代分区在所有群集上将点到群集质心距离的群集内总和最小化。 X的行对应于点,列的对应于变量。 kmeans返回包含每个点的聚簇索引的n×1向量IDX

所以cidxn乘1的簇索引。 找到后,指数就可以通过XCIDX剪影功能:

s = silhouette(X,cidx,'Euclidean')

s是n×1向量中的轮廓值。

轮廓用于确定聚类的质量。 下面使用100 * 3大小的矩阵说明了此函数的工作方式。 范例-

NofClusters=3;

numObservarations = 100;
dimensions = 3;
data = rand([numObservarations dimensions]);
numObservarations = length(data);

%% cluster
opts = statset('MaxIter', 500, 'Display', 'iter');
[clustIDX, clusters, interClustSum, Dist] = kmeans(data, K, 'options',opts, ...
    'distance','sqEuclidean', 'EmptyAction','singleton', 'replicates',3);
%% plot data+clusters
figure, hold on
scatter3(data(:,1),data(:,2),data(:,3), 50, clustIDX, 'filled')
scatter3(clusters(:,1),clusters(:,2),clusters(:,3), 200, (1:K)', 'filled')
hold off, xlabel('x'), ylabel('y'), zlabel('z')

%% plot clusters quality
figure
[silh,h] = silhouette(data, clustIDX);
avrgScore = mean(silh);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM