【SVM之菜鸟实现】—5步SVM
来源:互联网 发布:mysql 查询赋值给变量 编辑:程序博客网 时间:2024/05/24 03:23
#翻译#了下 余凯老师的 心法
以前的一篇博文:二分类SVM方法Matlab实现
前几日实现了下,虽然说是Linear-SVM,但是只要可以有映射函数也可以做kernel-svm
function [optW cost]= svm5step(X, y, lambda)%% Linear-SVM Minimize(Cost + lambda*Penalty)% X: N×dim% y: {-1,+1}% lambda: coefficient for Penalty part % By LiFeiteng Email:lifeiteng0422@gmail.com [N dim] = size(X);w = rand(dim+1,1);X = [ones(N,1) X]; % x = [1 x]% minFunc From: http://www.di.ens.fr/~mschmidt/Software/minFunc.htmloptions.Method = 'lbfgs';options.maxIter = 100; options.display = 'on';[optW, cost] = minFunc( @(p) svmCost(p, X, y, lambda), w, options);endfunction [cost grad] = svmCost(w, X, y, lambda)% cost = HingeLoss^2 + lambda*||w||^2% 1 2 3 4 5 stepyp = X*w;idx = find(yp.*y<1);err = yp(idx)-y(idx);cost = err'*err + lambda*w'*w;grad = 2*X(idx,:)'*err + 2*lambda*w;end
测试用例:
clearclose allx0 = [1 4]';x1 = [4 1]';X0 = [];X1 = [];for i = 1:40 X0 = [X0 normrnd(x0, 1)]; X1 = [X1 normrnd(x1, 1)];endX = [X0 X1]';y = [-ones(size(X0,2),1); ones(size(X1,2),1)];save data X0 X1 X yplot(X0(1,:),X0(2,:), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);hold onplot(X1(1,:),X1(2,:), 'k+','LineWidth', 2, 'MarkerSize', 7);lambda = 0.01;w = svm5step(X, y, lambda)k = -w(2)/w(3); b = -w(1)/w(3);h = refline(k,b); %已知斜率w 截距b 画直线set(h, 'Color', 'r')b = -(w(1)+1)/w(3);h = refline(k,b); %已知斜率w 截距b 画直线b = -(w(1)-1)/w(3);h = refline(k,b); %已知斜率w 截距b 画直线title(['5 steps Linear-SVM: \lambda = ' num2str(lambda)] )
- 【SVM之菜鸟实现】—5步SVM
- 【SVM之菜鸟实现】 python版
- 【SVM之菜鸟实现】 python版
- SVM实现之SMO算法
- SVM实现
- SVM
- SVM
- SVM
- svm
- svm
- svm
- svm
- SVM
- SVM
- SVM
- SVM
- svm
- SVM
- 图,网路与邻接矩阵
- QueryPerformanceFrequency,RDTSC,CPU频率
- C# 多线程和UI交互 Beginvoke
- 二分查找
- projects in visual studio 2010
- 【SVM之菜鸟实现】—5步SVM
- 第二章,变量和基本类型
- 用TCP/IP进行网际互联(学习笔记)------前4章
- 积分直方图加速HOG特征计算
- java Web 项目部署在tomcat的问题
- java在windows环境下的配置
- (2013.09.02)好的开始时成功的一半
- Linux多线程——使用互斥量同步线程
- POJ 1860 Currency Exchange 贝尔曼-福特算法(Bellman-Ford)