![](https://habrastorage.org/files/a63/8ec/f18/a638ecf187384e26ade8a74561391b2f.jpg)
Рисунок 1. двумерный случай
Один из методов, позволяющих решить нашу проблему, это алгоритм наименьшей среднеквадратичной ошибки (НСКО алгоритм).
Интерес данный алгоритм представляет не только в том, что он помогает построить необходимые нам ЛРФ, а в том, что при возникновении ситуации, когда классы линейно неразделимы, мы можем построить ЛРФ, где ошибка неправильной классификации стремится к минимуму.
![](https://habrastorage.org/files/4cf/176/8f6/4cf1768f6c124745bee39845850a75fd.jpg)
Рисунок 2. линейно неразделимые классы
Далее перечислим исходные данные:
![](https://habrastorage.org/files/d57/ac0/0bd/d57ac00bd8294d77a37f168303cd7421.png)
![](https://habrastorage.org/files/c24/cc5/0ef/c24cc50ef88e4a3c8cf19dc22f3c73b8.png)
![](https://habrastorage.org/files/427/4c0/70d/4274c070d9a54089a123deb4e3023f00.png)
![](https://habrastorage.org/files/d09/535/6c0/d095356c0cd948f99bad16f2d4047477.png)
![](https://habrastorage.org/files/798/afa/1f3/798afa1f33ee420c9a0e1b169e43ce52.png)
Этой информации нам более чем достаточно для построения ЛРФ.
Перейдем непосредственно к самому алгоритму.
Алгоритм
1 шаг
а) переводим
![](https://habrastorage.org/files/1c2/7ac/a08/1c27aca08cb641cb9b29101573a0e911.png)
![](https://habrastorage.org/files/c1b/c75/4ee/c1bc754eee0b4cb58b8c4720f504d6c5.png)
![](https://habrastorage.org/files/5e8/01a/0f1/5e801a0f1c844850a9ded230d94ff1ab.png)
![](https://habrastorage.org/files/e6b/e62/b7b/e6be62b7b4094d8c9b84525aaa23ea66.png)
Например:
Пусть задан образ
![](https://habrastorage.org/files/47a/5c8/ea7/47a5c8ea7aba4d258f4ccb71d51e65c6.png)
Тогда
![](https://habrastorage.org/files/b4a/68f/0ae/b4a68f0ae9ea4a37a6c4b10b217b661c.png)
![](https://habrastorage.org/files/fd6/1ef/e92/fd61efe922a445e48a1c8b6309f33b47.png)
![](https://habrastorage.org/files/5cd/c58/36c/5cdc5836cc0c4f12b7c36f1e5aea2b78.png)
![](https://habrastorage.org/files/fd6/1ef/e92/fd61efe922a445e48a1c8b6309f33b47.png)
б) строим матрицу
![](https://habrastorage.org/files/5a6/682/27d/5a668227d82c46be8903c04d29629bc5.png)
![](https://habrastorage.org/files/129/0f9/07d/1290f907d1464d06a6b3447116d88a8e.png)
в) строим
![](https://habrastorage.org/files/4b7/8a7/88b/4b78a788b89946b6b94a0905bb972bd6.png)
г) считаем
![](https://habrastorage.org/files/202/0d0/269/2020d026915747458d3de648dc7288f3.png)
![](https://habrastorage.org/files/819/790/f8e/819790f8e80244dab8c461fe50973e19.png)
д)
![](https://habrastorage.org/files/f11/c7b/901/f11c7b9010a14872bb9442ab80b8f0ea.png)
2 шаг
Проверяем условие останова:
Если
![](https://habrastorage.org/files/a24/384/721/a24384721d0640528546119bc208af18.png)
иначе — переходим к шагу 3
3 шаг
а)
![](https://habrastorage.org/files/cea/16a/f5a/cea16af5a1fb48f98e593f9c81715d58.png)
Например(функция Хэвисайда):
![](https://habrastorage.org/files/a26/04a/2e3/a2604a2e3cff4c3cb921528e5c48a77f.png)
![](https://habrastorage.org/files/63d/9b0/c22/63d9b0c2228942529db85026f6b5989e.png)
![](https://habrastorage.org/files/9e5/2f9/6eb/9e52f96eb0d94677a4df67f1ddac94b7.png)
![](https://habrastorage.org/files/eae/9e5/43a/eae9e543a0954242b81ef85d21b54999.png)
![](https://habrastorage.org/files/057/cf8/622/057cf862249844dab79974d449650456.png)
![](https://habrastorage.org/files/c2c/2d5/093/c2c2d50933874d1dbc83648decd0e0ba.png)
После подсчетов меняем номер итерации:
![](https://habrastorage.org/files/c4f/5d4/eb0/c4f5d4eb0509423d96527fdd4d14f3c7.png)
б) переходим на шаг 2
Пример работы алгоритма НСКО
![](https://habrastorage.org/files/045/f9f/6d6/045f9f6d643941cd9c209df6f0c96529.png)
![](https://habrastorage.org/files/62b/bd6/b2d/62bbd6b2d57d46d799723ccd91e4f26c.png)
![](https://habrastorage.org/files/4b8/da5/fd7/4b8da5fd70fc4469b0b2b6801da7bddf.png)
![](https://habrastorage.org/files/088/b95/4e4/088b954e40e641ec956476d4bf45ab40.png)
![](https://habrastorage.org/files/342/b3e/25f/342b3e25fc2443d39a31b1a9ad8c6e12.png)
![](https://habrastorage.org/files/59b/bb9/615/59bbb961523a44ccbbce4141b2a86eb0.png)
![](https://habrastorage.org/files/115/873/fd7/115873fd7ae946928bb0cbf824014191.png)
![](https://habrastorage.org/files/b23/452/2ab/b234522ab6bf40428a08f6b7cceb428d.png)
а)
![](https://habrastorage.org/files/454/66c/b1e/45466cb1e57d4555b40e301807de0825.png)
![](https://habrastorage.org/files/d88/b4f/757/d88b4f757aa248acbb37436f247b92d7.png)
![](https://habrastorage.org/files/9af/cc4/b22/9afcc4b2240e44f3a75b83f8ccfba020.png)
![](https://habrastorage.org/files/2ac/791/c72/2ac791c72b1d490981190f87312e4cd3.png)
б)
![](https://habrastorage.org/files/199/df4/9c0/199df49c0a0f4ff4a5b9fd31fc7187d5.png)
в)
![](https://habrastorage.org/files/bdf/a90/196/bdfa90196cd545888308647991eb9c07.png)
г)
![](https://habrastorage.org/files/c38/20b/001/c3820b0012f4441ea454f3d44a13ba9a.png)
![](https://habrastorage.org/files/b85/f34/ff0/b85f34ff00e34e939e20327db85d9a62.png)
д)
![](https://habrastorage.org/files/f11/c7b/901/f11c7b9010a14872bb9442ab80b8f0ea.png)
![](https://habrastorage.org/files/5ef/d7d/037/5efd7d03709047988d7183a1e8d7c78c.png)
![](https://habrastorage.org/files/f76/a63/9ab/f76a639ab2d142509181dfa9bdb12a95.png)
![](https://habrastorage.org/files/3d3/0ff/8f9/3d30ff8f96464f0489a4a0dc5a7dbe1e.png)
Завершили работу алгоритма, и теперь можно подсчитать нашу ЛРФ.
![](https://habrastorage.org/files/a29/317/9bd/a293179bd06e409a93aa2b2c791a2f0b.png)
Спасибо parpalak за онлайн редактор.
Спасибо за внимание.
Комментарии (8)
masai
13.10.2016 19:09+1Какова общая идея метода? Как вычисляется ошибка, которая минимизируется? Почему алгоритм вообще работает? Чем он лучше или хуже других методов классификации? Какова скорость сходимости?
Я правильно понимаю, что первый шаг — это просто решение задачи методом нормального уравнения для подвыборки?
lorc
13.10.2016 19:09+3Как-то это больше похоже на методичку к лабе, честно говоря. Хотелось бы всё-таки увидеть описание работы алгормитма. Хоть какое-то обоснование, почему он сходится и как быстро сходится. Как выбирается скорость обучения… А то сейчас выглядит так, будто если поставить h_k = 100500, то алгоритм всегда будет сходится за одну итерацию.
Короче, хотелось бы видеть полноценную статью, а не короткую заметку.rocket3
13.10.2016 20:09Спасибо за замечание. Данную тематику можно было бы довести до научного исследования, но в данной статье я постарался изложить теорию кратко, в помощь для тех, кто начинает изучение теории классификации.
masai
13.10.2016 20:40+2При всём уважении, эта статья начинающим вряд ли будет полезна, так как не объясняет область применимости и характер поведения алгоритма.
lorc
13.10.2016 20:43Извините, но теории то как раз нету. Сплошная практика.
Вот вам шаги алгоритма, вот вам пример шагания.
Dark_Daiver
Этот подход чем-то лучше обычных SVM?
rocket3
Метод SVM имеет кардинально иной подход к классификации данных. На практике я не сравнивал, но с точки зрения теории могу сказать, что в случае линейно неразделимых классов в алгоритме SVM предусмотрен переход к пространству большей размерности, дабы получить разделимость, а в НСКО мы, не меняя исходных данных, стараемся разделить классы, сводя ошибку к минимуму.
Dark_Daiver
Ну не обязательно же, достаточно просто перейти от жестких ограничений к мягким. Скажем при помощи Hinge loss.