Как я могу пометить цветом данные кластера после установки GMM? - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь сделать некоторые метки для данных кластера после GMM, но не нашел способа сделать это.

Позвольте мне объяснить:

У меня есть несколько пар данных x, yв массив X = 30000x2.В действительности массив содержит данные из разных источников (известных), и каждый источник имеет одинаковое количество данных (таким образом, источник 1 имеет 500 (x, y), источник 2 500 (x, y) и т. Д., И все онидобавлено в массив X выше).

Я установил GMM на X. Результаты кластера в порядке и, как и ожидалось, но теперь, когда данные кластеризованы, я хочу иметь возможность кодировать их цветом на основе их исходного происхождения.

Итак, скажем, я хочу показать черным цветом точки данных источника 1, которые находятся в кластере 2.

Возможно ли это?

Пример: В исходном массиве у нас есть три источника данных.Источник 1 - это данные 1-10000, источник 2 10001-20000 и источник 3 20001-30000.

После подгонки и кластеризации GMM я сгруппировал свои данные, как показано на рисунке 1, и получил два кластера.Красный цвет во всех них не имеет значения.

Я хочу изменить цвет точек данных в кластере 2 на основе их индекса и исходного массива XEg, если точка данных принадлежит кластеру 2 (clusteridx =2), затем я хочу проверить, к какому источнику он принадлежит, а затем раскрасить его и соответствующим образом обозначить.Чтобы вы могли определить, из какого источника находятся точки данных в кластере 2, как показано на втором рисунке.

Оригинальные кластеры

enter image description here

Желаемая маркировка

enter image description here

1 Ответ

0 голосов
/ 15 марта 2019

Вы можете добавить столбец «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

...