2015-01-27 2 views
1

Я использую набор инструментов Matlab для самоорганизующихся карт, а именно newsom и родственное семейство функций. Я применяю кластер SOM к большому набору документов, и я использовал plotsomhits(net, features) для визуализации того, сколько шаблонов/документов назначено каждому нейрону. Однако я не могу найти никаких функций в панели инструментов, которые извлекают эти образы в структуре данных, а не просто визуализируют их.Поиск находок нейронов на самоорганизующейся карте программно

Теперь я знаю, что я могу найти сЗппы себя, выбирая нейрон, который максимизирует отрицательное расстояние метрики для каждого шаблона в простом for цикле:

nweights = net.IW{1}; % retrieve weights 
mx = -Inf; winner = 1; 
for i = 1:length(nweights) 
    distance = negdist(nweights(i, :), pattern); 
    if distance > mx % update index of winner 
     mx = distance; 
     winner = i; 
    end 
end 

Однако это кажется очень странным, что там недоступна в панели инструментов SOM, поскольку функция визуализации таких результатов существует.

Кто-нибудь знает об этом? Кроме того, существует ли более быстрый способ найти нейрон для каждого шаблона «назначен», чем тот, который я описываю выше?

+0

Каковы типичные размеры различных переменных? Любые минимальные данные выборки для работы? – Divakar

+0

Технические характеристики 8296x1, и у меня есть набор из 500 документов (== 500 функций). Размер ЗВОЛ составляет 10x10. – VHarisop

+1

'negdist', похоже, использует какие-то вычисления расстояния. На этом я мог бы предложить методы, основанные на матричном умножении, см. [Здесь] (http://stackoverflow.com/a/23911671/3293881) и [здесь] (http://stackoverflow.com/a/26994722/3293881) , – Divakar

ответ

0

Чтобы найти число хитов, вы должны использовать нейронную сеть (net), чтобы получить выходы (y) от всех входов (X):

y = net(X);

Затем " хиты «для каждого нейрона можно найти просто:

numhits = sum(y,2);

что касается вашего вопроса о» нахождении нейрон, связанный с каждым шаблон ": возможно, вы уже думали об этом? Кажется, что вы могли бы просто сделать:

y = net(pattern) neuronNumber = find(y)

Я надеюсь, что это имеет смысл. Если я неверен здесь, предоставьте некоторое разъяснение, и я отрегулирую свой ответ.

Смежные вопросы