好的,首先將數據放入有用的格式中;也許計算不同單詞的數量,然後製作二進制值的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