0

これで、2つの入力ファイルに共通するペアを分離しました。次のように、そのペア間の平均を求めます:(最初のテキストファイルの相関)X(2番目のテキストファイルの相関)/(最初のテキストファイルの相関)+(2番目のテキストファイルの相関)。これらも別のマトリックスに保存します。

ツリーの構築:ここで、両方の入力ファイルのすべての要素から、最も頻繁に使用される10個の要素を選択します。これらはそれぞれ、個別のKツリーのルートを形成します。アルゴリズムは次のようになります。ルートレベルの単語については、前の手順で作成したマトリックス内の他のタグを使用して、すべての調和平均値を確認します。上位2つの調和平均を選択し、ルートの子ノードとしてタグペアに他の単語を配置します。

誰かがこれを実行するMATLABの手順を案内してくれますか?お時間をいただきありがとうございます。

4

1 に答える 1

1

では、データを便利な形式にすることから始めましょう。おそらく、異なる単語の数を数えて、バイナリ値の N 行 M 列の行列を作成します (これを と呼びますdata1)。N 行のそれぞれは、1 つの画像に関連付けられた単語を記述します。M 列のそれぞれは、1 つの単語がタグ付けされた画像を表します。したがって、(N, M) の値は、タグ M が画像 N にない場合は 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 個のタグを見つけることができます。両方のファイルで最も一般的なタグを見つけたいので、最初にデータ マトリックスを追加します。

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

最後にツリーを構築するには、ツリー クラスを作成するか ( classdefを参照)、ツリーを配列に格納します。上位 2 つの高調波平均を見つけるには、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 に答える