2012-04-10 116 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