这是我在机器学习课程上的作业,用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=