感知机算法原理及matlab代码实现-统计学习方法学习笔记

前言

感知机(perceptron)是二分类的线性分类模型,输入实例数据,输出为实例的类别,分别取+1,-1二值。属于判别模型,感知机学习旨在求出将训练数据进行线性划分的分离超平面,其实现原理主要基于误分类的损失函数,利用梯度下降算法对损失函数进行极小化。感知机1957年由Rosenblatt提出,是神经网络与支持向量机的基础。

优点:简单易于实现。不需要太高的数学基础与编程技巧。

缺点:线性模型,不能表达复杂函数。

  1. 感知机模型

感知机有如下几何解释:线性方程

                                                         w  *  x + b = 0

对于特征空间R^{n}中的一个超平面S,其中w是超平面的发平面,b是超平面的截距。这个超平面将特征空间划分为两个部分。位于两部分的点(特征向量)分别呗分成正,负两类。因此,超平面S被称为分离超平面(separating hyperplane),如图2.1所示

感知机算法原理及matlab代码实现-统计学习方法学习笔记_第1张图片

 感知机学习,由训练数据集

                                     T={(x_{1}^{},y_{1}^{}),(x_{2}^{},y_{2}^{}),\cdot \cdot \cdot,(x_{n}^{},y_{n}^{})} 

其中,x_{i}\epsilon \chi = R^{n},y_{i}\epsilon ={+1,-1},i=1,2,\cdot \cdot \cdot ,N   ,求得感知机模型即求得模型参数w,b。感知机预测,通过学习得到的感知机模型,对于新的输入实例给出其对应的输出类别。

2.感知机学习算法

      2.1感知机学习算法的原始形式

  感知机学习算法是对以下最优化问题的算法。给定一个训练数据集

                                               T={(x_{1}^{},y_{1}^{}),(x_{2}^{},y_{2}^{}),\cdot \cdot \cdot,(x_{n}^{},y_{n}^{})} 

其中,x_{i}\epsilon \chi = R^{n},y_{i}\epsilon ={+1,-1},i=1,2,\cdot \cdot \cdot ,N,求参数w,b使其为以下损失函数极小化问题的解:

                                              {min_{w,b}}L(w,b)=-\sum_{x\epsilon M }{y_i(w\cdot x_i +b)}^{}

其中M为误分类点的集合。

关于极小化损失函数为什么这么写,你可以这么考虑,当分类点w*x+b结果与yi结果相同时,即分类正确时对极小化函数是正贡献的,而分类点结果与实际分类,结果不同时,即分类不准确时,对于极小化函数时负贡献的。所以损失函数设计成这样是合理的。

感知机算法是以误分类驱动,具体采用随机梯度下降算法:

以下为算法大概步骤:

  1.首先计算损失函数梯度:

                                           \bigtriangledown _wL(w,b)=-\sum_{x_i\epsilon M}{y_ix_i}

                                          \bigtriangledown _bL(w,b)=-\sum_{x_i\epsilon M}{y_i}

其中M为误分类点集合。

  2.随机选取一个误分类点(xi,yi),对w,b进行更新:

                                            w\leftarrow w+\eta y_ix_i

                                            b\leftarrow b+\eta y_i

式中\eta0<\eta \leq 1)是步长,在统计学习中又称为学习率(learning rate)。 这样,通过迭代可以期待损失函数L(w,b)不断减小,直到0.综上所述可以得到最终的感知机算法:

算法(感知机学习算法)

输入:训练集 T={(x_{1}^{},y_{1}^{}),(x_{2}^{},y_{2}^{}),\cdot \cdot \cdot,(x_{n}^{},y_{n}^{})} ,其中x_i\epsilon \chi =R^n,y_i\epsilon \gamma =\left \{ -1,+1 \right \},i=1,2,\cdot \cdot \cdot ,N;学习率\eta \left ( 0<\eta \leq 1 \right );

输出:w,b;感知机模型f\left ( x \right )=sign\left ( w\cdot x+b \right ).

(1)选取初值w_0,b_0;

(2)在训练集中选取数据\left ( x_i,y_i \right );

(3)如果y_i\left ( w\cdot x_i+b \right )\leq 0

                                            w\leftarrow w+\eta y_ix_i

                                            b\leftarrow b+\eta y_i

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

这种学习算法直观上可以理解成:一个点被误分类,但是你根据误分类点调整w,b值使得分力超平面向该误分类点的一侧移动,减少了误分类点与超平面间的距离。如此反复直至超平面越过该误分类点使得其被正确分类。

3.matlab代码实现

matlab代码如下:

function [y1,w,b]= Perceptual_machine(x,y,s,x1,w,b)
%%
%x:训练的数据集。
%y:分类的结果;
%s:学习的速率(0

对书上例题进行函数调用:

clc,clear

x=[3,3;4,3;1,1];
y=[1 1 -1];
s=1;
x1=[2,2];
w0=0;
b0=0;
Perceptual_machine(x,y,s,s,w0,b0)

其中:x为训练集,y为分类结果,s为学习率,x1为待分类数据集,w0,b0为w,b的初始值。观察每次迭代的w与b的结果发现与书中一致。

这里粘贴书中的结果:

感知机算法原理及matlab代码实现-统计学习方法学习笔记_第2张图片

 

你可能感兴趣的:(统计学习笔记,统计学习方法,学习笔记,机器学习,matlab)