zoukankan      html  css  js  c++  java
  • 【机器学习】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;
            

  • 相关阅读:
    微博二级评论爬取
    爬取genome的网页和图片
    一个数据结构转换的问题
    SQLAlchemy ORM教程之二:Query
    SQLAlchemy中filter()和filter_by()有什么区别
    词云加显示条形图
    智联招聘的python岗位数据词云制作
    Python标准库——collections模块的Counter类
    MySQL5.6 windows msi安装介绍
    ICSharpCode.SharpZipLib.Zip
  • 原文地址:https://www.cnblogs.com/huty/p/8518348.html
Copyright © 2011-2022 走看看