Кластеризация Ирис

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

Проблема: Кластер Iris Flowers

В этом примере мы пытаемся создать нейронную сеть, которая объединяет цветы радужной оболочки в естественные классы, так что подобные классы сгруппированы вместе. Каждая радужная оболочка описывается четырьмя функциями:

  • Длина чашелистика в см

  • Ширина чашелистика в см

  • Длина лепестка в см

  • Ширина лепестка в см

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

Почему самоорганизующиеся карты нейронных сетей?

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

Четыре атрибута цветка будут действовать как входы для SOM, который будет отображать их на 2-мерный слой нейронов.

Подготовка данных

Данные для проблем кластеризации настраиваются для SOM путем организации данных в матрицу входа X.

Каждый i-й столбец матрицы входа будет иметь четыре элемента, представляющих четыре измерения, выполненные на одном цветке.

Здесь загружается такой набор данных.

x = iris_dataset;

Мы можем просмотреть размер входов X.

Обратите внимание, что X имеет 150 столбцов. Они представляют 150 наборов цветочных атрибутов радужки. Он имеет четыре строки для четырех измерений.

size(x)
ans =

     4   150

Кластеризация с нейронной сетью

Следующим шагом является создание нейронной сети, которая научится кластеризировать.

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

Мы попробуем 2-мерный слой 64 нейронов, расположенных в шестиугольной сетке 8x8 для этого примера. В целом, большая детализация достигается с большим количеством нейронов, а больше размерностей позволяет моделировать топологию более сложных пространств функций.

Размер входа 0, потому что сеть еще не сконфигурирована, чтобы соответствовать нашим входным данным. Это произойдет, когда сеть будет обучена.

net = selforgmap([8 8]);
view(net)

Теперь сеть готова к оптимизации с помощью train.

Neural Network Training Tool показывает обучаемую сеть и алгоритмы, используемые для ее обучения. В нем также отображается состояние обучения во время обучения, и критерии, которые остановили обучение, будут выделены зеленым цветом.

Кнопки внизу открывают полезные графики, которые можно открыть во время и после обучения. Ссылки рядом с именами алгоритмов и кнопками графика открывают документацию по этим темам.

[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)

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

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