【问题标题】:How do i use the silhouette function in matlabmatlab中如何使用轮廓函数
【发布时间】:2014-04-15 16:46:09
【问题描述】:

我有一个关于如何在matlab中使用剪影函数的问题

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

我可以只将相关矩阵和 cidx 传递给轮廓函数并将度量指定为“相关”,还是应该传入我的返回矩阵?

感谢您的帮助!

【问题讨论】:

    标签: matlab statistics


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      首先,您需要制作集群。例如,matlab 中的 kmeans 函数会为您执行此操作。

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

      根据 MA​​TLAB:

      IDX = kmeans(X,k)n×p 数据矩阵 X 中的点进行分区 k 个簇。这种迭代分区最小化总和,超过 所有集群,点到集群质心的集群内总和 距离。 X的行对应点,列对应 变量。 kmeans 返回一个包含集群的 n×1 向量 IDX 每个点的索引。

      所以这里 cidxn-by-1 簇索引。 找到索引后,您可以将 Xcidx 传递给 silhouette 函数:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多