基于matlab的SMO实现

这是我在机器学习课程上的作业,用matlab实现的SMO,记录一下体会。
我实现了简化版SMO代码,网络上流传的大部分也都是这种思路的代码,主要参考了Peter《机器学习实战》中关于SMO算法的部分。感谢yqx老师。
我自己编写的简化版代码:

function [alpha,bias] = my_seqminoptSimple(training,groupIndex,C,maxIter,tol)

% init
[sampleNum,featuerNum]=size(training);
alpha=zeros(sampleNum,1);
bias=0;
iteratorTimes=0;

K=training*training';
while iteratorTimes<maxIter
    %iteratorTimes=iteratorTimes+1;
    alphaPairsChanged=0;
    % calculate predict value
    %K=training*training';
    %g=(alpha.*groupIndex)'*K+repmat(bias,1,sampleNum);
    %g=g';

    % calculate error
    %E=g-groupIndex;

    % find alpha1
    for i=1:sampleNum
        g1=(alpha.*groupIndex)'*(training*training(i,:)')+bias;
        E1=g1-groupIndex(i,1);
       % choose i: avoid KKT conditions
       if(((E1*groupIndex(i,1)<-tol)&&alpha(i,1)<C)||((E1*groupIndex(i,1)>tol)&&alpha(i,1)>0))
           % choose j: different from i 
           j=i;
           while j==i
                j=randi(sampleNum);
           end

            alpha1=
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值