Попарное сходство и сортировка образцов - PullRequest
0 голосов
/ 02 марта 2019

Следующее является проблемой из задания, которое я пытаюсь решить:

Визуализация матрицы сходства.Представьте каждый образец с четырехмерным вектором (длина чашелистика, ширина чашелистика, длина лепестка, ширина лепестка).Для каждых двух образцов вычислите их попарное сходство.Вы можете сделать это, используя евклидово расстояние или другие метрики.Это приводит к матрице сходства, где элемент (i, j) хранит сходство между выборками i и j.Пожалуйста, сортируйте все образцы так, чтобы образцы из одной категории появлялись вместе.Визуализируйте матрицу, используя функцию imagesc () или любую другую функцию.

Вот код, который я написал до сих пор:

load('iris.mat'); % create a table of the data
iris.Properties.VariableNames = {'Sepal_Length' 'Sepal_Width' 'Petal_Length' 'Petal_Width' 'Class'}; % change the variable names to their actual meaning
iris_copy = iris(1:150,{'Sepal_Length' 'Sepal_Width' 'Petal_Length' 'Petal_Width'}); % make a copy of the (numerical) features of the table
iris_distance = table2array(iris_copy); % convert the table to an array

% pairwise similarity
D = pdist(iris_distance); % calculate the Euclidean distance and store the result in D
W = squareform(D); % convert to squareform
figure()
imagesc(W); % visualize the matrix

Теперь, я думаю, у меня есть в основном кодированиеПраво ответить на вопрос.Моя проблема в том, как отсортировать все сэмплы так, чтобы сэмплы из одной и той же категории появлялись вместе, потому что я избавился от имен при создании копии.Это уже отсортировано путем преобразования в квадратную форму?Другие предложения?Спасибо!

1 Ответ

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

Должен быть в том же порядке, что и исходные данные.Несмотря на то, что вы могли бы отсортировать их впоследствии, самое простое решение - на самом деле отсортировать данные по классам после строки 2 и перед строкой 3.

load('iris.mat'); % create a table of the data
iris.Properties.VariableNames = {'Sepal_Length' 'Sepal_Width' 'Petal_Length' 'Petal_Width' 'Class'}; % change the variable names to their actual meaning
% Sort the table here on the "Class" attribute. Don't forget to change the table name
% in the next line too if you need to.
iris_copy = iris(1:150,{'Sepal_Length' 'Sepal_Width' 'Petal_Length' 'Petal_Width'}); % make a copy of the (numerical) features of the table

Рассмотрите возможность использования sortrows:

tblB =sortrows (tblA, 'RowNames') сортирует таблицу по именам строк.Имена строк таблицы обозначают строки вдоль первого измерения таблицы.Если у tblA нет имен строк, то есть, если tblA.Properties.RowNames пусто, то sortrows возвращает tblA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...