Лекция №4. Классификация сетью Кохонена

Задача классификации образов относится классической задаче машинного обучения и имеет огромное прикладное значение. Машинное обучение классификации бывает с учителем и без учителя. В случае, когда используется обучение с учителем, машине (программе) нужно предъявлять большое количество примеров, на которых указано какой образ к какому классу относится.

Однако довольно часто возникает задача классификации образов без предъявления обучающих примеров. Для решения этой задачи отлично подходят сети Кохонена.

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

Посмотрите нашу видео-лекцию, посвященную сети Кохонена:

Опишем алгоритм работы сети Кохонена. Пусть у нас есть набор из M исходных образов, который нужно классифицировать, т.е. разбить на K классов. Каждый образ будем описывать некоторым вектором

Xm=[xm1,xm2,...,xmN],

где xmi суть действительные числа.

Обучать мы будем весовые коэффициенты

Wk=[wk1,wk2,...,wkN],

k=1,2,...,K, где K есть количество классов на которые мы разбиваем исходные образы. Заметим, что каждый вектор весов имеет такую же размерность, как и входные вектора. Итак, алгоритм обучения сети:

  1. Нормировка исходных векторов.
    Вычислим Maxn=maxmxmn, Minn=minmxmn.
    Введем обозначения an=(Maxn-Minn)-1, bn=-Minn(Maxn-Minn)-1.
    Нормируем вектора xmn=anxmn+bn, n=1,...,N.
  2. Инициализируем веса случайным образом значениями от 0.1 до 0.3.
  3. Выбираем коэффициент обучения λ=0.3.
  4. Пока λ>0 выполнять шаги 5-6-7
  5. Повторить 10 раз повторить шаг
  6. Для каждого Xm:
    ищем ближайший вектор Wk и для найденного вектора Wk скорректировать компоненты:

    wkn=wkn+λ(xmn-wkn).
  7. Уменьшить коэффициент обучения λ=λ-Δλ, Δλ=0.05.
  8. Конец работы алгоритма.

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

Теперь любой вектор X нужно нормировать и найти ближайший вектор Wk, где номер k и будет номером класса. Поскольку мы инициализировали веса случайным образом, то собственно номера классов роли не играют, важно лишь группировка образов по классам.

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

Исходный текст программы на Python можно скачать ClassK.

Испытаем нашу программу на реальных данных. Рассмотрим таблицу параметров немецких и советских таков Второй мировой войны.

НазваниеМассаДлинаШиринаМощность двигателяСкорость
PzKpfw I5.4402020605737
PzKpfw II8.94810222314040
PzKpfw III19.55380291028560
PzKpfw IV255890288030040
«Пантера»44.86870327070055
«Тигр»566316370570044
«Королевский тигр»687380375570038
Т-5013.85200247030060
Т-709.24285234814042
Т-34305920300050054
Т-4431.86070318050060
КВ-147.56675332060034
ИС-144.26770307052037
ИС-2466770307052037
ИС-3496900315052040

Попробуем классифицировать эти танки на два класса. Размерность вектора образов N=5. После применения нашей программы мы получаем, что эти 15 танков были разбиты на следующие два класса:

Первый класс:

НазваниеМассаДлинаШиринаМощность двигателяСкорость
PzKpfw I5.4402020605737
PzKpfw II8.94810222314040
PzKpfw III19.55380291028560
Т-5013.85200247030060
Т-709.24285234814042

Второй класс:

НазваниеМассаДлинаШиринаМощность двигателяСкорость
PzKpfw IV255890288030040
«Пантера»44.86870327070055
«Тигр»566316370570044
«Королевский тигр»687380375570038
Т-34305920300050054
Т-4431.86070318050060
КВ-147.56675332060034
ИС-144.26770307052037
ИС-2466770307052037
ИС-3496900315052040

Мы видим, что сеть Кохонена отнесла к первому классу легкие танки, а ко второму - средние и тяжелые, что весьма логично.

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

Для первого класса:
масса = 11.5 т,
длина = 4747 м,
ширина = 2410 м,
мощность = 188 л.с.,
скорость = 48 км/ч.

Для второго класса:
масса = 44 т,
длина = 6578 м,
ширина = 3231 м,
мощность = 554 л.с.,
скорость = 43 км/ч.

Home | Лекции | Python | Видео | Скачать | Ссылки
Copyright (c) 2017, Roman Shamin
12
22799
3