Однослойный персептрон (пример)
Материал из MachineLearning.
|
Однослойный персептрон — это модель нейрона, простейший пример нейронной сети. Фактически представляет собой линейный пороговый классификатор.
Постановка задачи линейного разделения классов
Пусть - пространство объектов; - множество допустимых ответов. Будем считать, что , где - признаковое описание объекта, а - дополнительный константный признак; . Задана обучающая выборка . Значения признаков рассматриваются как импульсы, поступающие на вход нейрона, которые складываются с весами . Если суммарный импульс превышает порог активации , то нейрон возбуждается и выдаёт на выходе 1, иначе выдаётся 0. Таким образом, нейрон вычисляет -арную булеву функцию вида
Требуется найти значения параметров, при которых алгоритм наилучшим образом аппроксимирует целевую зависимость, заданную на объектах обучающей выборки.
Описание алгоритма
Для настройки вектора весов воспользуемся методом стохастического градиента. Возьмем квадратичную функцию потерь: , а в качестве функции активации возьмем сигмоидную функцию: . Согласно принципу минимизации эмпирического риска задача сводится к поиску вектора, доставляющего минимум функционалу . Применим для минимизации метод градиентного спуска:
где величина шага в направлении антиградиента, называемая также темпом обучения (learning rate). Будем выбирать прецеденты по одному в случайном порядке, для каждого делать градиентный шаг и сразу обновлять вектор весов:
Вычислительный эксперимент
Показана работа алгоритма в серии задач, основанных как на реальных, так и на модельных данных. 1) Пример на реальных данных: ирисы. Из классической задачи о классификации ирисов выбраны 2 вида ирисов: Versicolour и Virginica, которые предлагается классифицировать по двум признакам – длине и ширине лепестка. Данные содержат информацию о 50 цветках каждого вида(ссылка). Картинка 1 Картинка 2 На графике показаны результаты классификации. По оси х отложено значение одного признака(длина лепестка в см)б а по оси у значение второго признака(ширина лепестка в см). Различные классы показаны крестика различных цветов, а результат классификации кружочками соотвествующего цвета. Зеленой линией показана граница между классами, построенная алгоритмом.
%load data load 'iris2.data'; x = iris2; x(:,1) = []; %eliminating first two attributes x(:,1) = []; y = [repmat(0,50,1);repmat(1,50,1)]; %creating class labels %plotting data plot(x(y == 0,1),x(y == 0,2),'*r'); hold on plot(x(y == 1,1),x(y == 1,2),'*b'); %invoke One layer perceptron algorithm w = OneLayerPerc(x,y); %getting classification y = PercTest(x,w); %plotting resulting classification plot(x(y == 0,1),x(y == 0,2),'or'); plot(x(y == 1,1),x(y == 1,2),'ob'); plot([w(3)/w(1),0],[0,w(3)/w(2)],'g'); hold off;
Заметим, что данные линейно не разделимы, но алгоритм показывает хороший результат, допустив всего 5 ошибок классификации.
Исходный код
TODO
Смотри также
TODO
Литература
- К. В. Воронцов, Лекции по линейным алгоритмам классификации
- Bishop, C. Pattern Recognition And Machine Learning. Springer. 2006.
Данная статья является непроверенным учебным заданием.
До указанного срока статья не должна редактироваться другими участниками проекта MachineLearning.ru. По его окончании любой участник вправе исправить данную статью по своему усмотрению и удалить данное предупреждение, выводимое с помощью шаблона {{Задание}}. См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе. |