您的位置:首页 > 其它

机器学习:感知机算法

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 实现这个对偶问题的算法

%
%感知机一种二分类的线性分类模型
%
%
%
%感知机  本算法是根据根据感知机学习算法的对偶形式实现的
%只有当数据集是线性可分时,这个算法才能计算出参数
%当非线性可分,算法会进入死循环
%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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: