我正在尝试在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所示。
原始簇
所需标签
答案 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')