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;

最新文章

  1. js错误
  2. Httpsqs的安装以及安装过程错误的解决方法 转
  3. ios录音
  4. IIS:日志代码分析
  5. OneProxy使用手册--致力于打造透明的数据层
  6. SQL语句修改表
  7. ios创建画笔的样例(双笔画效果)
  8. android tv 全屏幕垂直画
  9. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第五章:排序、分页和路由
  10. [bzoj 1468][poj 1741]Tree [点分治]
  11. go基础编程 day-1
  12. c++项目范例
  13. Spring boot(4)-应用打包部署
  14. JAVA和JAVAC 命令行
  15. Java虚拟机学习 - 垃圾收集器 (4)
  16. 使用ffmpeg步骤(转)
  17. linux运维笔记——curl
  18. 基于Vue的WebApp项目开发(二)
  19. scss-#{}插值
  20. VM打开虚拟机文件报错

热门文章

  1. k8sService资源
  2. js 百分比显示页面加载进度
  3. C# Stopwatch 延时
  4. jquery grid 显示隐藏列
  5. maven项目创6 表现层整合
  6. LOJ #2718. 「NOI2018」归程 Dijkstra+可持久化并查集
  7. CF 352 D 罗宾汉发钱 模拟题+贪心
  8. Presto部署指南
  9. 3105: [cqoi2013]新Nim游戏
  10. kaliXSSbeef的使用