Нужен конкретный пример U-Matrix в самоорганизующейся карте - PullRequest
8 голосов
/ 26 июня 2011

Я пытаюсь разработать приложение, используя SOM для анализа данных. Однако после окончания обучения я не могу найти способ визуализировать результат. Я знаю, что U-Matrix - один из методов, но я не могу понять это должным образом. Поэтому я прошу конкретный и подробный пример того, как построить U-Matrix.

Я также прочитал ответ на U-матрица и самоорганизующиеся карты , но это относится только к 1-строчной карте, как насчет карты 3х3? Я знаю, что для карты 3х3:

m(1) m(2) m(3)
m(4) m(5) m(6)
m(7) m(8) m(9)

должна быть создана матрица 5x5:

u(1)   u(1,2)     u(2)   u(2,3)     u(3)
u(1,4) u(1,2,4,5) u(2,5) u(2,3,5,6) u(3,6)
u(4)   u(4,5)     u(5)   u(5,6)     u(6)
u(4,7) u(4,5,7,8) u(5,8) u(5,6,8,9) u(6,9)
u(7)   u(7,8)     u(8)   u(8,9)     u(9)

но я не знаю, как рассчитать u-вес u (1,2,4,5), u (2,3,5,6), u (4,5,7,8) и u ( 5,6,8,9).

Наконец, после построения U-Matrix, есть ли способ визуализировать ее с помощью цвета, например, тепловая карта?

Большое спасибо за ваше время.

Приветствия

Ответы [ 2 ]

4 голосов
/ 19 июля 2012

Я не знаю, если вы все еще заинтересованы в этом, но я нашел эту ссылку http://www.uni -marburg.de / fb12 / datenbionik / PDF / Пабы / 1990 / UltschSiemon90 что очень конкретно объясняет, как рассчитать U-матрицу. Надеюсь, это поможет.

Кстати, на сайте, где я нашел ссылку, есть несколько ресурсов, относящихся к СДЛ, я оставляю ее здесь на случай, если кому-то будет интересно: http://www.ifs.tuwien.ac.at/dm/somtoolbox/visualisations.html

1 голос
/ 28 июня 2011

Основная идея карты Кохонена состоит в том, что точки данных отображаются на решетка , которая часто является 2D прямоугольной сеткой.

В простейших реализациях решетка инициализируется путем создания 3D массив с такими размерами:

width * height * number_features

Это U-матрица .

Ширина и высота выбираются пользователем; number_features это просто число функций (столбцы или поля) в ваших данных.

Интуитивно понятно, что это просто создание двумерной сетки измерений w * h. (например, если w = 10 и h = 10, то ваша решетка имеет 100 ячеек), тогда в каждую ячейку, помещая случайный одномерный массив (иногда называемый «ссылочными кортежами») чей размер и значения ограничены вашими данными.

Ссылочные кортежи также называются весами .

Как отображается U-матрица?

В моем примере ниже данные состоят из кортежей rgb, поэтому эталонные кортежи имеют длину три, и каждое из трех значений должно находиться в диапазоне от 0 до 255).

Именно с этим трехмерным массивом («решеткой») вы начинаете основной итерационный цикл Алгоритм итеративно позиционирует каждую точку данных так, чтобы она была ближе всего к аналогичной ей.

Если вы строите график с течением времени (номер итерации), то вы можете визуализировать кластер образование.

Инструментом построения графиков, который я использую для этого, является блестящая библиотека Python, Matplotlib , которая строит решетку напрямую, просто передав ее в функцию imshow .

Ниже приведены восемь снимков прогресса алгоритма SOM, от инициализации до 700 итераций. Вновь инициализированная решетка (iteration_count = 0) отображается в верхней левой панели; результат последней итерации в правой нижней панели.

В качестве альтернативы, вы можете использовать низкоуровневую библиотеку изображений (в Python, например, PIL) и переносить опорные кортежи в двумерную сетку, по одному за раз:

for y in range(h):
    for x in range(w):
        img.putpixel( (x, y), (
            SOM.Umatrix[y, x, 0], 
            SOM.Umatrix[y, x, 1], 
            SOM.Umatrix[y, x, 2]) 
        )

Здесь img является экземпляром класса PIL Image . Здесь изображение создается путем итерации по сетке по одному пикселю за раз; для каждого пикселя putpixel вызывается img три раза, три вызова, конечно, соответствуют трем значениям в кортеже rgb.

Image1 Image2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...