感知机PLA

感知机是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1,-1。感知机学习旨在求出将训练数据进行线性划分的分离超平面。具体介绍如下:

  • 感知机模型
  • 感知机学习策略
  • 感知机学习算法

1 感知机模型

输入空间(特征空间)是Rn输出空间是{+1,-1}

由输入空间到输出空间的函数 f(x)=sign(w.x+b),称为感知机。w为权值,b为偏置。感知器模型的假设空间是定义在特征空间的所有线性分类模型。想求得感知机模型,即需要求w,b。

2 感知机学习策略

假设训练数据集是线性可分的,感知机学习的目的是求得一个能够将正负实例点完全正确分开的分离超平面,为了找出这样的超平面,即确定感知机模型参数w,b,需要确定一个学习策略,即定义损失函数并最小化。

损失函数一个自然选择是误分类点的总数,但这样的损失函数不是参数w,b的连续可导函数,不易优化;损失函数另一个选择是误分类点到超平面S的总距离。

首先写出输入空间任一点x0到超平面S的距离:

其次,对于误分类点(xi,yi)来说,

则误分类点xi到超平面的距离是

则所有误分类点到超平面的总距离是

所以,不考虑||w||,即得到了感知机的损失函数,这个函数就是感知机的经验风险函数。

显然,损失函数是非负的;如果没有误分类点,损失函数为零,而且,误分类点越少,误分类点离超平面越近,损失函数值越小。

感知机学习的策略是在假设空间中选取使得损失函数最小的模型参数w,b。

3 感知机学习算法

感知机学习问题转化为求解损失函数的最优化问题,这里最优化方法是随机梯度下降法。

任意选取一个超平面用梯度下降方法不断极小化目标函数,极小化的过程不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。

损失函数的梯度如下:

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

式中η(0<η<=1)是步长,又称学习率。

整个过程如下:

 

 

 

 

 

 

 

感知机学习算法由于采用不同的初值或选取不同的误分类点,解可能不同。

通过一个例子,具体实践代码如下:

import numpy as np
import random

rows = [[3,3,1],[4,3,1],[1,1,-1]]

#rows为训练样本,n为迭代次数,r为学习率
def pla(rows,n=100,r=1):
    #初始化w,b
    w = [0.0]*(len(rows[0])-1)
    b = 0.0
    
    for i in xrange(n):
        row = rows[random.randint(0,len(rows)-1)]#随机选择一行
        x = np.array(row[0:-1])
        justice = row[-1]*(sum(w*x)+b)
        if justice <= 0:
            w += r*row[-1]*x
            b += r*row[-1]
    return w,b

print pla(rows)

 

posted @ 2015-09-22 20:40  走那条小路  阅读(207)  评论(0编辑  收藏  举报