统计学习方法感知机模型为什么不考虑w

《统计学习方法》第二章&感知机
最近又重新看起了本专业的书,但是发现,两年过去了,数学分析、线性代数、概率论什么的都忘的七七八八了,这本书基本上讲的是统计学习各种方法的证明过程和算法实现。由于大学数学的内容忘得一干二净,所以看起来还是比较吃力的。所以我第一遍的目标就是看懂基本逻辑,对于证明方法就不去深究了。(感叹一下,想当初我算是专业里面学的最好的了,数学课门门都是90多分,没想到还是忘得一干二净啊~~哈哈哈)
感知机模型是什么?
感知机模型的输入空间是可离散可连续的的特征空间,特征空间可以无限大;
输出空间是离散的{-1,1}
最终目的是找到从输入空间到输出空间的一个函数,用几何来解释就是找到一个平面使得输入空间的所有特征向量都被(最大程度正确的)分为两类
感知机模型是线性分类模型,属于判别模型
感知机的学习策略是什么?
学习策略设立的目的是能够求的平面的w,b参数,所以应该是w,b的连续可导函数,所以,书本用的是误分点到平面的距离之和。
感知机的算法是什么?
1.原始形式:
输入:训练集:线性可分数据集T
输出:w,b感知集模型:一个超平面
STEP1:随机取初始值(初始值对最后结果有影响,不通的初始值可能导致不同的解,所以感知机有多个解)
STEP2:在训练集中随机选取某个训练对(Xi,Yi)
STEP3:如果存在误分点,就要用这个(Xi,Yi)对目前的w,b进行优化
STEP4:反复2-3,直到没有误分点
之后可能证明了在训练集线性可分时,感知机学习算法收敛(就是有解的);在训练集线性不可分时,感知机学习算法不收敛。
2.对偶形式:
输入:训练集:线性可分数据集T
输出:A,b感知集模型:一个超平面(其中w=AiYiXi)
STEP1:A=0,b=0(初始值)
STEP2:在训练集中随机选取数据对(Xi,Yi)
STEP3:如果有误分点,则用N步长调整A和b
STEP4:反复2-3,直到没有误分点
对偶和原始式的区别:对偶式的输出是A,b,其中A、xi、yi和w线性相关,所以对偶式的本质是通过固定的步长不断试出最优的A,那为什么不直接设置某个步长调整w呢?这个书里面没有回答,我也想不出来,我猜是因为直接试w的效果不好?或者直接试w的话,训练数据就用不上了?原始式的输出是w,b,本质是通过数据对(Xi,Yi)对w和b进行调整
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。统计学习方法笔记(二)感知机
统计学习方法笔记(二)感知机
感知机于1957年由Rosenblatt提出,是一种线性分类模型,属于判别模型,直接学习判别函数,是神经网络和支持向量机的基础。
对于感知机的学习推导首先要知道他的模型是什么,然后是学习策略(损失函数),最后是学习算法。
1.&&&&感知机的模型(假设空间):
其中符号函数为:
2.&&&& 感知机的学习策略(损失函数):
首先超平面为:
点到超平面的距离(几何间隔)为:
感知机的学习策略是误分类驱动的,当误分类的点的个数为零那么感知机的模型也就收敛了。
所以对于误分类的点有:
所以误分类的点到超平面的距离就可以表示为:
那么所有的被误分类的点到超平面的距离之和为:
其中M为被误分类点的集合。
由于感知机模型只是寻求一个超平面来将两类点分开,而不是像支持向量机那样需要找到一个最优的点,所以为了简单,去掉||w||来得到感知机的损失函数:
理论上,感知机的损失函数应该是误分类的点的个数的度量,但是由于它对于变量不是连续可导的,因此,实际中我们使用以上这个误分类点的距离之和来作为度量,此时L(w,x)对w和x是连续可导的。
3.&&&& 感知机的学习算法:
对于感知机的损失函数的优化,使用的是随机梯度下降的方法。对模型的求解变成了对目标函数的优化问题:
随机梯度下降法的梯度计算:
随机梯度下降算法每次从误分类的点中挑选一个点,所以权值和偏置的更新方式为:
其中是步长。这样通过不断的迭代最终能够实现损失函数为0.
学习算法流程为:
由于在计算的过程中选取不同的初值和不同的误分类点都会导致解的不同。但是由novikoff定理可以得到只要数据是线性可分的,最终,模型都是收敛的。且误分类的次数满足:
&&&&&&&&&&&&&&&
对偶形式的感知机学习算法:
为了更加的易于计算,提出了感知机学习算法的对偶形式。
因为 &如果设置w和b的初始值都是0的话,那么最终的优化出来的w为:
,其中 ,如果步长为1,那么 则为第i个点被误分类的次数
因此,感知机对偶算法的模型为:
此时需要求出的变量变成了α和b
权值更新变成了:
对偶形式的训练样本都是以内积的形式出现的,因此可以预先计算出来并以矩阵的形式存储起来,这个矩阵被称为gram矩阵:
我的热门文章
即使是一小步也想与你分享《统计学习方法》-感知机笔记和python源码
《统计学习方法》-感知机笔记和python源码
统计学习方法基于python算法实现
写在前面:最近正在学习机器学习,为了养成好的习惯,就按章节做了笔记并用python实现。文章中必不可少出现错误,还请大家谅解。写出来是为了激励自己努力学习,可以写出更多的东西和大家分享学习心得和体会。
感知机(perceptron)
感知机是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1。
例如,人们总是可以轻而易举的分辨出橘子和苹果,但机器怎么分辨出橘子和苹果呢?所以人们提出了感知机这个线性分类模型。就拿这个例子来说,为了成功地分辨出苹果和橘子,机器需要输入量,包括重量、光滑度、颜色和形状等特点,将这些特点组成一个向量,就是特征向量。分类结果只包括橘子和苹果,这些结果就是类别,在机器中用+1和-1来表示。
机器通过对特征向量计算,经行判断。但各个特征占的权重各不相同,比如,对苹果和橘子来说,颜色这个特征就比较明显,苹果偏向红色而橘子偏向橘黄色,所以颜色特征权重应该稍大。特种明显的权重应该较大,特征不明显的权重较小。所以在感知机中为每一个特征分配了一个权重值w。有时加上权重依然分辨不出结果,就需要加上偏置bias。
初始化的感知机针对特定问题的适应度不够,错误率很高,所以需要一组已知结果的训练集,(x,y)。通过训练,改变的模型中的权重值和偏置,降低分类的错误率。
那么通过训练,该如何改变权值和偏置呢?
梯度下降法,具体的推导公式可以google。但其思想就是,总是朝着负方向改变,直到找到极小值。初中数学中,对一个函数求导可以得到函数在某一点的斜率k(表示函数的增长速率,朝着正方向改变),如果我们将斜率取负号-k,那么就得到了朝着负方向增长的速率。在感知机中定义了损失函数,为了得到适当的权值和偏置,采取的策略是损失函数极小化。简单的,我们将函数的最大值比作山峰,将极小值比作谷底,解比作人。那么极小化,就是使人总是朝向谷底移动,移动的方向就是梯度的负方向。
感知机这部分之知识在神经网络中也有提到。
下面是一些相关公式。
分类模型:
分离超平面:
策略:极小化损失函数
在三维空间内,点到面距离定义为:
对于误分类数据来说:
不考虑,损失函数定义为:& &
感知机学习算法
损失函数对w的梯度为:
损失函数对b的梯度为:
梯度指向使函数值增大,因此w的变化方向应是梯度的反方向,使得函数值下降。偏置b也是一样的。
其中 为学习速度。
判定条件:
输入:训练数据集,学习速度
输出:权值w和偏置b,感知机模型
(1)选取初值
(2)在训练数据集中选取数据
(4)转至(2),直至训练集中没有误分类点。
---------------------------------------------------分割线--------------------------------------------------
感知机学习算法的对偶性
将判定条件中的w展开:
其中 为对应的学习速率
将判定公式展开,针对每一个
若成立,则更新:
内积,可以提前算出来内积,并以矩阵存储。称为Gram矩阵。
针对对偶性,可以对原始框架经行修改。
输入:训练数据集,学习速度
输出: ;感知机模型
(1)&初始 等于0
(2)在训练数据集中选取数据
则更新,,
(4)转至(2),直到没有误分类点。
最后计算权值w,。
----------------------------------------------分割线--------------------------------------------------
python源码
#__author__ = 'altaman'
#coding = utf-8
import numpy as np
import matplotlib.pyplot as plt
class showPicture:
def __init__(self,data,w,b):
self.b = b
self.w = w
plt.figure(1)
plt.title('Plot 1', size=14)
plt.xlabel('x-axis', size=14)
plt.ylabel('y-axis', size=14)
xData = np.linspace(0, 5, 100)
yData = self.expression(xData)
plt.plot(xData, yData, color='r', label='y1 data')
plt.scatter(data[0][0],data[0][1],s=50)
plt.scatter(data[1][0],data[1][1],s=50)
plt.scatter(data[2][0],data[2][1],marker='x',s=50,)
plt.savefig('2d.png',dpi=75)
def expression(self,x):
y = (-self.b - self.w[0]*x)/self.w[1]
def show(self):
plt.show()
class perceptron:
def __init__(self,x,y,a=1):
self.x = x
self.y = y
self.w = np.zeros((x.shape[1],1))
self.b = 0
self.a = 1
def sign(self,w,b,x):
result = 0
y = np.dot(x,w)+b
return int(y)
def train(self):
flag = True
length = len(self.x)
while flag:
for i in range(length):
tmpY = self.sign(self.w,self.b,self.x[i,:])
if tmpY*self.y[i]&=0:
tmp = self.y[i]*self.a*self.x[i,:]
tmp = tmp.reshape(self.w.shape)
self.w = tmp +self.w
self.b = self.b + self.y[i]
if count == 0:
flag = False
return self.w,self.b
data = [[3,3],[4,3],[1,1]]
xArray = np.array([3,3,4,3,1,1])
xArray = xArray.reshape((3,2))
yArray = np.array([1,1,-1])
#感知机计算权值
myPerceptron = perceptron(x=xArray,y=yArray)
weight,bias = myPerceptron.train()
picture = showPicture(data,w=weight,b=bias)
picture.show()
实验结果如下图:
从上图可以看到,分割面即超平面。
我的热门文章
即使是一小步也想与你分享《统计学习方法》——感知机与支持向量机
《统计学习方法》——感知机与支持向量机
机器学习算法
模型是所有函数的假设空间,策略是模型选择标准,方法是选择最优模型的算法。其中模型是输入变量的线性函数,策略用损失函数、风险函数度量。损失函数度量一次预测好坏,(0-1损失函数,平方损失函数,绝对损失函数,对数损失函数),风险函数度量平均预测好坏(经验风险,结构风险)。求支持向量机的最优解,可以理解为求损失函数极小化问题的最优解。
几何间隔。几何间隔和函数间隔的关系是&。
我的热门文章
即使是一小步也想与你分享《李航:统计学习方法》笔记之感知机 - 龙在天涯 - 博客频道 - CSDN_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
《李航:统计学习方法》笔记之感知机 - 龙在天涯 - 博客频道 - CSDN
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

 

随机推荐