搜索
bottom↓
回复: 4

SVM 分类器

[复制链接]

出0入0汤圆

发表于 2015-1-9 21:44:04 | 显示全部楼层 |阅读模式
最近在学习Machine learning,尝试自己用Matlab实现SVM算法
svm基本思路是让分界的margin尽量大,可以转化为一个standard quadratic programming problem,这样在matlab中有就可以调用现成的函数解决


Code
  1. %svm demo
  2. %this m file can be used to solve unseparable problem
  3. clear;
  4. close all;
  5. clc;

  6. %positive points numbers
  7. Np = 15 ;
  8. %negative points numbers
  9. Nn = 15 ;
  10. %generate data
  11. [x, y] = gendata(Np, Nn) ;

  12. tol = 1e-4 ;


  13. %% build matrix for quadprog()
  14. [n m] = size(x); %m: number of train data; n: length of xi
  15. Y = diag(y);
  16. %%primal formulation
  17. %linear kernel
  18. K = x'*x;
  19. C = 1;
  20. H = Y*K*Y;
  21. f = -ones(m, 1);
  22. A = [];
  23. b = [];

  24. Aeq = y;
  25. beq = 0;

  26. l = zeros(m, 1);
  27. u = 1*ones(m, 1);
  28. options = optimset('Algorithm','interior-point-convex');

  29. %%standard quadratic programming problem X = quadprog(H,f,A,b,Aeq,beq,LB,UB,X0)
  30. alpha = quadprog(H, f, A, b, Aeq, beq, l, u, [], options);

  31. %%compute w
  32. w = zeros(n, 1);
  33. for i = 1 : m
  34.         w = w + alpha(i)*y(i)*x(:, i);
  35. end
  36. %%compute b
  37. pos = find(alpha > 1e-6);
  38. b = mean(y(pos)- w'*x(:, pos));


  39. %%plot the boundry on the map
  40. xt = linspace(min(x(1, :)), max(x(2, :)), 100);
  41. yt = (-b-w(1)*xt)/w(2);
  42. yt_p = (1 -b -w(1)*xt)/w(2);
  43. yt_n = (-1 -b - w(1)*xt)/w(2);

  44. %%plot data
  45. xp = x(:, y == 1);
  46. xn = x(:, y == -1);
  47. figure;
  48. plot(xp(1, :), xp(2, :), 'ob', xn(1, :), xn(2, :), '*r');
  49. hold on;
  50. plot(xt, yt, '-r', xt, yt_n, '-b', xt, yt_p, '-b');
  51. hold off;
  52. print('-dpng', 'svm_soft_margin_simu.png')
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2015-1-9 21:44:49 | 显示全部楼层
占个楼先        

出0入0汤圆

 楼主| 发表于 2015-1-9 22:15:12 | 显示全部楼层
自己占个楼先

出0入0汤圆

发表于 2015-1-9 22:20:45 | 显示全部楼层
MATLAB已经有现成的SVM分类器可以用了。

LIBSVM是也不错,国内用的较多。

出0入0汤圆

 楼主| 发表于 2015-1-9 23:16:36 | 显示全部楼层
RUANJI 发表于 2015-1-9 22:20
MATLAB已经有现成的SVM分类器可以用了。

LIBSVM是也不错,国内用的较多。

还是感觉用自己写的库最靠谱
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 11:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表