[Из песочницы] Алгоритм НСКО (алгоритм Хо-Кашьяпа)

Зачастую, во время работы с нейронными сетями, перед нами встает задача в построении линейных решающих функций (ЛРФ) для разделения классов, содержащих наши образы.
a638ecf187384e26ade8a74561391b2f.jpg

Рисунок 1. двумерный случай

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

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

4cf1768f6c124745bee39845850a75fd.jpg

Рисунок 2. линейно неразделимые классы

Далее перечислим исходные данные:

d57ac00bd8294d77a37f168303cd7421.png — обозначение класса (i — номер класса)

c24cc50ef88e4a3c8cf19dc22f3c73b8.png — обучающая выборка

4274c070d9a54089a123deb4e3023f00.png — метки (номер класса к которому относится образ d095356c0cd948f99bad16f2d4047477.png)

798afa1f33ee420c9a0e1b169e43ce52.png — скорость обучения (произвольная величина)

Этой информации нам более чем достаточно для построения ЛРФ.
Перейдем непосредственно к самому алгоритму.

Алгоритм


1 шаг


а) переводим 1c27aca08cb641cb9b29101573a0e911.png в систему c1bc754eee0b4cb58b8c4720f504d6c5.png, где 5e801a0f1c844850a9ded230d94ff1ab.png равен e6be62b7b4094d8c9b84525aaa23ea66.png, у которого в конце приписан класс образа

Например:

Пусть задан образ 47a5c8ea7aba4d258f4ccb71d51e65c6.png.

Тогда

b4a68f0ae9ea4a37a6c4b10b217b661c.png, если fd61efe922a445e48a1c8b6309f33b47.png из 1 класса

5cdc5836cc0c4f12b7c36f1e5aea2b78.png, если fd61efe922a445e48a1c8b6309f33b47.png из 2 класса

б) строим матрицу 5a668227d82c46be8903c04d29629bc5.png размерностью Nx3 которая состоит из наших векторов 1290f907d1464d06a6b3447116d88a8e.png

в) строим 4b78a788b89946b6b94a0905bb972bd6.png

г) считаем 2020d026915747458d3de648dc7288f3.png где 819790f8e80244dab8c461fe50973e19.png произвольный вектор (по умолчанию единичный)

д) f11c7b9010a14872bb9442ab80b8f0ea.png (номер итерации)

2 шаг


Проверяем условие останова:

Если a24384721d0640528546119bc208af18.png то «СТОП»

иначе — переходим к шагу 3

3 шаг


а) cea16af5a1fb48f98e593f9c81715d58.png (где + это функция Хэвисайда)

Например (функция Хэвисайда):

a2604a2e3cff4c3cb921528e5c48a77f.png
63d9b0c2228942529db85026f6b5989e.png (если 9e52f96eb0d94677a4df67f1ddac94b7.png)

eae9e543a0954242b81ef85d21b54999.png (если 057cf862249844dab79974d449650456.png или c2c2d50933874d1dbc83648decd0e0ba.png)

После подсчетов меняем номер итерации:

c4f5d4eb0509423d96527fdd4d14f3c7.png

б) переходим на шаг 2

Пример работы алгоритма НСКО


045f9f6d643941cd9c209df6f0c96529.png
62bbd6b2d57d46d799723ccd91e4f26c.png
4b8da5fd70fc4469b0b2b6801da7bddf.png
088b954e40e641ec956476d4bf45ab40.png

342b3e25fc2443d39a31b1a9ad8c6e12.png принадлежат 1 классу 59bbb961523a44ccbbce4141b2a86eb0.png
115873fd7ae946928bb0cbf824014191.png принадлежат 2 классу b234522ab6bf40428a08f6b7cceb428d.png

а)

45466cb1e57d4555b40e301807de0825.png
d88b4f757aa248acbb37436f247b92d7.png
9afcc4b2240e44f3a75b83f8ccfba020.png
2ac791c72b1d490981190f87312e4cd3.png

б)

199df49c0a0f4ff4a5b9fd31fc7187d5.png
в)

bdfa90196cd545888308647991eb9c07.png
г)

c3820b0012f4441ea454f3d44a13ba9a.png
b85f34ff00e34e939e20327db85d9a62.png

д) f11c7b9010a14872bb9442ab80b8f0ea.png

5efd7d03709047988d7183a1e8d7c78c.png, т.к. все элементы f76a639ab2d142509181dfa9bdb12a95.png3d30ff8f96464f0489a4a0dc5a7dbe1e.png «СТОП»

Завершили работу алгоритма, и теперь можно подсчитать нашу ЛРФ.
a293179bd06e409a93aa2b2c791a2f0b.png

Спасибо parpalak за онлайн редактор.

Спасибо за внимание.

Комментарии (0)

© Habrahabr.ru