zoukankan      html  css  js  c++  java
  • 李航老师的《统计学习方法》第二章算法的matlab程序

    参考了http://blog.sina.com.cn/s/blog_bceeae150102v11v.html#post


    % 感知机学习算法的原始形式,算法2.1参考李航《统计学习方法》书中第二章的算法P29

    close all
    clear all
    clc
    X=[3,3;4,3;1,1];Y=[1,1,-1];%训练数据集及标记
    learnRate=1;%学习率
    Omega=zeros(1,size(X,2))
    b=0 %% ω和b的初值
    i=1;k=0;
    while 1
    if Y(i)*(sum(Omega.*X(i,:))+b)<=0 %该点未被正确分类,调整之
    Omega=Omega+learnRate*Y(i)*X(i,:);
    b=b+learnRate*Y(i);
    i=1;%调整w,b之后,重新对每个点检查
    k=k+1;%记录迭代次数
    fprintf('迭代次数k=%d',k);
    omega=sprintf('%2.0f ',Omega)
    fprintf('b=%d ',b);
    continue;
    else
    i=i+1;
    end
    if i>size(X,1)
    break;
    end
    end
    w=Omega
    b

    % 感知机学习算法的对偶形式,算法2.2参考李航《统计学习方法》书中第二章的算法P33

    close all
    clear all
    clc
    X=[3,3;4,3;1,1];Y=[1,1,-1];%训练数据集及标记
    learnRate=1;%学习率(0,1]
    alpha=zeros(1,size(X,1))
    b=0 %%alpha和b的初值 size(X,dim) dim=1返回行数(有几个x点),dim=2返回列数
    G=X*X';%%计算Gram矩阵
    i=1;k=0;
    while 1
    if Y(i)*(sum(alpha.*Y.*G(i,:))+b)<=0 %该点未被正确分类,调整之
    alpha(i)=alpha(i)+1;
    b=b+Y(i);
    i=1;%调整w,b之后,重新对每个点检查
    k=k+1;%记录迭代次数
    fprintf('迭代次数k=%d',k);
    Alpha=sprintf('%2.0f ',alpha)
    fprintf('b=%d ',b);
    continue;%跳过循环体中的某些语句。当在循环体内执行到该语句的时候,程序将跳过循环体内中剩下的所有语句,继续执行下一次循环。
    else
    i=i+1;
    end
    if i>size(X,1)
    break;%终止循环的执行,当在循环体内执行到break语句的时候,程序将跳出该循环体,继续执行循环体外的下一个语句
    end
    end
    w=alpha.*Y*X % *是乘法,即矩阵乘法,.*是点乘,即对应元素相乘
    b

  • 相关阅读:
    多线程之volatile关键字
    多线程具体实现
    多线程的概述
    Linux基本目录机构
    Java13新特性
    CF1316D【Nash Matrix】(dfs+构造+思维)
    ego商城项目学习总结+出现问题及解决
    java.lang.OutOfMemoryError: GC overhead limit exceeded之tomcat7优化
    jsp在tomcat中更新不起作用
    js取值及赋值
  • 原文地址:https://www.cnblogs.com/dengyt/p/7787097.html
Copyright © 2011-2022 走看看