机器学习五 -- 机器学习的“Hello World”,感知机

感知机是二类分类的线性分类模型,是神经网络和支持向量机的基础。其输入为实例的特征向量,输出为实例的类别,取+1和-1二值之一,即二类分类。感知机对应于输入空间(特征空间)将实例划分为正负两类的分离超平面,属于判别模型。我们对于感知机的学习旨在求出将训练数据进行线性划分的分离超平面,为此目标,我们需要导入基于误分类的损失函数,利用后文所提到的梯度下降法对损失函数进行极小化,求得感知机模型。

感知机模型

对此我们都知道了什么叫感知机了。这里给出一个比较数理化的定义:假设输入空间(特征空间)是XєRn,输出空间是Y={+1,-1}。输入xєX表示实例的特征向量,对应于输入空间的点,输出yєY表示实例的类别。由输入空间到输出空间的如下函数

f(x)=sign(w*x+b)

称为感知机。其中,w和b为感知机模型参数,wєRn叫做权值或权值向量,bєR叫做偏置,w·x表示w和x的内积,sign是符号函数,即为

感知机有以下几何解释:线性方程w·x+b=0对应于特征空间Rn的一个超平面S,其中w是超平面的法向量,b是超平面的截距。这个超平面将特征空间划分为两个部分,位于两部分的点分别被称为正、负两类。因此,超平面S即被称为分离超平面。

感知机学习策略

给定一个数据集合T={(x1,y1),(x2,y2),……,(xn,yn)},其中xiєX=Rn,yiєY={+1,-1},i=1,2,3,,,,n,如果存在某个超平面S:w·x+b=0能够将数据集的正实例点和负实例点完全正确的划分到超平面的两侧,即对所有yi=+1的实例点,有w·xi+b>0,对所有yi=-1的实例点,有w·xi+b<0,则称数据集T为线性可分数据集;否则,称数据集T为线性不可分。

刚才我们有提到,我们感知机学习的目标就是求得一个能够将训练集正实例和负实例点完全正确分开,为了找到这样一个分离超平面,我们需要定义损失函数并将损失函数极小化。

给定一个数据集合T={(x1,y1),(x2,y2),……,(xn,yn)},其中xiєX=Rn,yiєY={+1,-1},i=1,2,3,,,,n,感知机sign(w·x+b)学习的损失函数定义为

L(w,b) = -∑yi(w·xi+b)(xiєM)

其中M为误分类点的集合。这个损失函数就是感知机学习的经验风险函数。

想一想:是不是可以肯定损失函数L(w,b)是非负的,为什么?

感知机学习算法

感知机学习算法转化为求解损失函数式子的最优化问题,下面简单介绍一下两个具体的算法:原始形式和对偶形式。

感知机学习的原始形式

感知机学习算法是误分类驱动的,如果我们人类逼格够高,给出任意一个线性可分数据集,可以马上脑补出一个将其数据集完全正确分类的模型,那么就用不着感知机学习算法了。所以,我们需要用算法来尽可能的优化函数来达到期望目标。其方法具体采用了随机梯度下降法。首先,任意选取一个超平面w0,b0,然后用梯度下降法不断的极小化目标函数,极小化过程中不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其下降。

输入:训练数据集T={(x1,y1),(x2,y2),……,(xn,yn)},其中xiєX=Rn,yiєY={+1,-1},i=1,2,3,,,,n;学习率η(0<η<=1);

输出:w,b;感知机模型f(x)=sign(w·x+b)。

(1)选取初值w0,b0;

(2)在训练集中选取数据(xi,yi)

(3)如果yi(w·xi+b)<=0

w ← w+ηyixi   b ← b+ηyi

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

感知机学习的对偶形式

对偶形式的基本想法是:将w和b表示为实例xi和标记yi的线性组合的形式,通过求解其系数而求得w和b。

刚才说到如果yi(w·xi+b)<=0,那么w ← w+ηyixi   b ← b+ηyi

假设修改了n次,则w,b关于(xi,yi)的增量分别是αiyixi和αiyi,这里αi=niη。

输入:训练数据集T={(x1,y1),(x2,y2),……,(xn,yn)},其中xiєX=Rn,yiєY={+1,-1},i=1,2,3,,,,n;学习率η(0<η<=1);

输出:α,b:感知机模型f(x)=sign{∑αjyjxj·x+b}(1<=j<=N)

其中α=(α1,α2,,,αn)T

(1)α ← 0 , b←0

(2)在训练集中选取数据(xi,yi)

(3)如果yi(∑αjyjxj·x+b(1<=j<=N))<=0

ai ← ai+η  b ← b+ηyi

(4)转至(2)直到没有误分类数据。

最新文章

  1. 魔术常量__DIR__
  2. C#实现队列
  3. LeetCode Remove Duplicate Letters
  4. wen7安装oracle 11g出现&quot;未找到文件 E:\development_tools\database\oracle\install_d\dbhome\owb\external\oc4j_applications\applications\WFMLRSVCApp.ear&quot;
  5. Java的外部类和内部类+静态变量和非静态变量的组合关系
  6. malloc、calloc、realloc的区别
  7. [Android] 更改关联的源码路径
  8. ionic打包项目,运行时报错A problem occurred configuring root project &#39;android&#39;。。。
  9. Hibernate的五个主要接口
  10. 使用LINGO来解决0/1背包算法问题
  11. A Reliability-Aware Network Service Chain Provisioning With Delay Guarantees in NFV-Enabled Enterprise Datacenter Networks
  12. 「CodeForces - 717E」Paint it really, really dark gray (dfs)
  13. SpringMVC知识点
  14. keepalived实现高可用
  15. sparse-table模板
  16. BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集
  17. Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
  18. canvas 笔记整理
  19. 使用 DES 算法对数据加密
  20. centOS上的基础文件操作

热门文章

  1. JavaScript 的数据类型 相关知识点
  2. appt查看apk信息
  3. Winform开发框架之权限管理系统改进的经验总结(1)-TreeListLookupEdit控件的使用
  4. 造完美的go开发环境
  5. innerHTML和outerHTML有什么区别
  6. python flask应用部署
  7. css中的定位和框模型问题
  8. bootstrap dialog自行控制窗口的关闭
  9. 推荐两个很好用的javascript模板引擎
  10. ADO.NET 实体类和数据访问类