好的,首先将数据放入有用的格式中;也许计算不同单词的数量,然后制作二进制值的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);
然后,您将需要将这些标记插入到树和重复。
非常感谢您的回复!你不知道我感到多么满意。好吧,除了data1 part..ok的构建外,一切都很清晰,所以假设我有image1的标签{camel,sand,desert}和image2的{沙子,沙滩,波浪}和{沙子,灰尘,垃圾} image3 - data1矩阵将如何显示? – 2012-04-10 15:05:38
您需要为每个可能的标签编号 - 例如,通过生成一个包含每个标签一次的单个单元格阵列:{骆驼,沙滩,沙漠,沙滩,海浪,灰尘和垃圾}。那么你的矩阵看起来像[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
嗯,是的,我明白了..谢谢!我还有一个问题:在执行所有这些操作时,不要忽略标签(即单词),就像我的输出必须是30个标有单词的树,我怎么知道哪个单词被引用由0和1的序列?或者等等...我是否必须跟踪列号以跟踪这些字词? – 2012-04-10 19:21:36