机器学习:感知机算法
2014-06-28 21:26
537 查看
所谓感知机,就是二类分类的线性分类模型,其输入为样本的特征向量,输出为样本的类别,取+1和-1二值,即通过某样本的特征,就可以准确判断该样本属于哪一类。顾名思义,感知机能够解决的问题首先要求特征空间是线性可分的,再者是二类分类,即将样本分为{+1,
-1}两类。从比较学术的层面来说,由输入空间到输出空间的函数:
(1)
称为感知机,w和b为感知机参数,w为权值(weight),b为偏置(bias)。sign为符号函数:
(2)
感知机模型的假设空间是定义在特征空间中的所有线性分类模型,即函数集合{f|f(x) = w·x + b}。在感知机的定义中,线性方程w·x + b = 0对应于问题空间中的一个超平面S,位于这个超平面两侧的样本分别被归为两类。
感知机要分类,需要满足的要求是数据集要线性可分,线性可分就是:存在一个模型使得对于数据可以进行正确的分类。
感知机原始算法没有详细介绍(主要介绍对偶问题) ,对偶问题涉及到的理论推到比较多(拉格朗日对偶问题)
对偶形式的基本想法是,将w和b表示为实例
和
的线性组合形式,通过求解其系数而求得w和b。如果说支持向量机的求最优过程使用对偶形式是为了方便引入核函数,那这里的对偶形式是用来做什么的呢?暂且认为是对后面支持向量机的一个铺垫吧,或者是求解这种优化问题的一个普遍解法。
为了方便推导,可将初始值
和
都设为0,据上文,我们对误分类点
通过
来更新w,b,假设我们通过误分类点
更新参数的次数为
次,那么w,b关于
的增量为
和
,为方便,可将
用
来表示,很容易可以得到
(10)
(11)
这里i = 1,2,…,N。当
时,表示第i个样本由于被误分类而进行更新的次数。某样本更新次数越多,表示它距离超平面S越近,也就越难正确分类。换句话说,这样的样本对学习结果影响最大。
算法2
(感知机学习算法的对偶形式)
输入:训练数据集
,其中
,
,i
= 1,2,…,N;学习率
输出:
,b;感知机模型
其中
(1)
,
(2)在训练集中选取样本
(3)如果
(4)转至(2)直到没有误分类样本出现
由于训练实例仅以内积的形式出现,为方便,可预先将训练集中实例间的内积计算出来并以矩阵形式存储(Gram矩阵)
在此用Matlab 实现这个对偶问题的算法
-1}两类。从比较学术的层面来说,由输入空间到输出空间的函数:
(1)
称为感知机,w和b为感知机参数,w为权值(weight),b为偏置(bias)。sign为符号函数:
(2)
感知机模型的假设空间是定义在特征空间中的所有线性分类模型,即函数集合{f|f(x) = w·x + b}。在感知机的定义中,线性方程w·x + b = 0对应于问题空间中的一个超平面S,位于这个超平面两侧的样本分别被归为两类。
感知机要分类,需要满足的要求是数据集要线性可分,线性可分就是:存在一个模型使得对于数据可以进行正确的分类。
感知机原始算法没有详细介绍(主要介绍对偶问题) ,对偶问题涉及到的理论推到比较多(拉格朗日对偶问题)
对偶形式的基本想法是,将w和b表示为实例
和
的线性组合形式,通过求解其系数而求得w和b。如果说支持向量机的求最优过程使用对偶形式是为了方便引入核函数,那这里的对偶形式是用来做什么的呢?暂且认为是对后面支持向量机的一个铺垫吧,或者是求解这种优化问题的一个普遍解法。
为了方便推导,可将初始值
和
都设为0,据上文,我们对误分类点
通过
来更新w,b,假设我们通过误分类点
更新参数的次数为
次,那么w,b关于
的增量为
和
,为方便,可将
用
来表示,很容易可以得到
(10)
(11)
这里i = 1,2,…,N。当
时,表示第i个样本由于被误分类而进行更新的次数。某样本更新次数越多,表示它距离超平面S越近,也就越难正确分类。换句话说,这样的样本对学习结果影响最大。
算法2
(感知机学习算法的对偶形式)
输入:训练数据集
,其中
,
,i
= 1,2,…,N;学习率
输出:
,b;感知机模型
其中
(1)
,
(2)在训练集中选取样本
(3)如果
(4)转至(2)直到没有误分类样本出现
由于训练实例仅以内积的形式出现,为方便,可预先将训练集中实例间的内积计算出来并以矩阵形式存储(Gram矩阵)
在此用Matlab 实现这个对偶问题的算法
% %感知机一种二分类的线性分类模型 % % % %感知机 本算法是根据根据感知机学习算法的对偶形式实现的 %只有当数据集是线性可分时,这个算法才能计算出参数 %当非线性可分,算法会进入死循环 %perceptronTest (dataSet,labels,ital) %dataSet :数据集;labels:标签;ital: 学习率 % function weight = perceptronTest (dataSet,labels,ital) [m,n] = size(dataSet);%数据的个数 gramMatrix = Gram(dataSet); alpha = zeros(1,m); b = 0; flagg = 1; while flagg <= m i = 1; while i <= m temp = labels(i)*(sum((labels.*alpha.*gramMatrix(i,:)))+b); if temp <= 0 % 不满足条件 ,更新参数 alpha(i) = alpha(i) + ital; b = b + ital*labels(i); flagg = 1; i = i - 1; else flagg = flagg +1; end i = i+1; end end for k = 1:m weightTemp(k,:) = alpha(k).*labels(k).*dataSet(k,:); end weight = sum(weightTemp,1); weight =[weight b] %线性模型的权值 与 偏差 end %由于在计算时,会不断的用向量内积,所以先将各个向量内积算出,这样得到的是Gram矩阵 %生成Gram矩阵 % function gramMatrix = Gram(dataSet) [m,n] = size(dataSet); repData = dataSet'; gramMatrix = zeros(m,m); for i = 1:m for j = 1:m gramMatrix(i,j) = sum(dataSet(i,:).*repData(:,j)'); end end end
相关文章推荐
- 机器学习总结2_感知机算法(PLA)
- 机器学习总结(lecture 2)算法:感知机学习算法 (PLA)
- Python机器学习(1)-- 自己设计一个感知机(Perceptron)分类算法
- 【学习笔记】斯坦福大学公开课(机器学习)题外篇:感知机学习算法
- 机器学习入门实战——感知机算法实战Iris数据集
- 机器学习(统计学习方法)7 【感知机学习算法】
- 【机器学习】算法实现感知机与神经元分类器(概念+图+实战)
- 机器学习(二):感知机学习算法
- python 机器学习——从感知机算法到各种最优化方法的应用(python)
- 【机器学习】经典算法详解——感知机(附Python实现)
- 机器学习实战-K-近邻算法
- 轻松看懂机器学习十大常用算法
- 机器学习十大算法---1.线性回归
- 机器学习常见算法分类汇总
- Python3机器学习|Python3入门机器学习--经典算法与应用
- DNS通道检测 国内学术界研究情况——研究方法:基于特征或者流量,使用机器学习决策树分类算法居多
- 招广告算法、机器学习方面的研发工程师,使用 scala
- c 4.5 k-means 算法 机器学习
- 干货 | 上手机器学习,从搞懂这十大经典算法开始
- 机器学习(11.1)--神经网络(nn)算法的深入与优化(1)--介绍