附 第三章作业

作业(1)

题目

在一个10类的模式识别问题中,有3类单独满足多类情况1,其余的类别满足多类情况2。问该模式识别问题所需判别函数的最少数目是多少?

  • 对于3类满足情况1的,将剩下的7类合看作一类,则实际上是4分类问题,需要4个判别函数

  • 剩下7个类别为情况2,需要M(M1)2\tfrac{M(M-1)}{2}条判别函数

  • 故总共需要:

4+7×62=254 + \frac{7\times 6}{2} = 25

作业(2)

题目

一个三类问题,其判别函数如下:

d1(x)=x1,d2(x)=x1+x21,d3(x)=x1x21d_1(x)=-x_1, d_2(x)=x_1+x_2-1, d_3(x)=x_1-x_2-1

  1. 设这些函数是在多类情况1条件下确定的,绘出其判别界面和每一个模式类别的区域。

  2. 设为多类情况2,并使:d12(x)=d1(x),d13(x)=d2(x),d23(x)=d3(x)d_{12}(x)= d_1(x), d_{13}(x)= d_2(x), d_{23}(x)= d_3(x)。绘出其判别界面和多类情况2的区域。

  3. d1(x),d2(x)d_1(x), d_2(x)d3(x)d_3(x)是在多类情况3的条件下确定的,绘出其判别界面和每类的区域。

Q1

Q2

Q3

 d1(x)=x1d2(x)=x1+x21d3(x)=x1x21 d12(x)=d1(x)d2(x)=2x1x2+1=0d13(x)=d1(x)d3(x)=2x1+x2+1d23(x)=d2(x)d3(x)=2x2=0\begin{align} \because\ &d_1(x)=-x_1 \nonumber \\ & d_2(x)=x_1+x_2-1 \\ & d_3(x)=x_1-x_2-1 \\ \\ \therefore\ & d_{12}(x) = d_1(x) - d_2(x) = -2x_1-x_2+1=0 \\ & d_{13}(x) = d_1(x)-d_3(x) = -2x_1+x_2+1 \\ & d_{23}(x) = d_2(x)-d_3(x) = 2x_2 = 0 \end{align}

作业(3)

题目

两类模式,每类包括 5 个 3 维不同的模式向量,且良好分布。如果它们是线性可分的,问权向量至少需要几个系数分量?

假如要建立二次的多项式判别函数,又至少需要几个系数分量?(设模式的良好分布不因模式变化而改变)

代入公式

Nw=Cn+rr=(n+r)!r!n!N_w = C_{n+r}^r=\frac{(n+r)!}{r!n!}

则当线性可分时,r=1,n=3,NwN_w=4

当采用二次多项式判别函数时,r=2,n=3,NwN_w=10

作业(4)

题目

用感知器算法求下列模式分类的解向量w\boldsymbol{w}:

ω1:{(0 0 0)T,(1 0 0)T,(1 0 1)T,(1 1 0)T}ω2:{(0 0 1)T,(0 1 1)T,(0 1 0)T,(1 1 1)T}\omega_1:\{(0\ 0\ 0)^T,(1\ 0\ 0)^T,(1\ 0\ 1)^T,(1\ 1\ 0)^T\} \\ \omega_2:\{(0\ 0\ 1)^T,(0\ 1\ 1)^T,(0\ 1\ 0)^T,(1\ 1\ 1)^T\}

首先讲属于ω2\omega_2的样本乘以-1,写成增广形式:

x1=(0 0 0 1)Tx2=(1 0 0 1)Tx3=(1 0 1 1)Tx4=(1 1 0 1)Tx5=(0 0 1 1)Tx6=(0 1 1 1)Tx7=(0 1 0 1)Tx8=(1 1 1 1)T\begin{align} &x_1 = (0\ 0\ 0\ 1)^T \nonumber \\ &x_2 = (1\ 0\ 0\ 1)^T \\ &x_3 = (1\ 0\ 1\ 1)^T \\ &x_4 = (1\ 1\ 0\ 1)^T \\ &x_5 = (0\ 0\ -1\ -1)^T \\ &x_6 = (0\ -1\ -1\ -1)^T \\ &x_7 = (0\ -1\ 0\ -1)^T \\ &x_8 = (-1\ -1\ -1\ -1)^T \end{align}

接下来开始迭代,感知器算法的一般表达:

w(k+1)={w(k)wT(k)xk>0w(k)+CxkwT(k)xk0w(k+1)= \begin{cases} w(k) & w^T(k)x^k>0 \\ w(k)+Cx^k &w^T(k)x^k \leq 0 \end{cases}

由于步数较多,此处直接给出程序运行结果:

[[0. 0. 0. 1.] [1. 0. 0. 1.] [1. 0. 1. 1.] [1. 1. 0. 1.] [0. 0. 1. 1.] [0. 1. 1. 1.] [0. 1. 0. 1.] [1. 1. 1. 1.]]

init w=[0. 0. 0. 0.]

epoch0: for x0=[0. 0. 0. 1.],label=1, now w=[0. 0. 0. 0.], predicted_label=0.0,update w=[0. 0. 0. 1.] for x1=[1. 0. 0. 1.],label=1, now w=[0. 0. 0. 1.], predicted_label=1.0,keep w for x2=[1. 0. 1. 1.],label=1, now w=[0. 0. 0. 1.], predicted_label=1.0,keep w for x3=[1. 1. 0. 1.],label=1, now w=[0. 0. 0. 1.], predicted_label=1.0,keep w for x4=[0. 0. 1. 1.],label=-1, now w=[0. 0. 0. 1.], predicted_label=1.0,update w=[ 0. 0. -1. 0.] for x5=[0. 1. 1. 1.],label=-1, now w=[ 0. 0. -1. 0.], predicted_label=-1.0,keep w for x6=[0. 1. 0. 1.],label=-1, now w=[ 0. 0. -1. 0.], predicted_label=0.0,update w=[ 0. -1. -1. -1.] for x7=[1. 1. 1. 1.],label=-1, now w=[ 0. -1. -1. -1.], predicted_label=-1.0,keep w epoch1: for x0=[0. 0. 0. 1.],label=1, now w=[ 0. -1. -1. -1.], predicted_label=-1.0,update w=[ 0. -1. -1. 0.] for x1=[1. 0. 0. 1.],label=1, now w=[ 0. -1. -1. 0.], predicted_label=0.0,update w=[ 1. -1. -1. 1.] for x2=[1. 0. 1. 1.],label=1, now w=[ 1. -1. -1. 1.], predicted_label=1.0,keep w for x3=[1. 1. 0. 1.],label=1, now w=[ 1. -1. -1. 1.], predicted_label=1.0,keep w for x4=[0. 0. 1. 1.],label=-1, now w=[ 1. -1. -1. 1.], predicted_label=0.0,update w=[ 1. -1. -2. 0.] for x5=[0. 1. 1. 1.],label=-1, now w=[ 1. -1. -2. 0.], predicted_label=-1.0,keep w for x6=[0. 1. 0. 1.],label=-1, now w=[ 1. -1. -2. 0.], predicted_label=-1.0,keep w for x7=[1. 1. 1. 1.],label=-1, now w=[ 1. -1. -2. 0.], predicted_label=-1.0,keep w epoch2: for x0=[0. 0. 0. 1.],label=1, now w=[ 1. -1. -2. 0.], predicted_label=0.0,update w=[ 1. -1. -2. 1.] for x1=[1. 0. 0. 1.],label=1, now w=[ 1. -1. -2. 1.], predicted_label=1.0,keep w for x2=[1. 0. 1. 1.],label=1, now w=[ 1. -1. -2. 1.], predicted_label=0.0,update w=[ 2. -1. -1. 2.] for x3=[1. 1. 0. 1.],label=1, now w=[ 2. -1. -1. 2.], predicted_label=1.0,keep w for x4=[0. 0. 1. 1.],label=-1, now w=[ 2. -1. -1. 2.], predicted_label=1.0,update w=[ 2. -1. -2. 1.] for x5=[0. 1. 1. 1.],label=-1, now w=[ 2. -1. -2. 1.], predicted_label=-1.0,keep w for x6=[0. 1. 0. 1.],label=-1, now w=[ 2. -1. -2. 1.], predicted_label=0.0,update w=[ 2. -2. -2. 0.] for x7=[1. 1. 1. 1.],label=-1, now w=[ 2. -2. -2. 0.], predicted_label=-1.0,keep w epoch3: for x0=[0. 0. 0. 1.],label=1, now w=[ 2. -2. -2. 0.], predicted_label=0.0,update w=[ 2. -2. -2. 1.] for x1=[1. 0. 0. 1.],label=1, now w=[ 2. -2. -2. 1.], predicted_label=1.0,keep w for x2=[1. 0. 1. 1.],label=1, now w=[ 2. -2. -2. 1.], predicted_label=1.0,keep w for x3=[1. 1. 0. 1.],label=1, now w=[ 2. -2. -2. 1.], predicted_label=1.0,keep w for x4=[0. 0. 1. 1.],label=-1, now w=[ 2. -2. -2. 1.], predicted_label=-1.0,keep w for x5=[0. 1. 1. 1.],label=-1, now w=[ 2. -2. -2. 1.], predicted_label=-1.0,keep w for x6=[0. 1. 0. 1.],label=-1, now w=[ 2. -2. -2. 1.], predicted_label=-1.0,keep w for x7=[1. 1. 1. 1.],label=-1, now w=[ 2. -2. -2. 1.], predicted_label=-1.0,keep w epoch4: for x0=[0. 0. 0. 1.],label=1, now w=[ 2. -2. -2. 1.], predicted_label=1.0,keep w for x1=[1. 0. 0. 1.],label=1, now w=[ 2. -2. -2. 1.], predicted_label=1.0,keep w for x2=[1. 0. 1. 1.],label=1, now w=[ 2. -2. -2. 1.], predicted_label=1.0,keep w for x3=[1. 1. 0. 1.],label=1, now w=[ 2. -2. -2. 1.], predicted_label=1.0,keep w for x4=[0. 0. 1. 1.],label=-1, now w=[ 2. -2. -2. 1.], predicted_label=-1.0,keep w for x5=[0. 1. 1. 1.],label=-1, now w=[ 2. -2. -2. 1.], predicted_label=-1.0,keep w for x6=[0. 1. 0. 1.],label=-1, now w=[ 2. -2. -2. 1.], predicted_label=-1.0,keep w for x7=[1. 1. 1. 1.],label=-1, now w=[ 2. -2. -2. 1.], predicted_label=-1.0,keep w w = [ 2. -2. -2. 1.]

最终得到权向量为w=(2,2,2,1)Tw=(2,-2,-2,1)^T,故判别函数为:

d(x)=2x12x22x3+1d(x) = 2x_1-2x_2-2x_3+1

上述结果的代码如下:

作业(5)

题目

用多类感知器算法求下列模式的判别函数:

ω1:(1,1)Tω2:(0,0)Tω3:(1,1)T\omega_1:(-1,-1)^T \\ \omega_2:(0,0)^T \\ \omega_3:(1,1)^T

由于递推字数较多,此处仍然直接给出程序运行结果:

[[-1. -1. 1.] [ 0. 0. 1.] [ 1. 1. 1.]]

init w= [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]

epoch0: for x1=[-1. -1. 1.], now w=[0. 0. 0. 0. 0. 0. 0. 0. 0.], max_label=[0 1 2], update w=[-1. -1. 1. 1. 1. -1. 1. 1. -1.]

for x2=[0. 0. 1.], now w=[-1. -1. 1. 1. 1. -1. 1. 1. -1.], max_label=[0], update w=[-1. -1. 0. 1. 1. 0. 1. 1. -2.]

for x3=[1. 1. 1.], now w=[-1. -1. 0. 1. 1. 0. 1. 1. -2.], max_label=[1], update w=[-2. -2. -1. 0. 0. -1. 2. 2. -1.]

epoch1: for x1=[-1. -1. 1.], now w=[-2. -2. -1. 0. 0. -1. 2. 2. -1.], max_label=[0], keep w

for x2=[0. 0. 1.], now w=[-2. -2. -1. 0. 0. -1. 2. 2. -1.], max_label=[0 1 2], update w=[-2. -2. -2. 0. 0. 0. 2. 2. -2.]

for x3=[1. 1. 1.], now w=[-2. -2. -2. 0. 0. 0. 2. 2. -2.], max_label=[2], keep w

epoch2: for x1=[-1. -1. 1.], now w=[-2. -2. -2. 0. 0. 0. 2. 2. -2.], max_label=[0], keep w

for x2=[0. 0. 1.], now w=[-2. -2. -2. 0. 0. 0. 2. 2. -2.], max_label=[1], keep w

for x3=[1. 1. 1.], now w=[-2. -2. -2. 0. 0. 0. 2. 2. -2.], max_label=[2], keep w

w = [[-2. -2. -2.] [ 0. 0. 0.] [ 2. 2. -2.]]

综上,得到的判别函数为:

d1(x)=2x12x22d2(x)=0d3(x)=2x1+2x22d_1(x) = -2x_1-2x_2-2 \\ d_2(x) = 0 \\ d_3(x) = 2x_1+2x_2-2

所用程序如下:

最后更新于

这有帮助吗?