二分类SVM方法Matlab实现
来源:互联网 发布:linux rpm 安装目录 编辑:程序博客网 时间:2024/05/16 02:25
使用Matlab实现了二分类的SVM,优化技术使用的是Matlab自带优化函数quadprog。
只为检查所学,更为熟悉;不为炫耀。也没有太多时间去使用更多的优化方法。
function model = svm0311(data,options)%SVM0311 解决2分类的SVM方法,优化使用matlab优化工具箱quadprog函数实现%by LiFeiteng email:lifeiteng0422@gmail.com%Reference: stptool% Pattern Recognition and Machine Learning P333 7.32-7.37% input aruments%-------------------------------------------ticdata=c2s(data);[dim,num_data]=size(data.X);if nargin < 2, options=[]; else options=c2s(options); endif ~isfield(options,'ker'), options.ker = 'linear'; endif ~isfield(options,'arg'), options.arg = 1; endif ~isfield(options,'C'), options.C = inf; endif ~isfield(options,'norm'), options.norm = 1; endif ~isfield(options,'mu'), options.mu = 1e-12; endif ~isfield(options,'eps'), options.eps = 1e-12; endX = data.X;t = data.y;t(t==2) = -1;% Set up QP task%----------------------------K = X'*X;T = t'*t;% 注意t是横向量H = K.*T;save('H0311.mat','H')H = H + options.mu*eye(size(H));f = -ones(num_data,1);Aeq = t;beq = 0;lb = zeros(num_data,1);ub = options.C*ones(num_data,1);x0 = zeros(num_data,1);qp_options = optimset('Display','off');[Alpha,fval,exitflag] = quadprog(H, f,[],[], Aeq, beq, lb, ub, x0, qp_options);inx_sv = find(Alpha>options.eps);% compute bias%--------------------------% take boundary (f(x)=+/-1) support vectors 0 < Alpha < Cb = 0;inx_bound = find( Alpha > options.eps & Alpha < (options.C - options.eps));Nm = length(inx_bound);for n = 1:Nm tmp = 0; for m = 1:length(inx_sv) %PRML7.37 tmp = tmp+Alpha(inx_sv(m))*t(inx_sv(m))*K(inx_bound(n),inx_sv(m)); end b = b + t(inx_bound(n))-tmp;endb = b/Nm;model.b = b; %-----------------------------------------w = zeros(dim,1);for i = 1:num_data w = w+ Alpha(i)*t(i)*X(:,i);%PRML 7.29endmargin = 1/norm(w);%-------------------------------------------%此处与stprtool保持接口一致 用于画图展示等model.Alpha = Alpha( inx_sv );model.sv.X = data.X(:,inx_sv );model.sv.y = data.y(inx_sv );model.sv.inx = inx_sv;model.nsv = length( inx_sv );model.margin = margin;model.exitflag = exitflag;model.options = options;model.kercnt = num_data*(num_data+1)/2;model.trnerr = cerror(data.y,svmclass(data.X, model));model.fun = 'svmclass';model.W = model.sv.X*model.Alpha;% used CPU timemodel.cputime=toc;return;
0 0
- 二分类SVM方法Matlab实现
- 二分类SVM方法Matlab实现
- 二分类SVM方法Matlab实现
- matlab实现hog+svm图像二分类
- 用MatLab实现SVM分类
- Matlab实现svm的分类
- matlab版hog+svm图像二分类
- matlab版hog+svm图像二分类
- Matlab实现HOG+SVM图像分类
- hog matlab代码1——实现hog+svm图像二分类
- Matlab-SVM分类器
- Matlab-SVM分类器
- 垃圾邮件二分类 NaiveBayes v.s SVM (matlab)
- matlab利用hinge loss实现多分类SVM
- SVM+HOG对图像进行分类(MATLAB实现)
- 用MATLAB进行SVM分类
- SVM分类方法
- SVM实现邮件分类
- HIT ACM 1004 Prime Palindromes
- 《剑指offer》:[36]数组中的逆序对
- Ubuntu 安装jenkins
- SpringMVC中的注解驱动(九)
- 二维数组中的查找
- 二分类SVM方法Matlab实现
- HOG 梯度方向直方图
- Android 动画总结
- bug:ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint
- 文件操作
- HOG参数简介及Hog特征维数的计算
- Root与Unlock Bootloader(解锁)
- 虚表剖析
- HOG特征(Histogram of Gradient)总结