SVM二分类的MATLAB实现

  • T3_641060
    了解作者
  • 3.1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-04 03:49
    上传日期
是基于课程SVM原理内容写的SVM的底层实现,包括线性的和非线性采用核函数的。初学者,比较。。。
SVM.zip
  • SVM
  • qiujie1_guihua.m
    890B
  • qiujie2_semi_infinite.m
    2.7KB
  • SVM_main.m
    1.7KB
  • jiaochazhen.m
    434B
内容介绍
%多核学习问题 %半无穷线性规划semi-infinite linear programming function [w,b]=semi_infinite(attribute,class,c,xx,yy) n=size(attribute); %这样写长了不免用for循环,怎么改成矩阵表示??????? p=4; r=ones(1,p+1); %%%%%%%%%%%%%%%%%%%%%%多项式核 K1=1+attribute*attribute'; K2=(1+attribute*attribute').^2; K3=(1+attribute*attribute').^3; K4=(1+attribute*attribute').^4; %%%%%%%%%%%%%%%%%%%%%%%高斯核 % KK=zeros(n(1),n(1)); % for i=1:n(1) % for j=1:n(1) % KK(i,j)=normest(attribute(i,:)-attribute(j,:)); % end % end % K1=exp(-(KK/(2*1))); % K2=exp(-(KK/(2*2))); % K3=exp(-(KK/(2*3))); % K4=exp(-(KK/(2*4))); %%%%%%%%%%%%%%%%%%%%%%%%%混合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Y=sparse(class*class'); H=(r(1)*K1+r(2)*K2+r(3)*K3+r(4)*K4).*Y;%n*n矩阵 f1=-ones(size(class)); A1=[-eye(n(1));eye(n(1))]; b1=[zeros(n(1),1);c*ones(n(1),1)]; Aeq1=class'; beq1=0; a=quadprog(H,f1,A1,b1,Aeq1,beq1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%可以用上下两式求出的最小值进行下面的计算吗? f2=[zeros(p,1);1]; A2=-[[eye(p),zeros(p,1)];[1/2*(a.*class)'*K1*(a.*class),1/2*(a.*class)'*K2*(a.*class),1/2*(a.*class)'*K3*(a.*class),1/2*(a.*class)'*K4*(a.*class),1]]; b2=[zeros(p,1);a'*ones(n(1),1)]; Aeq2=[ones(1,p),0];beq2=1; r=linprog(f2,A2,b2,Aeq2,beq2); theta2=r(p+1);theta1=theta2+1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% while (abs(theta2-theta1)>=exp(-2)) H=(r(1)*K1+r(2)*(K2)+r(3)*K3+r(4)*K4).*Y; a=quadprog(H,f1,A1,b1,Aeq1,beq1); A2=[A2;-[1/2*(a.*class)'*K1*(a.*class),1/2*(a.*class)'*K2*(a.*class),1/2*(a.*class)'*K3*(a.*class),1/2*(a.*class)'*K4*(a.*class),1]]; b2=[b2;a'*ones(n(1),1)]; r=linprog(f2,A2,b2,Aeq2,beq2); theta1=theta2;theta2=r(p+1); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% index=find(a>0.000001); alpha=a(index); y=class(index); x=attribute(index,:); w=x'*(alpha.*y);%w为n(2)*1维 %b的计算方法:全部取均值 bb=y-((alpha.*y)'*(r(1)*K1(index,index)+r(2)*K2(index,index)+r(3)*K3(index,index)+r(4)*K4(index,index)))'; b1=mean(bb); %%%%%%%%%%%%%%%%%%%%训练误差 h=(a.*class)'*(r(1)*K1+r(2)*K2+r(3)*K3+r(4)*K4)+b1; n(1)-sum(eq(class',sign(h))) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %检测结果 KK1=1+attribute*xx'; KK2=(1+attribute*xx').^2; KK3=(1+attribute*xx').^3; KK4=(1+attribute*xx').^4; %%%%%%%%%%%%%%%%%%%%%%%高斯核 % KKK=zeros(n(1),length(xx)); % for i=1:n(1) % for j=1:length(xx) % KKK(i,j)=normest(attribute(i,:)-xx(j,:)); % end % end % KK1=exp(-(KKK/(2*1))); % KK2=exp(-(KKK/(2*2))); % KK3=exp(-(KKK/(2*3))); % KK4=exp(-(KKK/(2*4))); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% hh=(a.*class)'*(r(1)*KK1+r(2)*KK2+r(3)*KK3+r(4)*KK4)+b1; 20-sum(eq(yy',sign(hh))) figure;plot([h(1:40),hh(1:10),h(41:80),hh(11:20)]);
评论
    相关推荐
    • 神经网络分类matlab程序
      使用matlab编写的神经网络分类程序,方便实用 使用matlab编写的神经网络分类程序,方便实用 使用matlab编写的神经网络分类程序,方便实用 使用matlab编写的神经网络分类程序,方便实用
    • 分类MATLAB程序
      十几个程序,谱聚类的完整例子,有详细的例子,绝对物有所值,包括花朵分类,核函数等,MATLAB程序,下载绝对值得!包括研究生写论文,也是值得参考
    • 模式分类matlab实现
      duda给出的模式分类一书的matlab实现.
    • SVM文本分类MatLAB源代码
      SVM文本分类MatLAB源代码 为m-file格式
    • 多层ELM进行MNIST手写字符分类MATLAB代码
      多层ELM进行MNIST手写字符分类MATLAB代码,直接运行.m程序,如果现实内存溢出,请改小隐藏节点个数。
    • Fisher分类MATLAB算法.rar
      手写数字识别Fisher分类MATLAB算法。内有程序,8个数字样本的训练样本。数字的特征提取部分解压后请见project report.ppt.
    • 高维多标签分类matlab
      高维多标签分类matlab knn,svm,随机森林等算法 784维数据 分为10类
    • svm多分类matlab程序
      svm多分类matlab程序,包括一对一、一对余等二叉树分类算法
    • 神经网络分类matlab程序
      使用matlab编写的神经网络分类程序,方便实用
    • 朴素贝叶斯分类matlab实现
      分类算法是统计学分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,且方法简单、分类...