newton.m

来自「用MATLAB编写的基于拟牛顿算法的最优分类器程序」· M 代码 · 共 67 行

M
67
字号
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 + =
减小字号Ctrl + -
显示快捷键?