Math 确定一些向量的不同程度

Math 确定一些向量的不同程度,math,matlab,vector,classification,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等。。但我不确定哪一个会是最好的 有什么建议吗?提前感谢如果您要

我想区分数据向量,找出那些相似的。例如:

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等。。但我不确定哪一个会是最好的


有什么建议吗?提前感谢

如果您要比较的所有向量都具有相同的长度,那么一个关于两两差异的合适范数就足够了。当然,要选择的标准取决于您的具体接近标准,但通过您所展示的示例,简单地将两两差异分量的绝对值相加即可得出:

  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

这不需要一个特别好的调整阈值就可以工作。

我最喜欢的解决这类问题的方法之一是

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

F = [A; B; C; D; E];
然后可以找到链接:

Z = linkage(F, 'ward', 'euclidean');
可以使用以下方法绘制此图:

dendrogram(Z);

这显示了一棵树,其中底部的每片叶子都是一个原始向量。树枝的长度显示出相似性和不同性

如您所见,1、2和3非常接近,4和5也是如此。这甚至给出了接近度的度量,并表明向量1和3被认为比向量2和3更接近(从这个意义上讲,按百分比计算,7比6更接近8,而6比7)。

您可以使用此函数,它给出了成对距离


已经实施了各种距离(与相似性相反)度量,“欧几里德”似乎适合您的情况,尽管您可能希望尝试不同度量的效果。

下面是我根据您的结果提出的解决方案:

Z = [A;B;C;D;E];
Y = pdist(Z);
matrix = SQUAREFORM(Y);
matrix_round = round(matrix);
现在我们有了向量,我们可以根据最大值设置阈值,并决定哪个阈值最合适

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


致以最诚挚的问候

您是否提前知道有多少类似向量的“组”(在本例中为2)?如果是这样的话,像k-means这样的东西可能会奏效。一般来说,“最佳”算法在很大程度上取决于应用程序以及向量中的数字的实际含义。