Основная идея карты Кохонена состоит в том, что точки данных отображаются на
решетка , которая часто является 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.