2012-04-10 5 views
0

Теперь у меня есть отдельная пара, которая является общей между двумя входными файлами. Выясните среднее значение между этой парой: (корреляция в первом текстовом файле) X (корреляция во втором текстовом файле)/(корреляция в первом текстовом файле) + (корреляция во втором текстовом файле). Снова сохраните их в отдельной матрице.MATLAB Tree Construction

Построение дерева: Теперь из всех элементов в обоих входных файлах выберите 10 наиболее часто встречающихся. Каждый из них образует корень отдельного дерева K. Алгоритм выглядит следующим образом: для слова на корневом уровне проверьте все его гармонические средние значения с другими тегами в матрице, которые были разработаны на предыдущем шаге. Выберите два верхних наивысших гармонических средства и поместите другое слово в пару тегов в качестве дочернего узла корня.

Может кто-нибудь, пожалуйста, проведет меня через шаги MATLAB, проходя через это? Спасибо за ваше время.

ответ

1

Итак, начните с размещения данных в полезном формате; возможно, подсчитайте количество различных слов и сделайте матрицу из двоичных значений N-by-M (я назову это data1). Каждая из N строк будет описывать слова, связанные с одним изображением. Каждый из столбцов M будет определять изображения, для которых отмечено одно слово. Следовательно, значение at (N, M) равно 0, если тег M отсутствует в изображении N и 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); 

Вы можете найти 30 самых freqent тегов путем подсчета числа 1s в каждом столбце матрицы данных. Так как мы хотим, чтобы найти наиболее распространенные тег в обеих файлах, мы добавим данные первые матрицы,:

[~, 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

Большое спасибо за ответ! Вы не представляете, насколько я себя чувствую. Хорошо, все ясно, кроме построения части данных1. Поэтому предположим, что у меня есть метки (верблюд, песок, пустыня) для image1 и {sand, beach, waves} для image2 и {песок, пыль, мусор} для image3 - как будет выглядеть матрица данных1? –

+1

Вам нужно будет указать каждый возможный тег - например, создав один массив ячеек, содержащий каждый тег один раз: {верблюд, песок, пустыня, пляж, волны, пыль, мусор}. Тогда ваша матрица будет выглядеть как [1 1 1 0 0 0 0; 0 1 0 1 1 0 0; 0 1 0 0 0 1 1]; строки соответствуют изображениям, и каждый столбец указывает, применяется ли соответствующий тег к этому изображению. – Richante

+0

Хмм да, я понимаю ... спасибо! У меня возникает другой вопрос: выполняя все эти операции, мы не теряем из виду теги (которые являются словами), так как мой вывод должен быть 30 деревьев, которые помечены словами, как я узнаю, какое слово относится к по последовательности 0 и 1? Или подождите ... мне нужно отслеживать номер столбца, чтобы отслеживать слова? –