Этот пример иллюстрирует, как самоорганизующаяся нейронная сеть карты может сгруппировать цветы радужной оболочки в классы топологически, обеспечивая понимание типов цветов и полезный инструмент для дальнейшего анализа.
В этом примере мы пытаемся построить нейронную сеть, которая группирует цветки радужки в естественные классы, так что подобные классы группируются вместе. Каждая радужка описана четырьмя признаками:
Длина чашелистика в см
Ширина чашелистика в см
Длина лепестка в см
Ширина лепестка в см
Это пример проблемы кластеризации, где мы хотели бы сгруппировать выборки в классы на основе сходства между выборками. Мы хотели бы создать нейронную сеть, которая не только создает определения классов для известных входов, но также позволит классифицировать неизвестные входы соответствующим образом.
Самоорганизующиеся карты (СОМ) очень хорошо подходят для создания классификаций. Кроме того, классификации сохраняют топологическую информацию о том, какие классы наиболее похожи на другие. Самоорганизующиеся карты могут создаваться с любым требуемым уровнем детализации. Они особенно хорошо подходят для кластеризации данных во многих измерениях и со сложноформатными и связанными пространствами элементов. Они хорошо подходят для скопления цветков радужки.
Четыре атрибута цветка будут действовать как входы в SOM, который нанесет их на 2-мерный слой нейронов.
Данные для проблем кластеризации настраиваются для SOM путем организации данных во входную матрицу X.
Каждый i-й столбец входной матрицы будет иметь четыре элемента, представляющих четыре измерения, сделанные на одном цветке.
Здесь загружается такой набор данных.
x = iris_dataset;
Можно просмотреть размер входных данных X.
Обратите внимание, что X имеет 150 столбцов. Они представляют 150 наборов атрибутов цветка радужки. Он имеет четыре ряда, для четырех измерений.
size(x)
ans =
4 150
Следующий шаг - создание нейронной сети, которая научится кластерно.
selforgmap создает самоорганизующиеся карты для классификации образцов с необходимой степенью детализации путем выбора количества нейронов в каждом измерении слоя.
Мы попробуем 2-мерный слой из 64 нейронов, расположенных в шестиугольной сетке 8х8 для этого примера. В целом, большая детализация достигается с большим количеством нейронов, и большее количество размеров позволяет моделировать топологию более сложных пространств признаков.
Входной размер равен 0, поскольку сеть еще не настроена на соответствие нашим входным данным. Это произойдет, когда сеть будет обучена.
net = selforgmap([8 8]); view(net)

Теперь сеть готовы оптимизировать поездом.
Обучающий инструмент нейронной сети показывает обучаемую сеть и алгоритмы, используемые для ее обучения. Он также отображает состояние обучения во время обучения и критерии, которые остановили обучение, будут выделены зеленым цветом.
Кнопки внизу открывают полезные графики, которые можно открывать во время и после обучения. Ссылки рядом с именами алгоритмов и кнопками графика открывают документацию по этим темам.
[net,tr] = train(net,x); nntraintool

nntraintool('close')
Здесь самоорганизующаяся карта используется для вычисления векторов классов каждого из обучающих входов. Эти классификации охватывают пространство элементов, заполненное известными цветами, и теперь могут использоваться для соответствующей классификации новых цветов. Сетевой выход будет представлять собой матрицу 64x150, где каждый i-й столбец представляет j-й кластер для каждого i-го входного вектора с 1 в его j-м элементе.
Функция vec2ind возвращает индекс нейрона с выходом 1 для каждого вектора. Индексы будут колебаться от 1 до 64 для 64 кластеров, представленных 64 нейронами.
y = net(x); cluster_index = vec2ind(y);
plotsomtop строит график топологии самоорганизующихся карт 64 нейронов, расположенных в шестиугольной сетке 8x8. Каждый нейрон научился представлять свой класс цветка, при этом смежные нейроны обычно представляют сходные классы.
plotsomtop(net)

plotsomhits вычисляет классы для каждого цветка и показывает количество цветов в каждом классе. Области нейронов с большим количеством попаданий указывают на классы, представляющие аналогичные густонаселенные области пространства признаков. Тогда как области с небольшим количеством попаданий указывают на малонаселенные области пространства элементов.
plotsomhits(net,x)

plotsomnc показывает соседние соединения нейронов. Соседи обычно классифицируют аналогичные образцы.
plotsomnc(net)

plotsomnd показывает, насколько далек (с точки зрения евклидова расстояния) класс каждого нейрона от его соседей. Яркие соединения указывают на сильно соединенные области входного пространства. В то время как темные связи указывают классы, представляющие области пространства элемента, которые находятся далеко друг от друга, с небольшим количеством цветов или без них.
Длинные границы темных связей, разделяющих большие области входного пространства, указывают на то, что классы по обе стороны границы представляют цветки с очень разными особенностями.
plotsomnd(net)

plotsomplanes показывает весовую плоскость для каждого из четырех входных элементов. Они представляют собой визуализации весов, которые соединяют каждый вход с каждым из 64 нейронов в шестиугольной сетке 8x8. Более темные цвета представляют большие веса. Если два входа имеют одинаковые весовые плоскости (их цветовые градиенты могут быть одинаковыми или иметь обратную сторону), это означает, что они сильно коррелированы.
plotsomplanes(net)

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