⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gradz.m

📁 用MATLAB编写的基于拟牛顿算法的最优分类器程序
💻 M
字号:
%计算目标函数的梯度
function G=gradz(A,Y,w,r,m,n,kk)
%A为sample函数产生的样本矩阵
%Y为A中每个样本的分类标号
%w和r分别为待求的n×1列向量和标量,第一次为给定的初始值,以后为迭代得到的值
%m和n分别为样本的个数及属性
%kk是来标志用哪个光滑多项式代替正号函数
D=diag(Y);
e=ones(m,1);
DA=D*A;
De=D*e;
V=e-(DA*w)+(De*r);
G=zeros(n+1,1);
for i=1:m
  if V(i)>=0.01
    for j=1:n
     G(j,1)= G(j,1)-V(i)*DA(i,j);
    end
     G(n+1,1)= G(n+1,1)+V(i)*D(i,i);
    elseif V(i)<0.01 & V(i)>-0.01
        switch kk
            case 1 %用多项式1代替正号函数
             p1V=V(i)^2*25+V(i)*0.5+0.0025;
             p11=50*V(i)+0.5;
             for j=1:n
             G(j,1)=G(j,1)-DA(i,j)*p1V*p11;
             end
             G(n+1,1)=G(n+1,1)+D(i,i)*p1V*p11;   
            case 2 %用多项式2代替正号函数
            pV2=(-1/1600)*(100*V(i)+1)^3*(100*V(i)-3);
            p21=(-3/16)*(100*V(i)+1)^2*(100*V(i)-3);
            p22=(-1/16)*(100*V(i)+1)^3;
            for j=1:n
             G(j,1)= G(j,1)-pV2*(p21+p22)*D(i,i)*A(i,j);
            end
             G(n+1,1)= G(n+1,1)+pV2*(p21+p22)*D(i,i);
            case 3 %用多项式3代替正号函数
              pV3=(1/32)*(100*V(i)+1)^3*(10000*V(i)^3-300*V(i)^2+V(i)+0.05);
              p31=(300/32)*(100*V(i)+1)^2*(10000*V(i)^3-300*V(i)^2+V(i)+0.05);
              p32=(1/32)*(100*V(i)+1)^3*(30000*V(i)^2-600*V(i)+1);
              for j=1:n
                  G(j,1)= G(j,1)-pV3*(p31+p32)*D(i,i)*A(i,j);
              end
                  G(n+1,1)= G(n+1,1)+pV3*(p31+p32)*D(i,i);
            otherwise
                 disp('最后一个参数kk的值只能取1,2,3!');
        end
  end
end
G(1:n)=G(1:n)+w;
G(n+1,1)=G(n+1,1)+r;
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -