确定一些向量的差异

时间:2011-02-21 10:33:29

标签: math matlab vector classification

我想区分数据向量以找到相似的数据向量。例如:

A=[4,5,6,7,8];
B=[4,5,6,6,8];
C=[4,5,6,7,7];

D=[1,2,3,9,9];
E=[1,2,3,9,8];

在前面的例子中,我想区分A,B,C向量彼此相似(不相同),D,E彼此相似。结果应该是这样的:A,B,C相似,D,E相似,但A,B,C组与D,E组不相似。 Matlab可以做到这一点吗? 我正在考虑使用一些分类算法或Kmeans,ROC等。但我不确定哪一个是最好的。

有什么建议吗?提前致谢

4 个答案:

答案 0 :(得分:10)

我最喜欢的一种方法是agglomerate clustering

首先,将所有向量连接到一个矩阵中,其中每一行都是一个单独的向量。这使得这些方法更容易使用:

F = [A; B; C; D; E];

然后可以找到链接:

Z = linkage(F, 'ward', 'euclidean');

可以使用以下方式绘制:

dendrogram(Z);

enter image description here

这显示了一棵树,其中底部的每个叶子都是原始矢量之一。分支的长度表现出相似性和不同性。

如您所见,1,2和3显示非常接近,4和5也是如此。这甚至给出了接近度的度量,并且表明向量1和3被认为比向量2和3(在百分比方面,7更接近8而不是6是7)。

答案 1 :(得分:2)

如果您要比较的所有向量具有相同的长度,则成对差异的合适范数可能就足够了。当然,选择的规范将取决于您特定的贴近标准,但是根据您显示的示例,简单地将成对差异的组成部分的绝对值相加得出:

  A B C  D  E
A 0 1 1 12 11
B   0 2 13 12
C     0 13 12
D       0  1
E          0

不需要特别调整好的门槛。

答案 2 :(得分:1)

您可以使用pdist(),此功能可为您提供成对距离。

已经实现了各种距离(与相似度相反)指标,'euclidean'似乎适合您的情况,但您可能想要尝试不同指标的效果。

答案 3 :(得分:1)

这是我根据你的结果提出的解决方案:

Z = [A;B;C;D;E];
Y = pdist(Z);
matrix = SQUAREFORM(Y);
matrix_round = round(matrix);

现在我们有了矢量,我们可以根据最大值来设置阈值,并决定哪种最适合。

创建一些显示它们之间差异的聚类图会很好。

祝你好运

相关问题