[英]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 。
所以cidx是n乘1的簇索引。 找到后,指数就可以通过X和CIDX以剪影功能:
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.