Метод Парзеновского окна (пример)
Материал из MachineLearning.
| Строка 5: | Строка 5: | ||
<center><tex>a(x;X^{l},h)=\arg \max_{y\in Y} \lambda_{y} \sum_{i=1}^l {[}y_i = y{]} K\left(\frac{\ro{}(x,x_i)}{h}\right).</tex></center>   | <center><tex>a(x;X^{l},h)=\arg \max_{y\in Y} \lambda_{y} \sum_{i=1}^l {[}y_i = y{]} K\left(\frac{\ro{}(x,x_i)}{h}\right).</tex></center>   | ||
В этой формуле <tex>\lambda_{y}</tex> - цена правильного ответа для каждого класса из <tex>Y</tex>  | В этой формуле <tex>\lambda_{y}</tex> - цена правильного ответа для каждого класса из <tex>Y</tex>  | ||
| - | |||
| - | |||
== Алгоритм отыскания оптимальных параметров ==  | == Алгоритм отыскания оптимальных параметров ==  | ||
| Строка 30: | Строка 28: | ||
|}    | |}    | ||
Получившееся выражение имеет достаточно понятный вид:  | Получившееся выражение имеет достаточно понятный вид:  | ||
| - | <center><tex>(h^{*},K^{*}_s(r))=\arg{ } \max_{s\in{  | + | <center><tex>(h^{*},K^{*}_s(r))=\arg{ } \max_{\small s\in\{1,2,3,4,5\}} \max_{h\in\delta{}H} \sum_{i=1}^l \log \hat{p}_h (x_i;X^{m}{/}x_i). </tex></center>  | 
== Вычислительный эксперимент ==  | == Вычислительный эксперимент ==  | ||
| Строка 49: | Строка 47: | ||
</source>  | </source>  | ||
| - | В   | + | В каждом случае была использована своя матрица параметров  двухмерного распределения <tex>V=\{M_1,\sigma_1^2,m,n_1{;}M_2,\sigma_2^2,m,n_2\}</tex>, где <tex>M_i</tex> - математическое ожидание для <tex>i</tex>-го класса, <tex>\sigma_i^2</tex> -дисперсия, <tex>m=2</tex> - размерность пространства признаков, <tex>n_i</tex> - количество элемнтов каждого класса  | 
| - | + | ||
| - | + | {| class="wikitable" style="text-align: center;"  | |
| - | + | |- bgcolor="#cccccc"  | |
| + | ! width=10 % |#  | ||
| + | ! width=15 % | <tex>M_1</tex>  | ||
| + | ! width=15 % | <tex>\sigma_1^2</tex>  | ||
| + | ! width=15 % | <tex>n_1</tex>  | ||
| + | ! width=15 % | <tex>M_2</tex>  | ||
| + | ! width=15 % | <tex>\sigma_2^2</tex>  | ||
| + | ! width=15 % | <tex>n_2</tex>  | ||
| + | |||
| + | |-  | ||
| + | | '''1''' || 0 || 4 || 60 || 20 || 4 || 50   | ||
| + | |-  | ||
| + | | '''2''' || 0 || 4 || 60 || 5 || 4 || 50    | ||
| + | |-  | ||
| + | | '''3''' || 0 || 4 || 60 || 0 || 12 || 50    | ||
| + | |-  | ||
| + | |}    | ||
Мы видим, что при хорошо разделимых классах, наш алгоритм работает замечательно при правильно подобранном значение <tex>k</tex> и любом ядре.  | Мы видим, что при хорошо разделимых классах, наш алгоритм работает замечательно при правильно подобранном значение <tex>k</tex> и любом ядре.  | ||
[[Изображение:Parzen1.jpg|300px]]  | [[Изображение:Parzen1.jpg|300px]]  | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
Во втором случае классы были сближены, что привело к некоторому неустранимому числу ошибок.  | Во втором случае классы были сближены, что привело к некоторому неустранимому числу ошибок.  | ||
[[Изображение:Parzen3.jpg|300px]]  | [[Изображение:Parzen3.jpg|300px]]  | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
В третьем случае были взяты два класса с одинаковыми математическими ожиданиями, но разными дисперсиями. Алгоритм достаточно хорошо разделил и их.  | В третьем случае были взяты два класса с одинаковыми математическими ожиданиями, но разными дисперсиями. Алгоритм достаточно хорошо разделил и их.  | ||
| Строка 89: | Строка 93: | ||
|автор        = Воронцов К. В.  | |автор        = Воронцов К. В.  | ||
|заглавие     = Лекции по линейным алгоритмам классификации  | |заглавие     = Лекции по линейным алгоритмам классификации  | ||
| + | }}  | ||
| + | # {{книга  | ||
| + | |автор        = Christopher M. Bishop   | ||
| + | |заглавие     = Pattern Recognition and Machine Learning  | ||
| + | |издание      = Hardcover  | ||
| + | |год          = 2006  | ||
| + | |страниц      = 740  | ||
}}  | }}  | ||
# {{книга  | # {{книга  | ||
Версия 11:33, 24 мая 2009
Метод Парзеновского окна принадлежит к непараметрическим методам классификации и представляет собой одну из возможных реализаций байесовского подхода к решению задачи классификации.
Содержание | 
Постановка задачи разделения классов методом парзеновского окна
Пусть у нас задана выборка , где 
 = 
 - множество объектов, а 
 = 
 - множество ответов на этих объектах. Кроме того, задан объект 
, который небоходимо классифицировать с помощью алгоритма 
.
Задача состоит в том, что бы подобрать параметр 
, ширину окна, и 
ядерную функцию, таким образом, что бы при классификации с помощью метода парзеновского окна функционал качества достигал бы своего максимума при работе алгоритма с заданными параметрами:
В этой формуле  - цена правильного ответа для каждого класса из 
Алгоритм отыскания оптимальных параметров
Чтобы найти ширину окна и наиболее подходящий нам тип ядра, мы воспользуемся принципом максимального правдоподобия и исключением объектов по одному leave-one-out:
То есть, мы будем восстанавливать значение класса для одного объекта из нашей выборки и максимизировать логарифм количества правильных ответов при исключении по очереди всех объектов выборки. Максимизация этого значения происходит по двум параметрам - ширине окна  и типу ядерной функции. Ширину окна мы можем подобрать из некоторого диапазона 
, полученного из эмпирических предположений. Ядро выбирается из нижеприведенного набора ядер: 
| # | ядро  | формула | 
|---|---|---|
| 1 | Епанечникова |   | 
| 2 | Квартическое |   | 
| 3 | Треугольное |   | 
| 4 | Гауссовское |   | 
| 5 | Прямоугольное |   | 
Получившееся выражение имеет достаточно понятный вид:
Вычислительный эксперимент
Вычислительный эксперимент был проведен на реальных и модельных данных. В качестве модельных данных были взяты точки из двух нормальных распределений с разными математическими ожиданиями и дисперсиями (соответственно, были получены два класса объектов). После проведения рядка экспериментов были получены следующие результаты:
Код получения данных:
%NORMGENERATION generation of normal data in 2 classes with different %parameteres to be described in V: V(1,1) V(1,2) parameters of normal %distribution for first class; V(2,1) V(2,2) parameters of normal %distribution for first class; V(1,3) - number of properties; V(1,4), %V(2,4) - number of objects in first and second class X1=random('normal',V(1,1),V(1,2),V(1,3),V(1,4)); X2=random('normal',V(2,1),V(2,2),V(1,3),V(2,4)); X=[X1 , X2]; Y=[ones(1,V(1,4)) , zeros(1,V(2,4))];
В каждом случае была использована своя матрица параметров  двухмерного распределения , где 
 - математическое ожидание для 
-го класса, 
 -дисперсия, 
 - размерность пространства признаков, 
 - количество элемнтов каждого класса
| # |   |   |   |   |   |   | 
|---|---|---|---|---|---|---|
| 1 | 0 | 4 | 60 | 20 | 4 | 50 | 
| 2 | 0 | 4 | 60 | 5 | 4 | 50 | 
| 3 | 0 | 4 | 60 | 0 | 12 | 50 | 
Мы видим, что при хорошо разделимых классах, наш алгоритм работает замечательно при правильно подобранном значение  и любом ядре.
Во втором случае классы были сближены, что привело к некоторому неустранимому числу ошибок.
В третьем случае были взяты два класса с одинаковыми математическими ожиданиями, но разными дисперсиями. Алгоритм достаточно хорошо разделил и их.
Исходный код
Скачать листинги алгоритмов можно здесь parzenclassification.m, crossvalidation.m, fqual.m, kgenerate.m
Смотри также
Литература
- Воронцов К. В. Лекции по линейным алгоритмам классификации.
 - Christopher M. Bishop Pattern Recognition and Machine Learning. — Hardcover. — 2006. — 740 с.
 - Pascal Vincent and Yoshua Bengio Manifold Parzen Windows. — 2002.
 
|   |  Данная статья является непроверенным учебным заданием.
 До указанного срока статья не должна редактироваться другими участниками проекта MachineLearning.ru. По его окончании любой участник вправе исправить данную статью по своему усмотрению и удалить данное предупреждение, выводимое с помощью шаблона {{Задание}}. См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе.  | 

