|
点击上方蓝字和“好玩的MATLAB”一起快乐玩耍吧!
: [$ c8 C3 w M* |
% Y5 P3 e: F1 B, P: Z* z( ^% g& L! u
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
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
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
# 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
: T( e, D, F2 }8 a
还有优化的图示哟~+ q2 T; s7 u+ |
/ b7 l1 X- c3 C& I& N8 L
ryi4cpuj3fn6405199254.jpg
5 y8 o% Y; `, A+ S& O. A
- M8 b+ p4 z5 l+ d( G毕竟等了这么长时间直接保存模型就可以下次接着用了
E- H, ` f7 r3 vsave SVMModel9 h1 @3 p4 W+ Z) u6 E
下次直接导入就可
* A9 f9 R" j# H9 `( H/ kload('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
& ^( {' {0 G% n推荐 | 【进阶评价工具箱】|第一个恰饭文章推荐 | 【建模算法】多元高斯回归推荐 | 【建模算法】时间序列分解预测推荐 | 【图像处理】【图像分割】基于对比度限制自适应直方图均衡化和分水岭变换实现细胞图像分割& Y B+ ^- R3 ^6 W: l }
xm50jtoqwn36405199454.png
0 _( k/ m( W' J
/ E1 {: ?: S: Z7 O
oty2lpswppb6405199554.jpg
; ~5 F8 Q. P2 m
4 h' z$ T d" ?↓↓↓ 点击"阅读原文" 【加入QQ交流群】 |
|