%%
% by yunmi
% email : lvyun mi @ http://www.doc ZJ.com/doc/4e0ff 8791611 cc 7931 b 765 ce 050876323112744 b.html
%reference:faruto
%%转载时请注明:
% libsvm若干内核函数的实现
%本文档是一个学习文档,只有libsvm初学者才能共同学习
%本文实现了libsvm的四个基本核:线性核、多项式核、径向核、s形核,以及faruto提到的几个定制核。 纯粹学习使用,廉价自己学习定制核
%%
清除%
清除
clc
%算法开始时间
tic;
%读取数据
load heart_scale.mat
trainData=heart_scale_inst;
trainLabel=heart_scale_label;
testData=heart_scale_inst;
testLabel=heart_scale_label;
clear heart_scale_inst;
clear heart_scale_label;
%培训和测试数据的行数和属性数
[trainRow,dim]=size(traindata );
testrow=length(testdata );
%参数设定
%参数g:伽玛
%参数coef0
%参数d :倾斜
%g=1/Length(Unique ) trainLabel );
g=1/Dim; %默认为属性计数的倒数
coef0=0;
d=3;
%线性核函数k(x,x ' )=x*x '
%{
kTrain=trainData*trainData ';
ktrain=[(1:trainrow ),kTrain];
kTest=testData*trainData ';
kTest]=[(1:testrow ),ktest );
%}
%多项式核函数k(UI,vj )=)=(gama*ui*vj' coef0) ^degree
%参数g:伽玛
%参数coef0
%参数d :倾斜
%{
ktrain=g*(traindata*traindata ' ) coef0;
for i=1:trainRow
for j=1:trainRow
ktrain(I,j ) ktrain(I,j ) ^d;
结束
结束
ktrain=[(1:trainrow ),kTrain];
kest=g*(testdata*traindata ' ) coef0;
for i=1:testRow
for j=1:trainRow
ktest(I,j ) ktest(I,j ) ^d;
结束
结束
kTest]=[(1:testrow ),ktest );
%}
%径向基核函数k(ui,vj )=exp(-gama*|ui-VJ||^2) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。)
%参数g:伽玛
%%{
ktrain=Zeros(trainRow,trainrow );
for i=1:trainRow
for j=1:trainRow
ktrain(I,j )=exp(-g*norm ) train data (I, )-traindata(j, ) )2);
结束
结束
ktrain=[(1:trainrow ),kTrain];
kest=Zeros(testrow,trainRow );
for i=1:testRow
for j=1:trainRow
kest(I,j )=exp(-g*norm ) testdata ) I,(-traindata(j, ) ) )2);
结束
结束
kTest]=[(1:testrow ),ktest );
%}
%s核函数k(ui,vj )=Tanh ) gama*ui*VJ'coef0) ) ) ) ) ) ) ) ) s ) ) s ) ) s ) s ) ) 65
%参数g:伽玛
%参数coef0
%%{
ktrain=Zeros(trainRow,trainrow );
for i=1:trainRow
for j=1:trainRow
ktrain(I,j )=tanh(g*traindata(I, ) traindata ) j, ) ' coef0);
结束
结束
ktrain=[(1:trainrow ),kTrain];
kest=Zeros(testrow,trainRow );
for i=1:testRow
for j=1:trainRow
kest(I,j )=tanh(g*testdata(I, ) traindata ) j, ) ' coef0);
结束
结束
kTest]=[(1:testrow ),ktest );
%}
%定制核心1k(u,v ) [i,j]=||ui||*||vj||
%{
ktrain=ones(trainRow,trainrow );
for i=1:trainRow
for j=1:trainRow
ktrain(I,j )=sum(traindata(I, ).^2) ) 0.5*sum ) traindata ) j, ).^2) ^0.5;
结束
结束
ktrain=[(1:trainrow ),kTrain];
kest=ones(testrow,trainRow );
for i=1:testRow
for j=1:trainRow
kest(I,j )=sum(testdata(I, ).^2) ) 0.5*sum ) traindata, ).^2) ^0.5;
结束
结束
kTest]=[(1:testrow ),ktest );
%}
%定制核心2k(u,v ) [i,j]=ui*VJ'/(|ui|||| )