Как я могу узнать, к какому кластеру самоорганизующейся карты (SOM) принадлежит элемент в python?

Я новичок в кластеризации и нейронных сетях, и я только начал использовать самоорганизующиеся карты (SOM) для выполнения некоторой кластеризации. У меня есть 15-мерный набор данных, и я создал сом со следующим кодом:

size = 20
from minisom import MiniSom    
som = MiniSom(size, size, 15, sigma=0.3, learning_rate=0.9, random_seed=149)
som.train_random(data, 650000, verbose=True)

А сом я начертил следующим образом:

plt.figure()
plt.pcolor(som.distance_map().T, cmap='Blues')
plt.colorbar()

plt.show()

Мой вопрос: если у меня есть новый 15-мерный элемент, как я могу узнать, к какому кластеру сом принадлежит?


person jartymcfly    schedule 28.06.2019    source источник


Ответы (2)


Лучшая подходящая единица (BMU)

for t in itertools.count():
        i =  np.random.choice(range(len(data)))
        bmu = self.find_bmu(data[i])

Поиск наиболее подходящей единицы

создать карту n x n со случайными значениями вектора узла

цикл while s ‹ StepsMax раз

вычислить, что означает близкий узел, на основе s

вычислить скорость обучения на основе s

выбрать случайный элемент данных

определить узел карты, ближайший к элементу данных (BMU)

для каждого узла рядом с BMU

настроить значения вектора узла в соответствии с элементом данных

конечная петля

SOM — BMU

person Mahsa Hassankashi    schedule 28.06.2019

У меня ощущение, что в MiniSom для этого реализована функция:

som.winner(*input_data*)

который возвращает узел, к которому он ближе всего.

person William Herewini    schedule 05.12.2019