繁体   English   中英

成对相似性和排序样本

[英]Pairwise Similarity and Sorting Samples

以下是我要解决的作业中的问题:

可视化相似度矩阵。 用四维向量表示每个样本(间隔长度,萼片宽度,花瓣长度,花瓣宽度)。 对于每两个样本,计算它们的成对相似度。 您可以使用欧几里德距离或其他指标来执行此操作。 这导致了一个相似度矩阵,其中元素(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

现在,我认为我的编码基本上可以回答这个问题。 我的问题是如何对所有样本进行排序,以使同一类别中的样本同时出现,因为在创建副本时我摆脱了名称。 它已经通过转换为正方形进行排序了吗? 还有其他建议吗? 谢谢!

它应与原始数据的顺序相同。 虽然您可以在之后对其进行排序,但最简单的解决方案是在第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

考虑使用排序行:

tblB = sortrows(tblA,'RowNames')根据表的行名对表进行排序。 表的行名称标记了沿表的第一维的行。 如果tblA没有行名,即tblA.Properties.RowNames为空,则sortrows返回tblA。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM