确定一些向量的差异

Mar*_*lac 6 math matlab classification vector

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

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];
Run Code Online (Sandbox Code Playgroud)

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

有什么建议吗?提前致谢

Bil*_*ham 10

我最喜欢的这种方法之一是聚集聚类.

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

F = [A; B; C; D; E];
Run Code Online (Sandbox Code Playgroud)

然后可以找到链接:

Z = linkage(F, 'ward', 'euclidean');
Run Code Online (Sandbox Code Playgroud)

这可以使用以下方式绘制:

dendrogram(Z);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

正如你所看到的,1,2和3显示非常接近,4和5也是如此.这甚至给出了接近度的度量,并且表明向量1和3被认为比向量2和3更接近(在从百分比来看,7接近8比6的感觉是7).


Mar*_*lac 1

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

Z = [A;B;C;D;E];
Y = pdist(Z);
matrix = SQUAREFORM(Y);
matrix_round = round(matrix);
Run Code Online (Sandbox Code Playgroud)

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

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

此致