数学建模社区-数学中国

标题: 支持向量机分类算法 [打印本页]

作者: 杨利霞    时间: 2022-9-13 12:41
标题: 支持向量机分类算法
支持向量机分类算法
( t8 g" y7 Q5 ^. O' s1 J& w5 v! T: F! F" N* J
🚀 优质资源分享 🚀. T$ g" m4 i5 u0 B' u
学习路线指引(点击解锁)        知识定位        人群定位
; O. H% J) C+ a/ q8 ~🧡 Python实战微信订餐小程序 🧡        进阶级        本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
4 i8 z* ]: B( u, r! F&#128155ython量化交易实战💛        入门级        手把手带你打造一个易扩展、更安全、效率更高的量化交易系统- X: c0 c2 v9 b9 b
支持向量机SVM
8 p& z/ R3 @1 r( d$ C3 O+ K# Y
2 F+ x8 D& Y; A! n* m支持向量机原理
7 F' M6 u  |5 R; x3 U! Q) A
  P+ J5 N4 w( {7 x8 M1.寻求最有分类边界' D( ^6 O# b+ y. `" K- e
5 x' }* Q2 ?' v
正确:对大部分样本可以正确的划分类别# n, H1 r$ v3 P, g3 g( l% J0 r
0 W" t- K+ ~+ j$ ~1 g5 M. U4 ~& [
泛化:最大化支持向量间距
9 R$ |$ z5 x4 P2 e
/ v. I2 A) f) B- m  |0 l6 V) d/ i. }公平:与支持向量等距9 p& O: u8 p  t6 t( U( \/ t

3 j' l3 \1 `% g" V" W简单:线性、直线或平面,分割超平面4 L9 x2 U4 D! t' i. X

$ j+ t; k( a# w% v5 S  U2.基于核函数的生维变换
( B4 ^& Y  k+ F3 f! o& Y6 G
: y- S& D; R! D9 c/ f; y3 P通过名为核函数的特征变换,增加新的特征,使得低维度的线性不可分问题变为高维度空间中线性可分问题。
( Z, Q2 N# w) z/ H  @! k+ v8 ^# U4 _+ |
, N% m  }" F/ O% B! \/ S2 h6 b一、引论9 N* q. v& L. {8 _1 y

' M4 {! [, P! ?: ^. x1 Z' D使用SVM支持向量机一般用于分类,得到低错误率的结果。SVM能够对训练集意外的数据点做出很好的分类决策。那么首先我们应该从数据层面上去看SVM到底是如何做决策的,这里来看这样一串数据集集合在二维平面坐标系上描绘的图:
( N0 A/ T$ V* e
' c& z7 g% }( S5 ?* }2 I
/ z; K  E. E7 N: E) E( S& C0 @8 b8 G2 D* j
现在我们需要考虑,是否能够画出一条直线将圆形点和星星点分开。像first第一张图片来看,圆点和星点就分的很开,很容易就可以在图中画出一条直线将两组数据分开。而看第二张图片,圆点和星点几乎都聚合在一起,要区分的话十分困难。
$ `/ e! ~5 q* |( x+ l. R3 b% N; v9 n: q( ?
我们要划线将他们区分开来的话,有有无数条可以画,但是我们难以找到一条最好区分度最高的线条将它们几乎完全区分。那么在此我们需要了解两个关于数据集的基本概念:! E! ~5 J3 b; v/ A
8 z% e2 e/ m4 ~$ Z# Z  x! c
二、理论铺垫( _( f' D3 h: A6 B
8 k. u, R0 U' N6 C$ w, N
线性可分性(linear separability)
- A. V! ~; I) y; w  z# ~
9 J, K3 h+ v: n2 l0 G) w+ O7 A5 f! p8 R9 t

: O/ x/ E1 U2 j8 C6 Y3 Z而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。
3 F7 e1 c/ M2 `8 w+ O& s  b2 y" ~( |9 l" F. `6 X6 P% g& p/ h

" n) I. H4 r5 V2 p: l' @% }0 o! }% k
- _. _$ `: p( S" w0 C9 [) J$ B决策边界8 m! h& }# |+ D

8 z; v1 |4 K+ TSVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。那么这个决策边界就是不同类之间的界限。
* D9 r  Q2 o* `8 q8 ^; X4 M2 N6 p% y+ a

* V$ E% k- ]# o5 ^% J/ v, W1 L% T4 B: V! w! f* R
总而言之:在具有两个类的统计分类问题中,决策边界或决策表面是超平面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。4 G# r3 H: h% ?0 m2 M) M- Y

( Z5 \$ l8 y$ q支持向量(support vector)
9 A7 t: m7 O7 k' I
2 T1 l8 x- X6 O0 v+ B在了解了超平面和决策边界我们发现SVM的核心任务是找到一个超平面作为决策边界。那么满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:  W2 }& P& A, e3 x$ N' g; `$ m; g: d

5 a# K# z+ L- p3 b, A% e5 S+ \- d' h6 ?
! B3 O5 T; b6 L. l& J9 O- c

( j- o* c" v: h: m
4 M& _7 q+ y+ {! R核方法) O& T1 c' U8 V  B
' U! I( W. B. [- M! {* _6 g

: E4 m% l1 B, Z' z" J( h
0 y; [) A! L2 T- C; }4 b. {" o; H! c' Y+ k) k1 @) E
3 C* a1 i; y: J$ I& [
以回避内积的显式计算。7 G! P& Q# y0 v7 }7 V; v# ?. L

# M# p! R& L% c' W2 W常见的核函数:
8 L: Y( }/ @! O3 f2 v$ t: W9 G& n% }; r9 B- k
) `1 A; b' k& x" X* m, L

  ^: i3 x/ J7 Lkernel : {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'
- G2 u+ o8 c& L8 B1
. C- }+ D% A. w/ i% c当多项式核的阶为1时,其被称为线性核,对应的非线性分类器退化为线性分类器。RBF核也被称为高斯核(Gaussian kernel),其对应的映射函数将样本空间映射至无限维空间。
) Q8 @' `. a8 f- T9 q) d: Y% l% c" a# y5 ~4 u
SMO序列最小优化算法
! q5 X  V# |3 D/ q1 g* F! ^
) g7 L- e1 |% m0 o, P2 P0 W$ b0 [) L8 h$ P9 }) s* x8 l
2 q& A; a( {1 u( w* o" H9 r- \  Y

, a. C% i. A  Z' z* Y5 s1 x$ A; u6 h4 }/ Q
, \0 \8 Y7 {0 f# R

' W2 Q) c! e4 Z  r2 L* V. \三、Python sklearn代码实现:
+ p  W$ Z9 }5 A4 i, G* [# _* @: e0 I" Q. M! [
sklearn.svm.SVC****语法格式为:
1 q/ d4 f" i/ C' u& j, q; @
; J; `/ N) p: D6 M! g) |3 c0 kclass sklearn.svm.SVC(  *,
2 C2 n- @1 B$ L' I. b* a3 j8 h C=1.0,
4 G  A+ V3 A- V0 U9 ~ kernel='rbf',. K( o; v( B1 ~# v+ F# \( @3 q
degree=3, " N/ u+ y; O/ W7 H5 U; E/ ?8 D
gamma='scale',
5 M. I9 f+ [4 [" V coef0=0.0,
0 g! {: a; I. T! s shrinking=True,
# X! D3 z' c8 z: X- a probability=False,
' k  h7 E0 [0 v( v1 c tol=0.001, / v8 G" D( a+ s6 j8 O8 k
cache\_size=200, + y* Y9 R. K# b9 @8 |" R5 J
class\_weight=None,
! W" K! R5 Y8 J- o, `8 x, j1 c( \ verbose=False,   t% x* P6 Z0 y9 P1 v; W( `+ l
max\_iter=- 1, & D+ B' R1 D0 d2 o& v7 l# b) P( \, w9 T
decision\_function\_shape='ovr',
6 ^8 \8 y6 {, A0 A" o( R break\_ties=False, 3 J, I$ M/ O. G
random\_state=None)8 T! O7 z- Y, Z

0 p) f( r' j  \* \0 L1
' C) T* w5 g* A6 b1 l2, e+ `. {! I; P1 {9 ~
3
8 R' T" Q! b+ O% D6 u42 ?% q$ ]0 m; a0 v' g4 _. N5 z
5+ Z, w0 _1 I5 [. W( z1 q% N  H
6' g, N  c/ |3 T3 k% R) |
7
- M9 q/ i9 B& z3 i1 b8  j! [) p& ^+ `
90 k3 c  p  s( f! L  a4 t
10
5 u* |; a) E; ?6 T3 u$ G/ Q5 v5 A11
4 ?) y+ r+ w! O* M12
6 H& x7 `* c# C, o  Q& d  K! H: d13
: ]) F+ S+ e/ i2 y4 y2 F144 p! [4 l1 _2 X3 ?
155 J, s& [) m" j2 j+ q9 H
16# ]- S; U3 ], |. m, I
基于鸢尾花数据的实现及解释1 S4 A& a- \9 e

. [& i; f1 s2 p: f* ^! O6 d' A% k代码如下:
% e0 S  `+ w7 n
: V& }& _8 L! o$ ?( W6 N 1 # 导入模块
$ l+ m5 A1 F, `3 d1 v% W 2 import numpy as np* G# Z: F; p$ U# P$ B4 I: o
3 import matplotlib.pyplot as plt
% s- b, p" _& ~; D: i: L% n) D 4 from sklearn import svm, datasets0 T" K/ F" p4 V( F/ C
5 from sklearn.model\_selection import train\_test\_split: _/ P8 C# S) s) n2 W* g% {
6 ) I% ~& u) F3 i) j# N* H* O
7 # 鸢尾花数据
5 p) d$ x. V0 B7 `+ x2 x 8 iris = datasets.load\_iris()         #原始数据( l0 ?1 g+ f5 w+ m' ^8 _& B
9 feature = iris.data[:, :2] # 为便于绘图仅选择2个特征(根据前两列数据和结果进行分类)
3 B% }# J$ S5 Y* z" j2 N; q10 target = iris.target
" K1 J4 s5 ]+ j+ D# T11 & H1 |* V# Y* J+ |# M& G% f8 h. S
12 #数组分组训练数据和测试数据& J. P6 n+ G1 z
13 x\_train,x\_test,y\_train,y\_test=train\_test\_split(feature,target,test\_size=0.2,random\_state=2020)) d* T* ~' @: O2 ?( k* h; D
14
4 z6 N/ ?, h: w6 i. B15 # 测试样本(绘制分类区域),我们数据选了两列即就是两个特征,所以这里有xlist1,xlist28 S! N6 a4 J2 u( v
16 xlist1 = np.linspace(x\_train[:, 0].min(), x\_t
" f! x( ]* V! z1 y$ g6 h3 C1 |, ]3 w————————————————
' Y# Q* v. N1 j; H% `) E+ }/ F版权声明:本文为CSDN博主「qq_43479892」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; [$ i; Z4 |$ T& i/ H' E
原文链接:https://blog.csdn.net/qq_43479892/article/details/1268117918 l2 F" _+ _& D  m' D
4 g9 e7 u2 v7 z, J* ~
3 o5 r8 U& T" o5 g





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5