0

现在,我将两个输入文件之间共有的任何对分开。像这样找出该对之间的平均值:(第一个文本文件中的相关性)X(第二个文本文件中的相关性)/(第一个文本文件中的相关性)+(第二个文本文件中的相关性)。再次将它们存储在单独的矩阵中。

构建树:现在,从两个输入文件中的所有元素中,选择 10 个最常见的元素。这些中的每一个形成单独的 K 树的根。算法如下:对于根级别的单词,检查其所有调和平均值与上一步中开发的矩阵中的其他标签。选取前两个最高调和均值,将标签对中的另一个词作为根的子节点。

有人可以指导我完成 MATLAB 的步骤吗?感谢您的时间。

4

1 回答 1

1

好的,首先将数据放入有用的格式;也许计算不同单词的数量,并制作一个 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);

然后,您需要将这些标签插入到树中并重复。

于 2012-04-10T06:59:48.923 回答