2012-04-10 111 views
0

现在,我已经分开了两个输入文件之间共同的任何对。找出这一对之间的平均值,如下所示:(第一个文本文件中的相关性)X(第二个文本文件中的相关性)/(第一个文本文件中的相关性)+(第二个文本文件中的相关性)。再次将这些存储在单独的矩阵中。MATLAB树构造

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

有人可以请指导我通过这个MATLAB的步骤吗?感谢您的时间。

回答

1

好的,首先将数据放入有用的格式中;也许计算不同单词的数量,然后制作二进制值的N×M矩阵(我将称之为data1)。 N行中的每一行都将描述与单个图像相关的单词。 M列中的每一列将描述单个词语被标记的图像。因此,如果标签M不在图像N中,则在(N,M)处的值是0,如果是,则为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个最freqent标签。因为我们要找到最常见的标签在两个文件中,我们首先添加数据matricies:

[~, tag_ranks] = sort(sum(data1 + data2, 1), 'descending'); %get the indices in sorted order 
top_tags = tag_ranks(1:30); 

对于树大厦的尽头,你要么要创建一个树类(见classdef) ,或将树存储在array中。要找到前两个最高谐波平均值,您需要查看h_means矩阵;一个标记M1,我们可以这样做:

[~, tag_ranks] = sort(h_means(m1, :), 'descending'); 
top_tag = tag_ranks(1); 
second_tag = tag_ranks(2); 

然后,您将需要将这些标记插入到树和重复。

+0

非常感谢您的回复!你不知道我感到多么满意。好吧,除了data1 part..ok的构建外,一切都很清晰,所以假设我有image1的标签{camel,sand,desert}和image2的{沙子,沙滩,波浪}和{沙子,灰尘,垃圾} image3 - data1矩阵将如何显示? – 2012-04-10 15:05:38

+1

您需要为每个可能的标签编号 - 例如,通过生成一个包含每个标签一次的单个单元格阵列:{骆驼,沙滩,沙漠,沙滩,海浪,灰尘和垃圾}。那么你的矩阵看起来像[1 1 1 0 0 0 0; 0 1 0 1 1 0 0; 0 1 0 0 0 1 1];这些行对应于图像,并且每一列都表示相应的标记是否应用于该图像。 – Richante 2012-04-10 15:15:45

+0

嗯,是的,我明白了..谢谢!我还有一个问题:在执行所有这些操作时,不要忽略标签(即单词),就像我的输出必须是30个标有单词的树,我怎么知道哪个单词被引用由0和1的序列?或者等等...我是否必须跟踪列号以跟踪这些字词? – 2012-04-10 19:21:36