📄 newton.m
字号:
function [w0,r0,p,q,t]=Newton(A,Y,m1,m2,n,kk)
%拟牛顿算法的最优分类器
%A为样本矩阵,每行为一个样本,每列为该样本的特征值
%Y为样本标号
%m1为训练样本数
%m2为测试样本数
%n为生成的每个样本的特征
%kk用来确定使用哪个光滑多项式 其值只能取 1,2,3
%p为训练集的判准率
%q为测试集的判准率
%t为求解时间
m=m1+m2;
w0=ones(n,1);
r0=0;
limixi=10^(-6);
G0=gradz(A,Y,w0,r0,m,n,kk);
H0=hesse(A,Y,w0,r0,m,n,kk);
lamda=1;
tic;
while(G0'*G0>limixi&lamda>10^-12)
d0=-inv(H0)*G0;
lamda=armijo(A,Y,w0,r0,m,n,kk,G0,d0);
w1=w0+lamda*d0(1:n);
r1=r0+lamda*d0(n+1);
w0=w1;
r0=r1;
G0=gradz(A,Y,w0,r0,m,n,kk);
H0=hesse(A,Y,w0,r0,m,n,kk);
end
t=toc;
%求训练集判准率
P=[];
for i=1:m1
if(A(i,:)*w0>0)
p=1;P=[P,p];
else
p=-1;P=[P,p];
end
end
p1=0;
for i=1:m1
if Y(1,i)==P(1,i)
p1=p1+1;
else
p1=p1;
end
end
p=p1/m1;
%求测试集判准率
P1=[];
for i=m1+1:m
if(A(i,:)*w0>0)
pp=1;P1=[P1,pp];
else
pp=-1;P1=[P1,pp];
end
end
p2=0;
for i=1:m2
if Y(1,m1+i)==P1(1,i)
p2=p2+1;
else
p2=p2;
end
end
q=p2/m2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -