《统计学习方法》李航_学习笔记_第2章_感知机

来源:互联网 发布:开淘宝店技巧 编辑:程序博客网 时间:2024/05/16 01:06

第2章 感知机

感知机(perception)是一种二类分类线性分类模型
输入:实例的特征向量
输出:实例的类别(+1,-1)
感知机:输入空间中将实例划分为正负两类的分离超平面,属于判别模型
感知机学习
目的:求出将训练数据进行线性划分的分离超平面
方法:导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型

  • 2.1感知机模型
    感知机:

    f(x)=sign(wx+b)

    其中:
    w为权值(或权值向量weight vector)
    b为偏值(bias)
    sign为符号函数
    sign(x)={+11x >= 0x<0

  • 2.2感知机学习策略
    数据集线性可分:存在某个超平面S能够将数据集T的正负实例点完全正确地划分到超平面的两侧,即:
    对所有yi=+1的实例,有wxi+b>0
    对所有yi=1的实例,有wxi+b<0
    则称数据集T为线性可分数据集。
    损失函数的选择:
    (1:误分类点总数,该函数不是参数w,b的连续可导函数,不易优化)
    2:误分类点到超平面S的总距离

    L(w,b)=xiϵMyi(wxi+b)

    损失函数是非负的,如果没有误分类点,损失函数值为0。
    误分类点越少,误分类点离超平面越近,损失函数值就越小,损失函数是w,b的连续可导函数。

  • 2.3感知机学习算法
    原始形式、对偶形式
    随机梯度下降法:
    任意选取一个超平面w0,b0,利用梯度下降法不断极小化目标函数(极小化的过程是一次随机选取一个误分类点使其梯度下降)
    随机选取误分类点(xi,yi),对w,b进行更新:

    w=w+ηyixi
    b=b+ηyi

    其中,η(0<η1)为步长(学习率)
    通过迭代可使损失函数L(w,b)不断减小,直至0

1.原始形式
(1)选取初值w0,b0
(2)在训练集中选取数据(xi,yi)
(3)如果yi(wxi+b)0

w=w+ηyixi
b=b+ηyi

(4)转至(2),直至训练集中没有误分类点

  • matlab实现代码:
function [w,b]=perception(TrainSet,learning_rate)[M,N]=size(TrainSet);%(1)设定初值w=zeros(M-1,1),b=0;count=0;iter=0;%(2)在训练集中选取数据fprintf('迭代次数\t\t误分类点\t\t\tw\t\t\tb\t\n');while count~=N    count=0;    for i=1:N        count=count+1;        x=TrainSet(2:M,i);        y=TrainSet(1,i);        if (w'*x+b)*y<=0  %注意是求w的转置矩阵和x的点积            w=w+learning_rate*y*x;            b=b+learning_rate*y;            count=count-1;            iter=iter+1;            fprintf('\t%u\t',iter);%输出迭代次数              fprintf('\t\t%u\t',i);%输出误分类点              fprintf('\t(%2.1g,%2.1g)''\t',w);%输出w              fprintf('%4.1g\n',b);%输出b              break;        end    endend

测试:

TrainSet=[1,1,-1  %正负点y3,4,1          3,3,1];learning_rate=1;[w,b]=perception(TrainSet,learning_rate)

感知机学习算法存在许多解,因初值的选择和迭代过程中误分类点选择顺序的不同而不同。
为了得到唯一的超平面,需要对分离超平面增加约束条件 (线性支持向量机)。

当训练集线性不可分时,感知机学习算法不收敛,迭代结果会发生震荡。

0 0
原创粉丝点击