[英]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.