数学建模社区-数学中国

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

作者: 杨利霞    时间: 2022-9-13 12:41
标题: 支持向量机分类算法
支持向量机分类算法) [8 V8 Y8 B3 }7 o: Q

5 y  j' x) R5 \' ?🚀 优质资源分享 🚀
! Z4 x' R( e) q) F; U6 l1 F学习路线指引(点击解锁)        知识定位        人群定位6 o4 @& H4 z1 U% U/ p* }
🧡 Python实战微信订餐小程序 🧡        进阶级        本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
! j' {( H2 g1 G& ~& n6 y& I&#128155ython量化交易实战💛        入门级        手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
& R& C. ?/ T6 E2 q: n$ n支持向量机SVM
  }5 s- W% W2 L: l+ P
1 E- g3 P8 T8 _  ~9 t支持向量机原理; f" R; e" G: b' T( i' S! g& `

  }- V5 H$ \5 U5 f" Y1.寻求最有分类边界* G, w6 M% E( q5 L+ Y# E! A3 J8 e
" ]9 W4 Q6 _' [" v2 }4 o
正确:对大部分样本可以正确的划分类别! r4 i' Z& ?, z8 b. K6 M

7 N6 U8 X  I9 S$ l% J4 N泛化:最大化支持向量间距
5 C- I' X0 y; N) s5 O9 A( p5 f
& R/ E. P1 L' K0 h& H公平:与支持向量等距4 ]& C) q8 ]* N1 j2 a/ q

( C' B; a. c) m& x9 F4 v简单:线性、直线或平面,分割超平面7 o# H; _! M. |3 t

7 \( g& a+ [% n  Q7 I2.基于核函数的生维变换
5 s. ^' z8 D/ B/ c( U* A! h
! N# }$ X. a8 ^0 `/ {3 r3 B通过名为核函数的特征变换,增加新的特征,使得低维度的线性不可分问题变为高维度空间中线性可分问题。
3 l% M' r% |5 `9 A4 D& M6 d9 \; O( i1 x3 T( x
一、引论
! h( f( L  D% y* a
% Y% k) f. m9 k; F) P! E* l使用SVM支持向量机一般用于分类,得到低错误率的结果。SVM能够对训练集意外的数据点做出很好的分类决策。那么首先我们应该从数据层面上去看SVM到底是如何做决策的,这里来看这样一串数据集集合在二维平面坐标系上描绘的图:
2 ?$ N1 n% I" |3 u5 N( n3 M4 O. F5 M  P  l9 z4 }; \+ m

; W% N) u* q5 Z8 n6 r) M# y4 M0 i$ ?: ^8 V9 S5 w
现在我们需要考虑,是否能够画出一条直线将圆形点和星星点分开。像first第一张图片来看,圆点和星点就分的很开,很容易就可以在图中画出一条直线将两组数据分开。而看第二张图片,圆点和星点几乎都聚合在一起,要区分的话十分困难。
' R* H9 I; u* M+ r9 D- ^+ B, X
8 e) E% C' ~; h* x我们要划线将他们区分开来的话,有有无数条可以画,但是我们难以找到一条最好区分度最高的线条将它们几乎完全区分。那么在此我们需要了解两个关于数据集的基本概念:
" m% R. @9 _" t. V# _. X/ E* t. i1 X
二、理论铺垫
! ^3 z' `" b5 n7 {& ]9 {
6 o& K6 [& p  @( N1 r线性可分性(linear separability)# L8 y1 m+ j. v; E& l
( O* U% P- T# v8 Y
' S8 W3 }4 @' G! L* j

& Y4 p  w8 z+ d; C6 d而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。
7 Y5 b3 J$ }7 V) X  H4 g
0 K# g6 x# B- V) t; U+ b( D7 p. E3 y0 M2 C  d7 N
* J0 j" d: ?3 D7 V7 P# ?/ G
决策边界: w/ c" h: X( A( ~4 R. ?

! W5 V" x7 ]) y7 oSVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。那么这个决策边界就是不同类之间的界限。
( [: m2 z5 D7 g& j1 e) p! k- L/ P3 z/ }4 e/ G+ X; U5 g1 R

) |5 \" A  O3 {* h; A& Q: M# b% \- r5 [  x$ E, B
总而言之:在具有两个类的统计分类问题中,决策边界或决策表面是超平面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。
6 d3 t& F8 ?! k1 t/ x# R: }. }2 Q: T4 P3 h# a% u, ~! q
支持向量(support vector)  e9 S& N6 \% p0 n+ Q3 u" ]7 k3 ^

4 p4 d& y! P5 d7 }4 W- J& A在了解了超平面和决策边界我们发现SVM的核心任务是找到一个超平面作为决策边界。那么满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:
) \0 `9 E2 l. R( ?+ \# T- F% t
$ O% o2 q4 W' J5 s% p. a# q6 Y6 f7 z% v: B
, n: d% v+ |% e4 R% u" M
4 {% R3 r3 G  W% K2 `% K/ u
6 U. k4 t. o# @# ^) |5 @# a
核方法5 G- i! N' o' {. e- h) L/ h7 R
' I. F8 L# [6 x2 c

; n. t5 I# u$ _+ ]) t: V' c
  _* b$ r% ?. {: E1 v' A/ m7 n
$ Y% ~* ]( C) q: y- q: _% x3 g, ?/ b  ~
以回避内积的显式计算。
) R1 i5 S" F3 w# C% O0 Y& ?, B6 w
常见的核函数:
. Y' s& u8 @" T1 R* J& z
! `9 Y) q6 T- O+ ~6 p; F$ p4 c) ^( }$ B

6 _/ e2 G% U2 v9 Okernel : {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'& W3 E6 |4 M# n/ l
1) R. F: ?. L3 p4 t7 ?& V
当多项式核的阶为1时,其被称为线性核,对应的非线性分类器退化为线性分类器。RBF核也被称为高斯核(Gaussian kernel),其对应的映射函数将样本空间映射至无限维空间。3 j- T, |& B3 B8 \& ^

5 O. X: c) \$ _. K5 _5 P) \8 HSMO序列最小优化算法
! A0 A: g9 F% [5 I9 ^. W' s8 m- E+ s+ ?) j$ Q+ G# [! A7 ]
0 S* L1 K7 }3 u' H5 Z6 |. R7 M
! ^1 S2 a' o" s8 t/ m5 ?
+ r$ h* b4 [+ W9 k5 o5 z4 J

# W, c( j# e0 j( d. a7 T" z/ z
# X8 E- u: h* H, V+ @7 ~; U
$ n7 G0 e4 T8 ^5 ~0 v三、Python sklearn代码实现:* T. U' |" `: G- ~# L% z( m

8 x+ q( \: M) H: @sklearn.svm.SVC****语法格式为:. l+ S6 N6 h) d( N: A, b  L

: b- H  N  u/ ~9 t( ?5 {. `* W2 i! eclass sklearn.svm.SVC(  *,   P# L4 R- o% N" t, ]& d) v! ~
C=1.0,
. \; x3 H8 m2 G; C5 v& m kernel='rbf',; P5 G7 \  r4 e; H/ t
degree=3,
% r! k# S$ v- H6 X gamma='scale', * @! d$ |+ Y+ v1 _; m- P+ [
coef0=0.0,
3 o' h* j! q6 N2 r shrinking=True,
. T+ M7 K4 C1 V7 _4 V6 T( P, E, j6 | probability=False, 9 w8 H( u9 f6 y  U2 _! X. u4 ]9 o
tol=0.001, 8 N: s% r1 a- ^; c
cache\_size=200,
& f* }8 {- r; q* y" ? class\_weight=None,
% _& L3 U- P- E9 {1 p9 {1 K verbose=False, & G4 a4 e1 v5 S, f8 o
max\_iter=- 1,
0 [9 @7 W3 t  s1 o7 i; Z decision\_function\_shape='ovr', # l1 a$ Y' ~3 l+ Z$ q% H
break\_ties=False, 2 K' y* I+ E0 m" `- ], |1 u0 k; M, t
random\_state=None)
" Z) b2 {9 z3 N2 d6 Y: |7 h& _9 X, c) C
18 K. B, F' o! }. {3 \
2, U% B0 o" B5 `% y% _5 t
3
4 a* _; [, Z3 l4- m) V- `3 [4 \
5
6 f* b5 r4 ~) ?1 S3 r5 c6
2 I, i; ?+ \- g3 A7
; ]+ `) E' c3 c$ p8( I$ d) }5 {% A6 p
9
" w: r6 x% C' }4 k% ?3 G0 L' v10  {" H( Q0 _& [6 f9 [3 a3 H
11
; m3 `8 ]& e( {! w- y12
  T2 e8 T& w- C; J' c  i' b5 g138 l! O' a1 T% G9 _+ P  {
14
5 W) ~  E' d4 q9 Y% Z- z15- Q/ c  ^, s7 R2 @9 ~
16
. O% N7 J& z8 }/ `. t! f基于鸢尾花数据的实现及解释
' {+ m9 f. o3 y- u
  W) n* h+ c/ e8 u' K' b代码如下:( X0 _' r8 H( j/ @8 C, O3 R: ^
8 M" Z3 {  z, r" ?
1 # 导入模块+ \( ^& Y2 H9 _# j! T4 |
2 import numpy as np
& a+ g; Z9 |2 x5 u$ C; ? 3 import matplotlib.pyplot as plt
) U& _- U& j. @: e8 t( ~ 4 from sklearn import svm, datasets
* p& m& F% p0 ^6 ? 5 from sklearn.model\_selection import train\_test\_split6 v" M) y9 v4 G) Q  p' I
6 3 q. O- q& d3 A+ p0 `; i0 S# }
7 # 鸢尾花数据0 j2 y4 d" Z) y4 d4 F3 Z1 F
8 iris = datasets.load\_iris()         #原始数据1 K* V, \  o# Z9 C4 H9 u
9 feature = iris.data[:, :2] # 为便于绘图仅选择2个特征(根据前两列数据和结果进行分类)
0 \; R% W6 Q+ S; l3 u10 target = iris.target
, N  F5 U! J' p* [1 M5 [11
* ~" z! o! C  D. O3 d12 #数组分组训练数据和测试数据, P" Y- Q. v3 Z0 c
13 x\_train,x\_test,y\_train,y\_test=train\_test\_split(feature,target,test\_size=0.2,random\_state=2020)' A. T$ B. w) T) I4 g6 G" @# `
14
) J5 V, k6 y6 L- i# L+ h15 # 测试样本(绘制分类区域),我们数据选了两列即就是两个特征,所以这里有xlist1,xlist21 ~/ {0 B( f3 ~4 V
16 xlist1 = np.linspace(x\_train[:, 0].min(), x\_t
* Z) k+ l+ m  e! L4 V! _5 n————————————————
3 K% J3 r2 P, e) ^5 ?' L版权声明:本文为CSDN博主「qq_43479892」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
7 M- [& O" z  q; Z  {) P原文链接:https://blog.csdn.net/qq_43479892/article/details/126811791, n9 f: ?3 A8 W% T

: ?, u4 w4 Y& Y6 _" _# s8 C! w4 j. [3 ~' Q, ?





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