📄 calr.m
字号:
function [alpha,bias]=calr(trnX,trnY,ker,C)
fprintf(' Support Vector Regressing ....\n')
fprintf('-------------------------------\n')
n = size(trnX,1);%训练样本的个数
epsilon = svtol(C);%表示C的下界
fprintf('Constructing ...\n');
H = zeros(n,n);
for i=1:n
for j=1:n
H(i,j) = svkernel(ker,trnX(i,:),trnX(j,:));
end
end
A=H+1/(2*C)*eye(n);%开始构造线性方程组
e=ones(n,1);
B=[0 e';e A];%方程组为BX=D
D=[0;trnY];
fprintf('Optimising ...\n');
st = cputime;%计时
%最小二乘法
[L,U]=lu(B);%对矩阵B进行LU分解,L*U=B,其中U为上三角矩阵,L为下三角阵,则方程组变形为LUX=D
Y=L\D;% \表示矩阵左除,即Y等于L左除D,即表示Y=UX
X=U\Y;% 然后又由UX=Y可得X等于U左除Y
bias=X(1);%X的第一项即为b
alpha=zeros(n,1);
for i=1:n
alpha(i)=X(i+1);%X的其他项对应所有的拉格朗日乘子
end
svi = find( abs(alpha) > epsilon );
nsv = length( svi );%nsv表示支持向量的个数
fprintf('Support Vectors : %d (%3.1f%%)\n',nsv,100*nsv/n);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -