2

我需要对使用 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. 我没有使用以下代码对多维数据进行任何聚类
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

等等。

  • 这些数据是否包含事件的时间顺序?通过一目了然,但有论文说聚类不考虑时间顺序。
  • 我需要减少它的长度。我知道主成分分析,但它用于选择维度并且不会减少数据长度。使用传入的测试数据集使用这种简化的格式进行基于距离的分类是否合理?
4

1 回答 1

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')

这是结果:

在此处输入图像描述

同样,您提供的数据集包含2 个特征,因此它本质上是 2D 的。

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

我实际上并不理解您所说的时间排序是什么意思,但是如果时间事件与您可以期望kmeans根据这些事件(间接)分类的特征之间存在某种相关性,我会这样做。


这是另一个例子。这次集群大小是 3。集群的质心在clusters上面的变量输出中kmeans

在此处输入图像描述

左侧的图显示了 2D 特征空间中根据时间着色的点(颜色条显示了相对时间与颜色的关系)。中图显示了根据新色标分配给哪些聚类点,与右侧图相同的色标显示质心的位置。该图的重点是显示特征出现的时间规律。

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

在此处输入图像描述

但我不知道它与其他处理算法相比如何(为什么会有优势)。我会前往 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')
于 2013-09-25T20:59:53.160 回答