sigma - matlab set interpreter



MATLAB: помощь, необходимая для кластеризации самоорганизующихся карт(SOM) (1)

Самоорганизующаяся карта (SOM) представляет собой метод кластеризации, рассматриваемый как неконтролируемое изменение Искусственной нейронной сети (ANN) . Он использует конкурентные методы обучения для обучения сети (узлы конкурируют между собой, чтобы отображать самую сильную активацию для данных)

Вы можете думать о SOM, как если бы он состоял из сетки взаимосвязанных узлов (квадратная форма, гексагональная, ...), где каждый узел представляет собой N-мерный вектор весов (тот же размер, что и те точки данных, которые мы хотим скопировать).

Идея проста; заданный вектором в качестве входа в SOM, мы обнаруживаем его узловую шкалу , затем обновляем его веса и веса соседних узлов так, чтобы они приближались к весам входного вектора (отсюда самоорганизация имени). Этот процесс повторяется для всех входных данных.

Созданные кластеры неявно определяются тем, как узлы организуются и образуют группу узлов со схожими весами. Их можно легко увидеть визуально.

SOM аналогичны алгоритму K-Means, но отличаются тем, что мы не налагаем фиксированное количество кластеров, вместо этого мы указываем количество и форму узлов в сетке, которые мы хотим, чтобы они адаптировались к нашим данным.

В основном, когда у вас есть подготовленный SOM и вы хотите классифицировать новый тестовый входной вектор, вы просто назначаете его ближайшему (расстоянию как мера подобия) на сетке ( Best Matching Unit BMU) и даете в качестве предсказания значение [ большинство] векторов, принадлежащих этому узлу BMU.

Для MATLAB вы можете найти несколько наборов инструментов, которые реализуют SOM:

https://src-bin.com

Я пытаюсь скопировать некоторые изображения в зависимости от углов между частями тела.

Функции, извлеченные из каждого изображения:

angle1 : torso - torso
angle2 : torso - upper left arm
..
angle10: torso - lower right foot

Поэтому входные данные представляют собой матрицу размером 1057x10, где 1057 обозначает количество изображений, а 10 обозначает углы частей тела с торсом. Аналогично, testSet представляет собой матрицу 821x10.

Я хочу, чтобы все строки входных данных были сгруппированы с 88 кластерами. Затем я буду использовать эти кластеры, чтобы найти, в какие кластеры входит TestData?

В предыдущей работе я использовал кластер K-Means, который очень прост. Мы просто просим K-Means скопировать данные в 88 кластеров. И реализуйте другой метод, который вычисляет расстояние между каждой строкой в ​​тестовых данных и центрами каждого кластера, а затем выбирает наименьшие значения. Это кластер соответствующей строки входных данных.

У меня есть два вопроса:

(1) Можно ли это сделать, используя SOM в MATLAB? AFAIK SOM предназначены для визуальной кластеризации. Но мне нужно знать фактический класс каждого кластера, чтобы впоследствии я мог пометить свои тестовые данные, вычислив, к какому кластеру принадлежит.

(2) У вас есть лучшее решение?