Matlab:聚类中的问题

时间:2013-09-25 17:04:35

标签: matlab cluster-analysis dimensionality-reduction

我需要对使用k-means聚类的多维数据集数据集执行降维。该数据包含从放置在触觉手套上的传感器的传感器读数获得的正和负实数。在表示动作时捕获数据,如绘图字母“A”为

    0.1373   -1.8764
   -1.7020   -0.8322
    0.4862    0.8276
   -0.0078    1.3597
    0.9008    1.8043
    2.9751    0.7125
   -0.3257    0.1754

现在,我的困惑是

  1. 我没有使用以下代码获得任何多维数据聚类
  2. K=3;
    load('b2.txt');
    
    
    
    data = b2;
    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')
    

    如何纠正这个?出了什么问题?

    1. 在获取所有维度的集群后,我现在通过其集群标签将数据表示为

      1 1 3 2

    2. 等等。

      • 此数据是否包含事件的时间顺序?通过浏览它确实有,但有些论文表明聚类没有考虑时间顺序。
      • 我需要缩短它的长度。我知道Principal组件分析,但用于选择维度而不会减少数据长度。使用传入的测试数据集将此缩减格式用于基于距离的分类是否合理?

1 个答案:

答案 0 :(得分:2)

您提供的代码可以很好地处理您提供的 2D 数据集(两个功能)的轻微修改。

尝试如下:

data=[    0.1373   -1.8764
         -1.7020   -0.8322
          0.4862    0.8276
         -0.0078    1.3597
          0.9008    1.8043
          2.9751    0.7125
         -0.3257    0.1754];

numObservarations = length(data);
K=3

%% cluster

%opts = statset('MaxIter', 500, 'Display', 'iter');
[clustIDX, clusters, interClustSum, Dist] = ...
     kmeans(data, K, 'MaxIter', 500, 'Display', 'iter', ...
            'distance','sqEuclidean', 'EmptyAction','singleton', 'replicates',3);

%% plot data+clusters

figure, hold on
scatter(data(:,1),data(:,2), 50, clustIDX, 'filled')
scatter(clusters(:,1),clusters(:,2), 200, (1:K)', 'filled')
hold off, xlabel('x'), ylabel('y')

结果如下:

enter image description here

您提供的数据集再次包含 2 功能,因此它基本上是2D。

据我所知,kmeans对数据进行聚类,它本身不会降低维数(我等待其他人阅读此内容以纠正我)。对于维数降低,您真正想要做的是PCA或类似的。在PCA之后,您可以将数据投影到主要组件轴上,并以“低维”方式显示集群。

我实际上并不理解时间顺序的含义,但是如果时间事件和功能之间存在某种相关性,您可以期望kmeans根据这些事件进行分类(间接)。


这是另一个例子。这次聚类大小为3.聚类的质心在clusters以上的变量kmeans输出中。

enter image description here

左侧的图显示了根据时间着色的2D要素空间中的点(颜色条显示相对时间与颜色的关系)。中间的图显示了根据新的色标分配了什么聚类点,与右图相同的色标显示了质心的位置。该图的要点是显示特征所显示的时间规律性。

关于你关于时间排序的问题,似乎kmeans可以揭示特征中隐含的时间相关性(如果这就是你的意思),如下面的clustIDX对比图所示时间:

enter image description here

但我不知道它与其他处理算法的比较(为什么它会有利)。我会前往dsp.stackexchange寻求更好的答案。


使用以下代码生成子图:

subplot(121);
scatter(data(:,2),data(:,3), 50, clustIDX, 'filled')
axis tight 
box on
xlabel('feature 1'), ylabel('feature 2')
title('labelled points')

subplot(122);
scatter(clusters(:,2),clusters(:,3), 200, (1:K)', 'filled')
axis tight
box on
xlabel('feature 1'),ylabel('feature 2')
title('clusters')

第二个情节:

figure
scatter([1:length(clustIDX)],clustIDX, 50, clustIDX, 'filled')
xlabel('time'),ylabel('cluster')
box on
axis tight
title('labelled points in time domain')