好的,首先将数据放入有用的格式;也许计算不同单词的数量,并制作一个 N×M 二进制值矩阵(我称之为data1
)。N 行中的每一行都将描述与单个图像相关联的单词。M 列中的每一列都将描述标记了单个单词的图像。因此,如果标签 M 不在图像 N 中,则 (N, M) 处的值为 0,如果在图像 N 中,则为 1。
从此矩阵中,要找到所有单词对之间的相关性,您可以执行以下操作:
correlations1 = zeros(M, M);
for i=1:M
for j=1:M
correlations1(i, j) = corr(data1(:, i), data1(:, j));
end
end
现在矩阵correlations
告诉你标签之间的相关性。对其他文本文件执行相同操作。您可以使用以下方法制作谐波均值矩阵:
h_means = correlations1.*correlations2./(correlations1+correlations2);
您可以通过计算数据矩阵每列中 1 的数量来找到 30 个最常见的标签。由于我们想在两个文件中找到最常见的标签,我们将首先添加数据矩阵:
[~, tag_ranks] = sort(sum(data1 + data2, 1), 'descending'); %get the indices in sorted order
top_tags = tag_ranks(1:30);
对于最后的树构建,您要么想要创建一个树类(参见classdef),要么将树存储在一个数组中。要找到前两个最高谐波均值,您需要查看 h_means 矩阵;对于标签 m1,我们可以这样做:
[~, tag_ranks] = sort(h_means(m1, :), 'descending');
top_tag = tag_ranks(1);
second_tag = tag_ranks(2);
然后,您需要将这些标签插入到树中并重复。