机器学习-李航-统计学习方法学习笔记之感知机(2)

机器学习-李航-统计学习方法学习笔记之感知机(1)中我们已经知道感知机的建模和其几何意义。相关推导也做了明确的推导。有了数学建模。我们要对模型进行计算。

感知机学习的目的是求的是一个能将正实例和负实例完全分开的分离超平面。也就是去求感知机模型中的参数w和b.学习策略也就是求解途径就是定义个经验损失函数,并将损失函数极小化。我们这儿采用的学习策略是求所有误分类点到超平面S的总距离。假设超平面s的误分类点集合为M,那么所有误分类点到超平面S的总距离为

显然损失函数L(w,b)是非负的,如果没有误分类点,那么损失函数的值就是0,因为损失函数的定义就是求误分类点到平面的距离,误分类点都没有,那么损失函数的值肯定是0.

感知机学习算法是误分类驱动,采用随机梯度下降法。首先,任意选取一个超平面w,b,然后极小化目标函数。相关定义在作者的书中都有给出。不在啰嗦了。

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

对例子2.1做详细推导。作者其实已经给出了推导。对于很多基础知识扎实的人来说已经足够了。但对于一些大学期间高数忘了差不多的我们来说,理通作者思路也要仔细手写推导一下。

解  构建最优化问题:,按照算法2.1求解w,b,学习η=1

取初值w0=(0,0)T (这里w0是初始的法向量,如果是三维空间应该是(0,0,0)T,这儿二维平面就够用了w0=(0,0)T。所以,w0=(0,0))

b0=0.

对x1=(3,3)T,因为是正分类点,所以y1=1带入分离 超平面公式

y1(w0•x1+b0)

               =  1((0,0)•(3,3)T+0)       --------公式1.0

其中T代表矩阵的转置,也就是把(0,0)竖过来。同时这儿的(0,0)T和(3,3)T也是向量的表示。中间的圆点代表求两个向量的内积。我们看一下向量内积的定义

在线性代数中有对此的明确定义。所以(0,0)T和(3,3)的内积就为0*3+0*3=0.

所以公式1.0的值为0.因为要把所有的正实例和负实例分开,这儿该正实例在分离超平面上,显然不符合要求。所以我们要更新w,b.

w1=w0+y1x1 这儿更新w法向量的意义是移动分离超平面的方向,对于二维空间就是更改直线的斜率,更新b就是移动斜线的截距。

我们首先把这儿几个实例点表示出来x1y1=((3,3)T,1 )     x2y2=((4,3)T,1 )    x3y3=((1,1)T,-1 )

求得w1=(0,0)T+(3,3)T=(3,3)T      b1=b0+y1=1

所以线性模型为

因为我们使用函数间隔来衡量是否被正确分类的,也就是在线性模型前面加上参数yi 因为正确分类时候yi=1,误分类的时候yi=-1,所以可以两者的乘积只要大于0就可以表示正确分类了,不需要更新函数参数。小于等于0就表示要更新参数。

新的线性模型对于点x1y1=((3,3)T,1 )     x2y2=((4,3)T,1 )显然都大于0,也就是可以被正确分类。对于  x3y3=((1,1)T,-1 ),带入后函数间隔小于0代表函数未被正确分类。所以需要更新函数。

w2=w1+y1x1 

对于感知机求解的一般形式,很简单,仔细看书,了解几个数学概念就很容易明白。不在赘述。

感知机学习算法的收敛性

大体浏览了下,感觉不是很重要,也不是很难理解,可能是我没自己手动推导一下的原因。想研究的可以直接看作者的推导。

感知机学习算法的对偶形式

下面是作者书中给出的例子,但是没有具体的推导过程。

我们推导如下。从原始形式中我们可以知道。w的更新过程。

第一次更新是x1y1=((3,3)T,1 ) 点不能是函数模型大于零,所以    w1=w0+x1y1 

第二次更新是x3y3=((1,1)T,-1 )点不能使其大于零,所以    w2=w1+x3y3

第三次更新是x3y3=((1,1)T,-1 )点不能使其大于零,所以    w3=w2+x3y3

第四次更新是x3y3=((1,1)T,-1 )点不能使其大于零,所以    w4=w3+x3y3

第五次更新是x1y1=((3,3)T,1 )点不能使其大于零,所以     w5=w4+x1y1

第六次更新是x3y3=((1,1)T,-1 )点不能使其大于零,所以    w6=w5+x3y3

第七次更新是x3y3=((1,1)T,-1 )点不能使其大于零,所以    w7=w6+x3y3

然后我们得到

从上面可以总结出w7=w6+x3y3

w7=w5+x3y3 +x3y3

        w7=w4+x1y1+x3y3 +x3y3

        w7=w3+x3y3+x1y1+x3y3 +x3y3

        w7=w2+x3y3+x3y3+x1y1+x3y3 +x3y3

        w7=w1+x3y3 +x3y3+x3y3+x1y1+x3y3 +x3y3

        w7=w0+x1y1 +x3y3 +x3y3+x3y3+x1y1+x3y3 +x3y3

所以我们可以得出最终w7的值为两次x1y1 +五次x3y3

也就等于在对偶形式中的

同理也可以得出b,例2.2中的误分条件我们还可以写成如下形式。

从上面的公式中对比作者给出的求解迭代过程。我们应该可以很容易理解对偶形式的感知机算法,推导后发现只是换了一个简便的计算形式。至此关于统计学习方法中的感知机篇章结束。

可参考机器学习-李航-统计学习方法学习笔记之感知机(1)

本文地址:http://www.cnblogs.com/santian/p/4351756.html

博客地址:http://www.cnblogs.com/santian/

转载请以超链接形式标明文章原始出处。

时间: 2024-12-26 10:41:20

机器学习-李航-统计学习方法学习笔记之感知机(2)的相关文章

机器学习-深度学习之李航-统计学习方法学习笔记之感知机

感知机应该是机器学习里面最简单的模型了.读一遍文章也能理解作者想表达的意思.因为以前像梯度下降,多项式拟合,神经网络都在Andrew Ng的公开课上看过了.但是真正关于书中的公式却不怎么理解.一些简单的作者也没有推导.毕竟这是机器学习,不是微积分,或者线性代数,或者概率论.微积分,概率论,线性代数是 大学期间的基础课程.很多人应该都学过. 关于感知机的几何模型. 感知机有如下几何解释:线性方程: w•x+b=0 对应于特征空间Rn中的一个超平面S,其中w是超平面的法向量,b是超平面的截距. 我们

统计学习方法读书笔记:感知机

什么是感知机 二分类的线性分类模型,输入是实例的特征向量,输出是实例的类别,取-1和+1两值. 感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型. 感知机是神经网络和支持向量机的基础. 模型的使用条件 数据集需要是线性可分的,同时,如果数据集是线性可分的话,经过一定的迭代次数一定可以得到一个感知机模型,将正负例分离开. 损失函数的定义 一个自然的选择是误分类点的总数,但是这样的损失函数不是参数w和b的连续可导函数,不易于优化. 感知机所采用的损失函数为误分类点到超

《统计学习方法》笔记

书籍ISBN:978-7-302-27595-4 第3章 k近邻法 P37 3.1节 k近邻算法 k近邻算法简单.直观:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类.算法描述如下: 输入:训练数据集 其中xi是n维实数空间上的实例特征向量.yi∈{c1, c2,..., ck}为实例的类别,i = 1, 2,..., N:新输入的实例特征向量x. 输出:实例x所属的类y. (1)根据给定的距离度量,在训练集T

《机器学习实战》菜鸟学习笔记(一)

<机器学习实战>终于到手了,开始学习了.由于本人python学的比较挫,所以学习笔记里会有许多python的内容. 1. python及其各种插件的安装 由于我使用了win8.1 64位系统(正版的哦),所以像numpy 和 matploblib这种常用的插件不太好装,解决方案就是Anaconda-2.0.1-Windows-x86_64.exe 一次性搞定. 2.kNN代码 1 #-*-coding:utf-8-*- 2 from numpy import * 3 import operat

【机器学习 第2章 学习笔记】模型评估与选择

1.训练误差:学习器在训练集上的误差,也称“经验误差” 2.泛化误差:学习器在新样本上的误差 显然,我们的目标是得到在新样本上表现更好的学习器,即泛化误差要小 3.过拟合:学习器把训练样本学的太好了,导致泛化性能下降(学过头了...让我联想到有些人死读书,读死书,僵化,不懂得变通和举一反三) 原因:学习能力过于强大,把一些不太一般的特性也学了进来 针对措施:不好解决,是机器学习面临的关键障碍 4.欠拟合:就是连训练集都没学好,更别说泛化了(有点管中窥豹,盲人摸象的意思). 原因: 学习能力低下

[matlab]机器学习及SVM工具箱学习笔记

机器学习与神经网络的关系: 机器学习是目的,神经网络是算法.神经网络是实现机器学习的一种方法,平行于SVM. 常用的两种工具:svm tool.libsvm clear; N = 50; n=2*N; randn('state',6); x1 = randn(2,N) y1 = ones(1,N); x2 = 5+randn(2,N); y2 = -ones(1,N); figure; plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.'); axis([

分组统计查询(学习笔记)

查询出公司每个月支出的工资总和 --查询出公司每个月支出的工资总和 SELECT SUM(sal) FROM emp; 查询出公司的最高工资,最低工资和平均工资 --查询出公司的最高工资,最低工资和平均工资 SELECT MAX(sal),MIN(sal),ROUND(AVG(sal),2) FROM emp; 统计出公司最早雇佣和最晚雇佣的雇佣日期 --统计出公司最早雇佣和最晚雇佣的雇佣日期 SELECT MIN(hiredate) 最早雇佣日期 , MAX(hiredate) 最晚雇佣日期

统计学习方法之第二章感知机

假设训练数据线性可分,那么感知机模型如下: f(x)=ω?χ+b这个超平面可以用来分割平面 不考虑系数,那么感知机的损失函数就可以定义为

《机器学习实战》菜鸟学习笔记(三)决策树

老规矩,Talk is cheap, show me your code. #-*-coding:utf-8-*- from math import log def calcShannonEnt(datsSet): #长度 numEntries = len(dataSet) #字典统计 labelCounts = {} #遍历特征 for featVec in dataSet: #最后一维特征(分类) currentLabel = featVec[-1] #如果不在字典中,则添加进字典 #可以写