感知器算法及其Matlab实现

感知器算法

感知器算法适用于线性可分情况,其数学表达式为: G ( X ) = W T X G(X)=W^TX G(X)=WTX
其中W是权向量,X是样本集合。感知器算法的问题在于如何求解权向量,我们可以通过已预分类的训练样本集,考虑 ω i / ω j \omega_i/\omega_j ωi/ωj的两分问题
G ( X ) = W T X > 0 ⇒ X ∈ ω i G ( X ) = W T X < 0 ⇒ X ∈ ω j X = { X 1 , X 2 , . . . X N } { X 1 , X 2 , . . . , X n i ∈ ω i X n i + 1 , X n i + 2 , . . . X N ∈ ω j n i + n j = N G(X)=W^TX>0 \Rightarrow X\in\omega_i\\ G(X)=W^TX<0 \Rightarrow X\in\omega_j\\ \mathcal{X}=\{X_1,X_2,...X_N\} \left\{ \begin{aligned} X_1,X_2,...,X_{n_i} \in\omega_i \\ X_{n_i+1},X_{n_i+2},...X_N \in \omega_j \end{aligned} \right.\\ n_i+n_j=N G(X)=WTX>0XωiG(X)=WTX<0XωjX={X1,X2,...XN}{X1,X2,...,XniωiXni+1,Xni+2,...XNωjni+nj=N
根据预分类结果, W ∗ W^* W满足
W T X k > 0 , k = 1 , 2 , 3 , . . . , n i W T X k < 0 , k = n i + 1 , . . . , N ⇒ W T ( − X k ) > 0 W^TX_k>0, k=1,2,3,...,n_i\\ W^TX_k<0,k=n_i+1,...,N \Rightarrow W^T(-X_k)>0\\ WTXk>0,k=1,2,3,...,niWTXk<0,k=ni+1,...,NWT(Xk)>0
因此决策面为 W T X k = 0 , k = 1 , 2 , . . . , N W^TX_k=0, k=1,2,...,N WTXk=0,k=1,2,...,N
感知器算法及其Matlab实现_第1张图片
W ∗ W^* W一般不唯一,落在解区内任何一点均有资格作为解权向量
求解权向量的步骤:


  • Step1.构造增广矩阵
    根据预分类的样本集构造增广向量,以样本集 { X 1 = ( 0 , 0 ) , X 2 = ( 0 , 1 ) ∈ ω 1 ; X 3 = ( 1 , 0 ) , X 4 = ( 1 , 1 ) ∈ ω 2 } \{X_1=(0,0),X_2=(0,1) \in\omega_1;X_3=(1,0),X_4=(1,1) \in \omega_2\} {X1=(0,0),X2=(0,1)ω1;X3=(1,0),X4=(1,1)ω2}为例,增加一个维度,当样本属于 ω 1 \omega_1 ω1时为1,当样本属于 ω 2 \omega_2 ω2时为-1并且对该样本乘以-1,即 { X 1 ∗ = ( 0 , 0 , 1 ) , X 2 ∗ = ( 0 , 1 , 1 ) , X 3 ∗ = ( − 1 , 0 , − 1 ) , X 4 ∗ = ( − 1 , − 1 , − 1 ) } \{X_1^*=(0,0,1),X_2^*=(0,1,1),X_3^*=(-1,0,-1),X_4^*=(-1,-1,-1)\} {X1=(0,0,1),X2=(0,1,1),X3=(1,0,1),X4=(1,1,1)}

  • Step2.赋初值
    迭代步数k=0,更新因子 ρ \rho ρ=1,W(0)为全0向量(即为 W ( 0 ) = ( 0 , 0 , 0 ) T ) W(0)=(0,0,0)^T) W(0)=(0,0,0)T),连续正确分类计数器 N c = 0 N_c=0 Nc=0

  • Step3.迭代计算
    依次读入训练样本集合 X = X [ k ] N , [ k ] N = k m o d ( N ) X=X_{[k]_N} ,[k]_N=k mod(N) X=X[k]N,[k]N=kmod(N)(即依次循环取 X 1 , X 2 , . . . X_1,X_2,... X1,X2,...
    G ( X ) ≥ 0 , W ( k + 1 ) = W ( k ) , N c + = 1 , k + = 1 G(X)\ge 0, W(k+1)=W(k),N_c+=1, k+=1 G(X)0,W(k+1)=W(k),Nc+=1,k+=1;
    否则 W ( k + 1 ) = W ( k ) + ρ X , N c = 0 , k + = 1 W(k+1)=W(k)+\rho X, N_c=0,k+=1 W(k+1)=W(k)+ρX,Nc=0,k+=1
    N c ≥ N N_c\ge N NcN时,则算法结束,否则继续迭代

如果训练样本集是线性可分的,则基于固定增量法则的感知器算法经过有限次迭代后将收敛到正确的解权向量

MATLAB实现

function w=perception(x)

w(1,:)=[0,0,0];
k=0;
n=0;
size1=size(x);
for i=1:100
    for j=1:size1(1)
        k=k+1;
        if w(k,:)*x(j,:)'>0
            n=n+1;
            w(k+1,:)=w(k,:);
        else
            w(k+1,:)=w(k,:)+x(j,:);
        end
        
    end
    if n>=(size1(1))
        break;
    else
        n=0;
    end
   
end
k

部分资料取自中科大汪增福老师的模式识别课件

你可能感兴趣的:(模式识别,matlab,算法)