【机器学习】HK算法(LMSE算法) LMS算法改进保证线性可分时均方误差标准能够找到线性可分的超平面
1.其实HK算法思想很朴实,就是在最小均方误差准则下求得权矢量。
他相对于感知器算法的优点在于,他适用于线性可分和非线性可分得情况,对于线性可分的情况,给出最优权矢量,对于非线性可分得情况,能够判别出来,以退出迭代过程。
2.在程序编制过程中,我所受的最大困扰是:关于收敛条件的判决。
对于误差矢量:e=x*w-b
若e>0 则继续迭代
若e=0 则停止迭代,得到权矢量
若e〈0 则停止迭代,样本是非线性可分得,
若e有的分量大于0,有的分量小于0 ,则在各分量都变成零,或者停止由负值转变成正值时,停机。
3.在程序编制中的注意点:
1)关于0的判断,由于计算机的精度原因,严格等于零是很不容易的,而且在很多情况下也没有必要,则只要在0的一个可以接受的delta域内就可接受为零
2)关于判断,迭代前后,变量是否发生变化
在判断时,显然也不能直接判断a(i)==a(i+1)
而应该|a(i)-a(i+1)|〈err
4. HK详细代码如下:
unction [w,flag]=HK(data)
Iteration=20;
flag=0;
% [n,p]=size(data);
n=size(data,1);
b=ones(n,1)./10;
c=0.6;
xx=inv(data'*data)*data';
w=xx*b;
e=data*w-b;
t=0;
while (1)
temp=min(e);
temp1=max(e);
if temp>-1e-4 && temp<0
temp=0;
end
if temp>1e-3
deltab=e+abs(e);
b=b+c.*deltab;
w=w+c.*xx*deltab;
e=data*w-b;
else
if temp>=0 && temp1<1e-4
break;
else
if temp1<0
flag=1;
break;
else
deltab=e+abs(e);
b=b+c.*deltab;
w=w+c.*xx*deltab;
e=data*w-b;
t=t+1;
if t>=Iteration
break;
最新文章
- js错误
- Httpsqs的安装以及安装过程错误的解决方法 转
- ios录音
- IIS:日志代码分析
- OneProxy使用手册--致力于打造透明的数据层
- SQL语句修改表
- ios创建画笔的样例(双笔画效果)
- android tv 全屏幕垂直画
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第五章:排序、分页和路由
- [bzoj 1468][poj 1741]Tree [点分治]
- go基础编程 day-1
- c++项目范例
- Spring boot(4)-应用打包部署
- JAVA和JAVAC 命令行
- Java虚拟机学习 - 垃圾收集器 (4)
- 使用ffmpeg步骤(转)
- linux运维笔记——curl
- 基于Vue的WebApp项目开发(二)
- scss-#{}插值
- VM打开虚拟机文件报错