Main Content

离群值输入向量

2 输入硬限制神经元被训练为将 5 个输入向量分类为两个类别。然而,由于 1 个输入向量比所有其他向量大得多,因此训练需要很长时间。

X 中的五个列向量中的每一个都定义了一个二元素输入向量,行向量 T 定义了向量的目标类别。使用 PLOTPV 绘制这些向量。

X = [-0.5 -0.5 +0.3 -0.1 -40; -0.5 +0.5 -0.5 +1.0 50];
T = [1 1 0 0 1];
plotpv(X,T);

请注意,4 个输入向量的幅值远远小于绘图左上角的第五个向量。感知器必须将 X 中的 5 个输入向量正确分类为由 T 定义的两个类别。

PERCEPTRON 创建一个新网络,然后用输入和目标数据对该网络进行配置,产生其权重和偏置的初始值。(配置通常不是必需的,因为它由 ADAPT 和 TRAIN 自动完成。)

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

将神经元的最初分类尝试添加到绘图中。

初始权重设置为零,因此任何输入都会生成相同的输出,而且分类线甚至不会出现在图上。别担心...我们将对它进行训练!

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

ADAPT 返回一个新网络对象(它作为更好的分类器执行)、网络输出和误差。此循环会自适应网络并绘制分类线,直到误差为零。

E = 1;
while (sse(E))
   [net,Y,E] = adapt(net,X,T);
   linehandle = plotpc(net.IW{1},net.b{1},linehandle);
   drawnow;
end

注意感知器需要三遍才能得到正确结果。对于这样一个简单问题来说,这是一段很长的时间。训练时间长的原因是存在离群值向量。尽管训练时间很长,感知器仍能正确学习,并可用于对其他输入进行分类。

现在,SIM 可用于对任何其他输入向量进行分类。例如,对输入向量 [0.7; 1.2] 进行分类。

此新点及原始训练集的绘图显示了网络的性能。为了将其与训练集区分开来,将其显示为红色。

x = [0.7; 1.2];
y = net(x);
plotpv(x,y);
circle = findobj(gca,'type','line');
circle.Color = 'red';

打开“hold”,这样之前的绘图不会被擦除。将训练集和分类线添加到绘图中。

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

最后,放大感兴趣的区域。

感知器正确地将我们的新点(红色)分类为类别“零”(用圆圈表示)而不是“一”(用加号表示)。尽管训练时间很长,感知器仍能正确学习。要了解如何减少与离群值向量相关联的训练时间,请参阅“归一化感知器规则”示例。

axis([-2 2 -2 2]);