模式识别1-线性分类器(感知机)
来源:互联网 发布:jsoup实例源码 编辑:程序博客网 时间:2024/05/29 02:15
1.1:感知机算法原理
首先明确,感知机的输入和输出,输入就是一组向量,每个向量都有n个特征值,输出为每个向量的所属类别,对于二分类而言,就是+1和-1.
这个可以用sign函数来模拟:
输入空间到输出空间的函数为:f(x) = sign(w*x +b);
函数理解:w,b为感知机模型参数,w是一个权重向量,b是偏置,w*x是内积,sign是符号函数,当w*x+b>0时候,函数输出为+1,当w*x+b<0时候,函数输出为-1.
然后,感知机是一个线性分类模型,属于一种判别模型。
感知机有一个分类面:w*x +b =0 ,这是对应特征空间的一个超平面S,w为这个超平面的法向量,b是这个超平面的截距,这个超平面将特征空间分为两半,每一边代表一类。
在感知机算法编程中,首先要初始化w和b,然后使用误分点来驱动超平面,进行参数跟新。
当一个x(i)被错误分类的时候,通过下面公式来修正:
w=w+L*y(i)*x(i)
b = b+L*y(i)(L是学习的步长)
进行w和b的更新。
matlab代码实现:
clear all;close all;N1=440;for i=1:N1 x(1,i)=-1.7+1.1*randn(1); % 440 Samples normal distribution x(2,i)= 1.6+0.9*randn(1); x(3,i)= 1;end;N2=400;for i=1:N2 y(1,i)= 1.3+1.0*randn(1); % 400 Samples normal distriburion y(2,i)=-1.5+0.8*randn(1); y(3,i)= 1;end;% % % plot(x1(1,:),x1(2,:),'*',x2(1,:),x2(2,:),'o');%paint these point int 2-D% grid on;% axis equal;% axis([-5 5 -5 5 ]);x1 =x;x2 =y;plot(x1(1,:),x1(2,:),'r*',x2(1,:),x2(2,:),'b*');hold on;%样本的分类值1和-1y1 = ones(1,440);y2 = -ones(1,400);% x = [x1 x2];% y = [y1 y2];%最后一个w的元素是为了增广矩阵的维度w =[rand(1),rand(1),rand(1)];b=0;step =0.001;count=0;count1 =0;count2 =0;tic;for j =1:100 for i=1:size(x1,2)%循环X1,迭代更新修正w的权重值 x = x1(:,i); if(w*x <0) w =w +step * x; count = count + 1; end; end; for i = 1:size(x2,2)%循环X2,迭代更新,修正w的权重值 x = x2(:,i); if(w*x >0) w =w -step * x; count = count +1; end; end;end;Y = min(x1(1,:)):max(x2(1,:));X = (-w(1)*t1-w(3))/w(2);plot(x1(1,:),x1(2,:),'r*',x2(1,:),x2(2,:),'bo',Y,X,'g');%画出y——x的决策平面time = toc注意:代码中使用的是增广矩阵的运算方法。直接吧y=wx+b,变为了y = wx;
下面的代码是分别跟新w和b,可以分别理解一下。本人也是理解了一下,不过还需要时间消化。
% tic;% for j = 1:100% for i=1:size(x,2)% % panbie = y(i)*(w*x(:,i) + b);% if (sign(panbie) >=1)% count =count+1;% else% % w = w+step*y(i)*x(:,i)';% % b =b+ step*y(i);% count1 = count1+1;% % % end% % end% % if (count >= size(x,2))% break;% end% count =0;% count2 = count2 + 1;% % end% % u1 =min(x(1,:)):max(x(1,:));% u2 = -( (w(1)/w(2))*u1 +b/w(2) );% % w% b% % count1% count2% time1 = toc% plot(u1,u2,'g');% hold off%
参考链接:http://blog.csdn.net/shihz_fy/article/details/40684451
阅读全文
0 0
- 模式识别1-线性分类器(感知机)
- 模式识别: 线性分类器
- 模式识别: 线性分类器
- 模式识别: 线性分类器
- 模式识别(二)线性分类器
- 模式识别2-线性分类器(最小二乘法)
- 图像的线性分类器(感知机、SVM、Softmax)
- 线性分类模型--感知机(perceptron)
- LDA-模式识别线性分类器
- 感知器算法(C语言)模式识别几何分类发(线性可分时)感知器算法(3维C语言实现)
- 线性分类器之感知器模型(Perceptron)
- 分类器(模式识别)
- 模式识别(Pattern Recognition)学习笔记(七)——线性分类器及线性判别函数
- 模式识别(Pattern Recognition)学习笔记(七)——线性分类器及线性判别函数
- 【模式识别】感知器 Perceptron
- 模式识别(Pattern Recognition)学习笔记(十三)--多类线性分类器
- 模式识别(Pattern Recognition)学习笔记(十三)--多类线性分类器
- 【模式识别】多层感知器 MLP
- 设计模式_23:解释器模式
- MapReduce--5--单词去重WordDistinctMR
- ora-12528 : message 12528 not found; product=RDBMS ; facility=ora
- 中小企业如何选择DDoS防御方案?
- LeetCode-Valid Parenthesis String
- 模式识别1-线性分类器(感知机)
- Codeforces 877 B Nikita and string
- 剑20-顺时针打印矩阵
- Linux 下用命令修改mysql5.6 编码格式
- IntelliJ IDEA 创建maven web项目2(6)
- mysql无法启动
- leetcode 120
- 模式识别2-线性分类器(最小二乘法)
- ListView自定义Adapter实现仿QQ界面