Hello Mat

 找回密码
 立即注册
查看: 4988|回复: 0

SVM支持向量机底层代码讲解

[复制链接]

1294

主题

1520

帖子

112

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22635
发表于 2017-7-9 15:52:25 | 显示全部楼层 |阅读模式
SVM支持向量机底层代码讲解:
百度网盘视频链接:
视频链接:http://pan.baidu.com/s/1hsknqE4
录制的视频是算法底层原理讲解,底层代码实现,方便大家真正掌握算法实质,开发出更加出色的算法。录制视频的初衷是:避免读者朋友利用大把时间学习已有常见算法,本系列视频旨在让读者朋友快速深入了解这些常见算法原理,有更多的时间去研究更加高大上算法(价值)。

具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

SVM支持向量机底层代码如下:运行环境:win7+32bit+matlab2014a
x:400x2
y:400x1
主程序如下:
  1. % SVM 支持向量机
  2. clear all;clc;
  3. data=csvread('LinearlySeprerableData.csv');
  4. data(:,1:end-1)=zscore(data(:,1:end-1));  % 归一化处理
  5. x = data(:,1:end-1);
  6. y = data(:,end);
  7. N = length(y);
  8. % C:折中经验风险和置信风险的,C越大,置信风险越大,经验风险越小;
  9. C = 0.5;             % Concluded after Cross-Validation,惩罚系数
  10. tol = 10e-5;         % 损失系数
  11. alpha = zeros(N,1);  % 初始化的alpha
  12. % 权值求解
  13. tic
  14. [alpha, weight] = svm_core_2( x,y,C );
  15. toc
  16. % Bias 阈值
  17. bias =mean( y - x*weight')
  18. % Support Vectors
  19. disp('Number of support Vectors : ')
  20. disp(N)
  21. Xsupport=x(alpha>0,:);
  22. Ysupport=y(alpha>0,:);
  23. length(Ysupport)
  24. %% Accuracy and F-measure
  25. x=data(:,1:end-1);
  26. y=data(:,end);
  27. fx=sign(weight*x'+bias)';  % 符号函数
  28. [~, Accuracy, F_measure ] = confusionMatrix( y, fx )  % 计算分类预测精度
  29. %% Plotting the Decision Boundry
  30. figure(1),
  31. hold on
  32. scatter(x(y==1,1),x(y==1,2),'b')
  33. scatter(x(y==-1,1),x(y==-1,2),'r')
  34. scatter(Xsupport(Ysupport==1,1),Xsupport(Ysupport==1,2),'.b')
  35. scatter(Xsupport(Ysupport==-1,1),Xsupport(Ysupport==-1,2),'.r')

  36. x1 = -2:0.01:2;
  37. fn=((-bias-weight(1)*x1)/weight(2));
  38. fn1=((-1-bias-weight(1)*x1)/weight(2));
  39. fn2=((1-bias-weight(1)*x1)/weight(2));
  40. plot(x1,fn,'r','Linewidth',2);
  41. plot(x1,fn1,'Linewidth',1);
  42. plot(x1,fn2,'Linewidth',1);
  43. axis([-2 2 -2 2])
  44. xlabel ('Positive Class: blue, Negative Class: red')
  45. hold off
复制代码
core函数如下:
  1. function [alpha, weight] = svm_core_2( x,y,C )
  2. % 输入:
  3. % x是输入样本,MxN
  4. % y是输出样本,Mx1(二分类,-1和1)
  5. % C是惩罚系数
  6. tol = 10e-5;         % 损失系数
  7. N=size(y,1);         % 样本数量
  8. alpha = zeros(N,1);  % 初始化的alpha
  9. weight = zeros(1, size(x,2));  % 初始化的weight
  10. while(1)
  11.     weight = (alpha.*y)'*x;
  12.     for i=1:N
  13.         Ei=sum(alpha.*y.* kernel_fun(x,x(i,:)) )-y(i);
  14.         for j=[1:i-1,i+1:N]
  15.             Ej=sum(alpha.*y.* kernel_fun(x,x(j,:)) )-y(j);
  16.             
  17.             % eta = 2*x(j,:)*x(i,:)'-x(i,:)*x(i,:)'-x(j,:)*x(j,:)';
  18.             eta = 2*kernel_fun(x(j,:),x(i,:)) - kernel_fun(x(i,:),x(i,:)) - kernel_fun(x(j,:),x(j,:));
  19. %             if eta>=0
  20. %                 continue
  21. %             end
  22.             
  23.             alpha(j)=alpha(j)-( y(j)*(Ei-Ej) )/eta;
  24.             if alpha(j) > C
  25.                 alpha(j) = C;
  26.             end
  27.             if alpha(j) < 0
  28.                 alpha(j) = 0;
  29.             end
  30.         end
  31.     end
  32.    
  33.     % Weights 权值
  34.     %     weight(1)=sum(alpha.*y.*x(:,1));
  35.     %     weight(2)=sum(alpha.*y.*x(:,2));
  36.     weight_new = (alpha.*y)'*x;
  37.     if norm(weight_new-weight,2) < tol
  38.         break;
  39.     end
  40.     weight = weight_new;
  41. end
复制代码

参考链接:
【1】SVR回归(线性,多项式、RBF)预测模型
【2】SVM算法之SMO算法
【3】Python底层SVR代码分享:http://pan.baidu.com/s/1kU773lt
【4】MATLAB底层SVR代码分享:http://pan.baidu.com/s/1pLG3dBd
【5】MATLAB底层SVC、SVR代码分享:http://pan.baidu.com/s/1dFEL6vB






算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-5-7 12:14 , Processed in 0.210330 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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