安装 GMM 后如何对聚类数据进行颜色标记?

How can I color-label the cluster data after GMM is fitted?

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

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

原始集群

所需的标签

您可以添加一个 "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')