Линейно неотделимые векторы

Нейрон с 2 входами жесткого предела не может правильно классифицировать 5 входных векторов, потому что они линейно неразделимы.

Каждый из пяти векторов-столбцов X задает 2-элементные векторы входа, а вектор-строка T задает целевые категории вектора. Постройте график этих векторов с помощью PLOTPV.

X = [ -0.5 -0.5 +0.3 -0.1 -0.8; ...
      -0.5 +0.5 -0.5 +1.0 +0.0 ];
T = [1 1 0 0 0];
plotpv(X,T);

Перцептрон должен правильно классифицировать векторы входа в X в категории, заданные T. Поскольку два вида входа векторов не могут быть разделены прямой линией, перцептрон не сможет это сделать.

Здесь создается и конфигурируется начальный перцептрон. (Шаг строения обычно является необязательным, так как он выполняется автоматически ADAPT и TRAIN.)

net = perceptron;
net = configure(net,X,T);

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

hold on
plotpv(X,T);
linehandle = plotpc(net.IW{1},net.b{1});

ADAPT возвращает новую сеть после обучения на входе и целевых данных, выходах и ошибке. Цикл позволяет сети неоднократно адаптироваться, строит график линии классификации и останавливается после 25 итераций.

for a = 1:25
   [net,Y,E] = adapt(net,X,T);
   linehandle = plotpc(net.IW{1},net.b{1},linehandle);  drawnow;
end;

Обратите внимание, что нулевая ошибка так и не была получена. Несмотря на обучение, перцептрон не стал приемлемым классификатором. Возможность классифицировать только линейно разделяемые данные является фундаментальным ограничением перцептронов.

Для просмотра документации необходимо авторизоваться на сайте