本微推是基于李航老师《统计学习方法》的总结,也参考了很多大佬的笔记~
感知机(perceptron)是Rosenblatt在60年代提出的第一个机器学习模型。尽管比较简单,而且有局限性,但它是后续学习“支持向量机”的基础。本章有两个值得注意的地方:一是对偶形式的理解,二是算法收敛性的理解,这些地方都能和“支持向量机”联系起来。
一、模型的数学形式与图像表示数学形式感知机模型非常简单,输入空间(特征空间)为输出空间为决策函数为其中为常数符号函数
图像表示
上图为时的模型图像。图中的直线为,即。注意不要和直线函数混淆,因为上图是三维图像在二维平面上的表示,其输出为离散值,因此用"圆点"和"交叉"表示。
感知机的作用是在输入空间中找到一个“分离超平面"(在上图退化为直线),将"线性可分"数据集一分为二,此超平面又称"分界面"
下面看看如何表示输入空间中任一点到超平面的距离:
先看输入空间为平面的情况,其中点位于直线法向量的另一侧(图中红点),设在直线上的投影为记作
两边同时点乘
由于
即
因此图中到的距离为
在不考虑点与法向量位置的情况下,也可以记作
线性可分与线性不可分
以上述二维的输入空间为例,线性可分的数据集是十分罕见的,只要稍微加入一个“异常点”,例如图中的红色“圆点”,就无法用线性模型进行分类了。
更有甚者,不同类型的点以椭圆或三次曲线为边界都是有可能的,这样的数据集都是“非线性可分的”。
对于非线性可分数据集的分类问题,我们在第7章“支持向量机(SVM)”进行深入讨论。
二、策略与算法风险函数
如何验证样本点是否分类正确?对于某分离超平面分类正确:
设超平面S的误分类点集合为M,则误分类点到超平面的总距离为(误分类点需增加负号表示距离我们的目标是使得误分类点总距离最小,由于为常数,对求最小值没有影响,因此不考虑
于是将感知机“经验风险函数"定义为
算法Nabla算子
相当于求"梯度"
注意:由于因此
设误分类点的集合M固定,经验风险函数的梯度为
算法的原始形式:
对于训练集T,输入空间(特征空间)为输出空间为,学习率为感知机模型
(1)选取初值(2)在训练集中选取一个数据(3)如果即分类错误,则将参数更新为
(4)转至(2)直至训练集中没有误分类点
算法的对偶形式关于为什么要有对偶形式可以参考:如何理解感知机学习算法的对偶形式?希望能解答大家疑惑。
对偶形式的目的是,将参数w和b表示为和的线性组合,即
注意(关于对偶形式的理解):
此时参数和共n+1个变量)被共N个变量)取代。当n+1N时,对偶模型的复杂度变低了,实现了对"参数空间"的降维。
另外,在SVM中是参数和的约束条件,如果建立起与参数和的线性关系,则可以将多重极值转化为单重极值求解。这可以说是SVM的关键一步。
感知机的对偶模型:
步骤:
(1)即均为0
(2)在训练集中选取数据
(3)如果或其中为一个实数,可预先在Gram矩阵中算好(对应)。因此判别式至取决于通过上述判别式发现训练集中第i个点为“误分类",则更新对应的系数
(4)转至(2)直到没有误分类点
(5)求w和得到原始模型
三、算法收签性书中定理2.1(Novikoff)证明了“线性可分"数据集在感知机算法作用下的收剑性,书中已给出十分详细的推导过程。我们看看如何理解最后的结论:
其中,为误分类次数,即感知机算法的迭代次数。上式给出了迭代次数的上界。
和表示什么?
由于为已知"分界面"
因此根据点到超平面的距离公式,实际上是数据点到“分界面"的最短距离。
表示离原点最远的数据点的距离。
表示数据越分散,找到“分界面"的难度越大,需要的迭代次数就越多;而则表示,离"分界面"最近的点对于迭代次数影响最大,也就是数据集里最重要的点,此结论推广后形成了"支持向量"的概念。
四、code实例拿出iris数据集中两个分类的数据和[sepallength,sepalwidth]作为特征
_%matplotlibinline数据线性可分,二分类数据=datadefsign(self,x,w,b):y=(x,w)+breturny'PerceptronModel!'
x_points=(4,7,10)y_=-([0]*x_points+)/[1](x_points,y_)(data[:50,0],data[:50,1],'bo',color='blue',label='0')(data[50:100,0],data[50:100,1],'bo',color='orange',label='1')('sepallength')('sepalwidth')()scikit-learn实例
_modelimportPerceptronclf=Perceptron(fit_intercept=False,max_iter=1000,shuffle=False)(X,y)'''Perceptron(alpha=0.0001,class_weight=None,early_stopping=False,eta0=1.0,fit_intercept=False,max_iter=1000,n_iter_no_change=5,n_jobs=None,penalty=None,random_state=0,shuffle=False,tol=0.001,validation_fraction=0.1,verbose=0,warm_start=False)'''
[[16.3-24.2]][0.]
x_ponits=(4,8)y_=-(_[0][0]*x_ponits+_)/_[0][1](x_ponits,y_)(data[:50,0],data[:50,1],'bo',color='blue',label='0')(data[50:100,0],data[50:100,1],'bo',color='orange',label='1')('sepallength')('sepalwidth')()在这里插入图片描述
习题习题2.1Minsky与Papert指出:感知机因为是线性模型,所以不能表示复杂的函数,如异或(XOR)。验证感知机为什么不能表示异或。
解答:
对于异或函数XOR,全部的输入与对应的输出如下:
=[1,1,-1,-1]x2=[1,-1,1,-1]y=[-1,1,1,-1]x1=(x1)x2=(x2)y=(y)data=_[x1,x2,y]data=(data,index=None,columns=['x1','x2','y'])()positive=[data['y']==1]negative=[data['y']==-1](-2,2)(-2,2)([-2,-1,0,1,2])([-2,-1,0,1,2])("x1")("x2")(positive['x1'],positive['x2'],"ro")(negative['x1'],negative['x2'],"gx")()显然感知机无法使用一条直线将两类样本划分,异或问题是线性不可分的。
习题2.2模仿例题2.1,构建从训练数据求解感知机模型的例子
_modelimportPerceptronimportnumpyasnpX_train=([[3,3],[4,3],[1,1]])y=([1,1,-1])perceptron_model=Perceptron()perceptron_(X_train,y)print("w:",perceptron__,"\nb:",perceptron__,"\n")result=perceptron_(X_train)print(result)'''w:[[1.0.]]b:[-2.][11-1]'''习题2.3
证明以下定理:样本集线性可分的充分必要条件是正实例点所构成的凸壳与负实例点所构成的凸壳互不相交。
解答:
第1步:首先给出凸壳与线性可分的定义,定义如下:
凸壳
定义1:设集合S是由R中的k个点所组成的集合,即S定义S的凸壳conv为:
说明:凸壳是一个集合,对于所有可能的只要满足那么即为凸壳中的元素,凸壳可以用二维的图形表示如下:
线性可分定义2:给定一个数据集
其中如果存在某个超平面S能够将数据集的正实例点和负实例点完全正确划分到超平面的两侧,即对所有的正实例点即的实例i,有,对所有的负实例点即的实例i,有,则称数据集T线性可分,否则称数据集T线性不可分。
第2步:证明必要性:线性可分书=凸壳不相交
假设数据集T中的正例点集为,的凸壳为conv负实例点集为,的凸壳为conv若T是线性可分的,则存在一个超平面:
能够将和完全分离。假设对于所有的正例点,有:
易知若conv和conv相交,即存在某个元素s,同时满足和s对于中的元素有
因此w・同理对于S_中的元素有w・s
由于s且s则w且w・s可推出矛盾。
因此,和conv必不相交。从而必要性得证。
第3步:证明充分性=凸壳不相交刃线性可分
假设数据集T中的正例点集为S的凸壳为conv负实例点集为S的凸壳为且conv与Conv不相交。定义两个点x_,x2的距离为
定义conv和conv距离为
设且dist则对于任意正例点x有dist
同理,对所有的负例点x有dist。存在超平面
其中
则对于所有的正例点x(易知・因此若属于正例点,则令
若dist即线性不可分则dist那么dist推出矛盾,因此dist即线性可分,充分性得证。
补充:用反证法证明dist
证明:假设dist则存在
令则
易知t先证明t可以将x,看做为空间中的三个不同的点,三条边的长度分别为dist
如上面可知dist
根据三角形的大边对应大角这一特性,很容易可以看出x_与之间的夹角小于90度,因此t。那么又因为x必在conv内部,故推出矛盾,所以dist
参考自:
黄海广博士
datawhale