0

我正在尝试在 GMM 之后对集群数据进行一些标记,但还没有找到方法。

让我解释:

我有一些 x,y 数据对到 X=30000x2 数组中。实际上,该数组包含来自不同来源(已知)的数据,并且每个来源具有相同数量的数据(因此来源 1 有 500 (x,y),来源 2 500 (x,y) 等等,它们都是附加到上面的 X 数组中)。

我已经在 X 上安装了 GMM。聚类结果很好并且符合预期,但是现在数据已经聚类,我希望能够根据它们的初始来源对它们进行颜色编码。

所以假设我想用黑色显示集群 2 中源 1 的数据点。

那可能吗?

示例: 在原始数组中,我们有三个数据源。来源 1 是来自 1-10000、来源 2 10001-20000 和来源 3 20001-30000 的数据。

在 GMM 拟合和聚类之后,我按照图 1 对数据进行了聚类,并且得到了两个聚类。所有这些中的红色都无关紧要。

我想根据它们的索引和原始数组 XEg 修改集群 2 中数据点的颜色,如果数据点属于集群 2(clusteridx=2),那么我想检查它属于哪个源然后着色它并相应地标记它。这样您就可以分辨出集群 2 中的数据点来自哪个来源,如第二张图所示。

原始集群

在此处输入图像描述

所需的标签

在此处输入图像描述

4

1 回答 1

0

您可以添加一个“source_id”列,然后在其上循环绘制。例如:

% setup fake data
source1 = rand(10,2);
source2 = rand(15,2);
source3 = rand(8,2);
% end setup

% append column with source_id (you could do this in a loop if you have many sources)
source1 = [source1, repmat(1, length(source1), 1)];
source2 = [source2, repmat(2, length(source2), 1)];
source3 = [source3, repmat(3, length(source3), 1)];

mytable = array2table([source1; source2; source3]);
mytable.Properties.VariableNames = {'X' 'Y' 'source_id'};

figure
hold on;
for ii = 1:max(mytable.source_id)
    rows = mytable.source_id==ii;
    x = mytable.X(rows);
    y = mytable.Y(rows);
    label = char(strcat('Source ID =', {' '}, num2str(ii)));
    mycolor = rand(1,3); 
    scatter(x,y, 'MarkerEdgeColor', mycolor, 'MarkerFaceColor', mycolor, 'DisplayName', label);
end
set(legend, 'Location', 'best')

在此处输入图像描述

于 2019-03-15T17:31:51.053 回答