拟合GMM后如何为集群数据加上颜色标签?

时间:2019-03-15 10:32:37

标签: matlab cluster-analysis gmm

我正在尝试在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对数据进行了聚类,得到了两个聚类。它们中的红色都是无关紧要的。

我想根据簇2中数据点的索引和原始数组X修改颜色。 例如,如果数据点属于群集2(clusteridx = 2),那么我想检查它属于哪个源,然后为其着色并相应地标记它。这样您就可以知道群集2中的数据点来自哪个源,如图2所示。

原始簇

enter image description here

所需标签

enter image description here

1 个答案:

答案 0 :(得分: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')

enter image description here