【问题标题】:Matlab:Issues in clusteringMatlab:聚类中的问题
【发布时间】:2013-10-01 09:46:23
【问题描述】:

我需要对已使用 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

等等。

  • 此数据是否包含事件的时间顺序?一看就知道,但有论文说聚类不考虑时间顺序。
  • 我需要减少它的长度。我知道主成分分析,但它用于选择维度并且不会减少数据长度。使用传入的测试数据集进行基于距离的分类是否合理?

【问题讨论】:

  • 首先,data = b2(1:100); 似乎暗示这是一个一维而不是二维的聚类问题。也许对您的数据看起来有些了解,我们可以提供更多帮助......
  • 抱歉,打错了。我删除了它并添加了一些数据样本。还是没有剧情
  • 你能告诉我们size(data)的输出是什么吗?
  • 大小为 200 2 。还有这里的“opts”是什么意思?算法运行了多少次?

标签: matlab cluster-analysis dimensionality-reduction


【解决方案1】:

您提供的代码在对您提供的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 个特征,因此它本质上是二维的。

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

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


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

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

关于您关于时间排序的问题,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')

【讨论】:

  • 哦,我明白了,绘图功能不正确,谢谢。评论 1:我知道 kmeans 不会进行降维,尽管它为多维数据返回单个集群。我不想做降维,但想减少类似于数据挖掘应用程序的数据长度。我想使用集群数据,即。由其标签表示的原始数据 [12113...] 因此,窗口长度为 3 的情况下想知道是否可以对它们进行分组。
  • 评论 2:我想知道的下一件事是,如果数据由其集群表示,例如 [12113...],那么这些信息是否告诉我们有关生成数据?有证据吗?
  • 感谢您的编辑版本。 1. 你能告诉我用颜色绘制这 3 个新图形的命令吗? 2. 您能否进一步提供对第三张图的一些见解,说明该图或 clusterIDx 与时间的关系如何遵循时间顺序? 3. 最后,我不明白为什么算法会迭代 14 次,并解释说,既然我对每个维度都有一个集群平均值,那么我为什么要为所有维度获得一个集群标签?非常感谢您的持续帮助。
  • @SrishtiM kmeans 迭代地找到集群。在每次迭代中,每个质心和属于集群的点之间的 RMSD 都会减小。每个集群都有自己的任意数字标签,从 1 到集群的数量。您写道,您希望将 3 个点聚集到一个质心中,因此我指定 kmeans 应该生成 N/3 个簇(但每个簇不一定只有 3 个点,有些可能有更少的点)。
  • @SrishtiM 我认为您对维度与集群的含义有些混淆。簇不代表维度,它们代表...点簇。
猜你喜欢
  • 2011-07-18
  • 2011-12-22
  • 2014-09-16
  • 2014-03-26
  • 2023-03-11
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 2011-12-04
相关资源
最近更新 更多