在翻阅知乎时,得知李航所著的《统计学习方法》一书,于是就买了一本,看到CSDN上已有大牛都发了相关的博客,再次赘述就显得啰嗦了,就直接上干货吧,,自己用Matlab写的代码,和一些自己再看书时的小小的理解。
感知机是一种二类分类的线性模型模型,是一个将输入空间(特征空间)分成正负两类的分离超平面。它的更多文字简介可参考这篇博文,http://blog.csdn.net/qll125596718/article/details/8394186,里面已经讲的很详细了。
下面总结了一些自己的理解以及需要自己注意的地方,更加的利于我们去理解。
感知机学习算法分为原始形式和对偶形式:
1、在原始形式中,权重w的维度与训练集中单个实例是一样的,它是通过误分类点不断的改变w的值,而在对偶形式中,w被表示为实例和每个实例的线性组合,在yita为1的前提下,其可表示为n个alfa,n是训练集中实例的个数。
2、因为二者的解太多了,所以需要加上相关的约束条件,于是便有了后面的svm。
例2.1的代码:
close all;
clear all;
clc;
x =[3 3 1;
4 3 1;
1 1 -1];
w=[0 0]'; b=0;
misPot=1;%只是让循环能够开始
while misPot~=0
misPot=0;%每次循环后,记录误分类点的个数,并将其归零进行下一次记录
for row_=1:row
temp=x(row_,3)*(x(row_,1:2)*w+b);
if temp<=0
misPot=misPot+1;
w=w+x(row_,1:2)'*x(row_,3); b=b+x(row_,3);
disp('w_dq'),disp(w);
disp('b_dq'),disp(b);
end
end
end
例2.2
close all;
clear all;
clc;
x =[3 3; 4 3; 1 1];
y=[1 1 -1];
alfa=zeros(1,3);
b=0;
yita=1;
[row,col]=size(x);
Gram=zeros(3,3);
for i=1:row
for j=1:row
Gram(i,j)=x(i,:)*x(j,:)';
end
end
count=1;
while count~=0
count=0;
for i=1:row
temp=y(i)*(...
alfa(1)*y(1)*Gram(1,i)+...
alfa(2)*y(2)*Gram(2,i)+...
alfa(3)*y(3)*Gram(3,i)+...
b);
if temp<=0
count=count+1;
alfa(i)=alfa(i)+yita;
b=b+y(i);
end
end
end
一些愚见奉上!