电子产业一站式赋能平台

PCB联盟网

搜索
查看: 234|回复: 0
收起左侧

【建模算法】SVM二分类|MATLAB实现SVM到底有多简单?

[复制链接]

260

主题

260

帖子

1829

积分

三级会员

Rank: 3Rank: 3

积分
1829
发表于 2023-9-6 00:01:00 | 显示全部楼层 |阅读模式
点击上方蓝字和“好玩的MATLAB”一起快乐玩耍吧!
: [$ c8 C3 w  M* |
% Y5 P3 e: F1 B, P: Z* z( ^% g& L! u

ioye3iwv2326405198754.jpg

ioye3iwv2326405198754.jpg
4 U1 b* n: _6 U
好玩的matlab
( j9 |  B" x% _& p带你解锁不一样的matlab新玩法
' h4 O9 @) ?* Y, b
% b: `$ x* G6 t) T( U喜欢此推文的小伙伴们记得点赞+关注+分享
& s5 u7 B7 q* P( H+ W01
1 L$ z4 \6 c, t  G算法用途
( r6 g+ Z! j* j( r% f) `: U* F1 x) y! }7 }

ixjsmvbpbwa6405198854.png

ixjsmvbpbwa6405198854.png
2 o$ e- O: l( \( e) `; j7 t6 Z7 Q
支持向量机(SVM)从数据中找出一个数据的分割超平面。将两个类别的数据完全分割开,并且在模型构建的过程中,保证分割区间最大化。SVM多用于聚类,当然也可以用于回归,今天来看一个SVM二分类的例子吧~3 t5 V) T$ B5 {: n, I4 O

' l. W' q6 m$ _4 c8 }029 [- W: j& k3 L
实例分析: x- u; m# W' ?$ @

5 Q% D4 ^" y1 K$ s/ z4 j【和之前Logistic二分类使用一样的数据】用心脏病判断数据为例,最后一列target为判断结果,即因变量(0-1变量),当target为0时,判定未患心脏病,当target为1时,判断为心脏病。通过前面一系列的年龄、性别等指标作为自变量进行判定。数据来源于参考链接[1]。数据形式如下:" C" y' ]% ^& l6 `! B; Y
& J" I& R/ \) _5 C. t- R

gt2mqa14jx46405198954.png

gt2mqa14jx46405198954.png
3 M$ J1 M) E2 P* |& \3 z: O

% ^9 |$ a* N9 B2 x9 E% B$ y9 s; ~/ Y
. r$ D# a, H8 r9 @032 A8 _+ x/ \: V# V% ?
直接看源码吧5 W7 u. W9 S# H7 ~( N% R) W* @1 G
" S: |$ j. E& l( o& j" _+ A+ z% E" }) F
完整二分类SVM代码
2 Q/ d& K' W# R6 p3 ^9 S
6 h; s3 Y0 _. L. \: q
7 c) C! D. K3 R) D
  • %2021/8/24%公众号:好玩的MATLABclc;clear;close all;load('heart_data')    %数据 和logistic二分类那篇推文data=heart_data;data(:,end)=data(:,end)+1;  %注意 0-1标签数据要做成1-2标签的num_train = ceil(0.8*size(heart_data,1));%整个数据的0.8作为训练集choose = randperm(length(data));train_data = data(choose(1:num_train),1:end); %训练集label_train = train_data(:,end);   %训练标签test_data = data(choose(num_train+1:end),1:end); %测试集label_test = test_data(:,end);   %测试标签SVMModel = fitcsvm(train_data(:,1:end-1),label_train,'KernelScale','auto','Standardize',true,...'OutlierFraction',0.05);[~,score] = predict(SVMModel,test_data(:,1:end-1));[~,label_pre] = max(score');accuracy = length(find(label_pre==label_test'))/length(label_test);disp('SVM二分类正确率为')disp(accuracy)%%  10 折交叉验证CVSVMModel = crossval(SVMModel);classLoss = kfoldLoss(CVSVMModel);disp('10 折交叉验证正确率为')disp(1-classLoss); }4 O8 C8 B& t/ F3 F/ I3 ^7 |

    fnvlnffk4rw6405199054.png

    fnvlnffk4rw6405199054.png

    # h5 l$ e6 S2 W; V试了几次,准确率都在0.8~0.9之间,准确率显然比之前的Logistic回归高挺多~( j9 G: S8 H) I" }9 u

    ! m9 p1 ]9 K6 J5 q& qSVM自动寻优
    + i3 U% m( E- L4 i
    $ p4 o( I+ ^$ y; n( R
    / U( o* P; P0 |2 b( U通过使用自动超参数优化,找到最小化五折交叉验证损失的超参数
    7 q2 V8 H/ T/ m/ j9 E9 ?
  • %公众号:好玩的MATLABclc;clear;close all;load('heart_data')    %数据 和logistic二分类那篇推文data=heart_data;data(:,end)=data(:,end)+1;  %注意 0-1标签数据要做成1-2标签的num_train = ceil(0.8*size(heart_data,1));%整个数据的0.8作为训练集choose = randperm(length(data));train_data = data(choose(1:num_train),1:end); %训练集label_train = train_data(:,end);   %训练标签test_data = data(choose(num_train+1:end),1:end); %测试集label_test = test_data(:,end);   %测试标签%% 通过使用自动超参数优化,找到最小化五折交叉验证损失的超参数SVMModel =fitcsvm(train_data(:,1:end-1),label_train,'OptimizeHyperparameters','auto', ...    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName', ...    'expected-improvement-plus'));[~,score] = predict(SVMModel,test_data(:,1:end-1));[~,label_pre] = max(score');accuracy = length(find(label_pre==label_test'))/length(label_test);disp('SVM二分类正确率为')disp(accuracy)可能需要等个十分钟左右(看电脑配置)出结果,毕竟是优化参数了,得到大概结果如下:
    9 X/ }2 w, r5 c" ]7 T; c; ^. V( D$ s1 F. e

    fy0bqtsghoe6405199154.png

    fy0bqtsghoe6405199154.png
    : T( e, D, F2 }8 a
    还有优化的图示哟~+ q2 T; s7 u+ |

    / b7 l1 X- c3 C& I& N8 L

    ryi4cpuj3fn6405199254.jpg

    ryi4cpuj3fn6405199254.jpg
    5 y8 o% Y; `, A+ S& O. A

    - M8 b+ p4 z5 l+ d( G毕竟等了这么长时间直接保存模型就可以下次接着用了
      E- H, `  f7 r3 v
  • save SVMModel9 h1 @3 p4 W+ Z) u6 E
    下次直接导入就可
    * A9 f9 R" j# H9 `( H/ k
  • load('SVMModel.mat')[~,score] = predict(SVMModel,test_data(:,1:end-1));[~,label_pre] = max(score');accuracy = length(find(label_pre==label_test'))/length(label_test);disp('SVM二分类正确率为')disp(accuracy)
    1 z: o* T7 y7 JEND
    ( |+ T% f- M) y0 k7 g+ y好书推荐:
    & V( O: t7 u2 I) F4 T2 r本书共分15章,内容包括数学建模概论,初等模型,微分方程模型,种群生态学模型,线性规划模型,非线性规划模型,层次分析模型,随机模型,动态规划模型,图论模型,最短路模型,网络流模型,数学建模竞赛案例选讲,MATLAB软件使用简介等。
    7 F. ]- v; W# d( i参考资料:
    ' L: r% T( y) [9 U5 p【1】数据来源:https://github.com/omkarsutar9702/heart-EDA/blob/main/heart.csv8 q; i& h1 |3 K* D

    3 [- Z% C9 C: q% u% Q" l5 Z6 O  N8 Y
    ' m1 S* z2 q, T/ {往期精彩回顾3 @  O- t* \+ c0 E! l! \  T

    lozmzment3u6405199354.png

    lozmzment3u6405199354.png

    & ^( {' {0 G% n推荐 | 【进阶评价工具箱】|第一个恰饭文章推荐 | 【建模算法】多元高斯回归推荐 | 【建模算法】时间序列分解预测推荐 | 【图像处理】【图像分割】基于对比度限制自适应直方图均衡化和分水岭变换实现细胞图像分割& Y  B+ ^- R3 ^6 W: l  }

    xm50jtoqwn36405199454.png

    xm50jtoqwn36405199454.png

    0 _( k/ m( W' J
    / E1 {: ?: S: Z7 O

    oty2lpswppb6405199554.jpg

    oty2lpswppb6405199554.jpg
    ; ~5 F8 Q. P2 m

    4 h' z$ T  d" ?↓↓↓ 点击"阅读原文" 【加入QQ交流群
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表