用双输入感知器分类
双输入硬限制神经元被训练为将四个输入向量划分为两个类别。
X 中的四个列向量中的每一个都定义了一个二元素输入向量,行向量 T 定义了向量的目标类别。我们可以使用 PLOTPV 绘制这些向量。
X = [ -0.5 -0.5 +0.3 -0.1; ...
-0.5 +0.5 -0.5 +1.0];
T = [1 1 0 0];
plotpv(X,T);
感知器必须将 X 中的四个输入向量正确分类为由 T 定义的两个类别。感知器具有 HARDLIM 神经元。这些神经元能够用一条直线将输入空间分为两个类别(0 和 1)。
这里 PERCEPTRON 创建了一个具有单个神经元的新神经网络。然后针对数据配置网络,这样我们可以检查其初始权重和偏置值。(通常可以跳过配置步骤,因为 ADAPT 或 TRAIN 会自动完成配置。)
net = perceptron; net = configure(net,X,T);
神经元初次尝试分类时,输入向量会被重新绘制。
初始权重设置为零,因此任何输入都会生成相同的输出,而且分类线甚至不会出现在图上。别担心...我们将对它进行训练!
plotpv(X,T); plotpc(net.IW{1},net.b{1});
此处,输入数据和目标数据转换为顺序数据(元胞数组,其中每个列指示一个时间步)并复制三次以形成序列 XX 和 TT。
ADAPT 针对序列中的每个时间步更新网络,并返回一个作为更好的分类器执行的新网络对象。
XX = repmat(con2seq(X),1,3); TT = repmat(con2seq(T),1,3); net = adapt(net,XX,TT); plotpc(net.IW{1},net.b{1});
现在 SIM 用于对任何其他输入向量(如 [0.7; 1.2])进行分类。此新点及原始训练集的绘图显示了网络的性能。为了将其与训练集区分开来,将其显示为红色。
x = [0.7; 1.2]; y = net(x); plotpv(x,y); point = findobj(gca,'type','line'); point.Color = 'red';
开启“hold”,以便先前的绘图不会被删除,并绘制训练集和分类线。
感知器正确地将我们的新点(红色)分类为类别“零”(用圆圈表示)而不是“一”(用加号表示)。
hold on; plotpv(X,T); plotpc(net.IW{1},net.b{1}); hold off;