- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563328 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174221
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
支持向量机分类算法; f c: U5 e3 T* ?
: h/ e, n9 R# k4 c( n: T2 c& Y🚀 优质资源分享 🚀: ] x1 I+ r, z+ E/ A5 w# [
学习路线指引(点击解锁) 知识定位 人群定位
9 {# A8 S1 ^3 l. b/ ~🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。7 g0 C9 {0 x+ @: p; N$ Y
💛 ython量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统" y% t$ @% H( p/ E: n. x
支持向量机SVM
1 v7 `/ B8 |1 `) V ?/ f, z
0 U( T. Y% I; ]; P支持向量机原理
$ B+ t* L2 g+ H5 m6 j8 d% M# ~3 a1 G8 }
1.寻求最有分类边界
+ {+ f$ s2 N: K+ R, T+ s7 n2 k M+ c, k& M% t* t7 w$ w" P
正确:对大部分样本可以正确的划分类别
3 y3 m& H1 D$ H
4 C# f! T2 ]8 _: H泛化:最大化支持向量间距
# q, E" B8 d: s8 c$ R. a3 ^2 V$ g, M! h
公平:与支持向量等距7 n ]4 @" D( g9 r$ O2 P, ^) ~
- D, Z4 R q7 [: G5 D+ U
简单:线性、直线或平面,分割超平面, C+ Q: I- H" n F
' z1 d& u4 d) @. P, L* R2.基于核函数的生维变换3 k" c0 g/ n! `1 Y2 E1 A6 Y9 K
" \# {2 r' C6 P/ h
通过名为核函数的特征变换,增加新的特征,使得低维度的线性不可分问题变为高维度空间中线性可分问题。0 B9 V! z( R, x; j0 O; \
) g8 g$ ^6 U( B8 c
一、引论! t3 A! U E! Q. Q# X i6 y% N! e
! @: d" @! N* [' W# I3 d# F
使用SVM支持向量机一般用于分类,得到低错误率的结果。SVM能够对训练集意外的数据点做出很好的分类决策。那么首先我们应该从数据层面上去看SVM到底是如何做决策的,这里来看这样一串数据集集合在二维平面坐标系上描绘的图:) z! @! @ U- }4 q* G4 H; Z
) E3 x& e4 M* L
& d& X5 R- V0 e! q/ C. v# o% p, V- ?
现在我们需要考虑,是否能够画出一条直线将圆形点和星星点分开。像first第一张图片来看,圆点和星点就分的很开,很容易就可以在图中画出一条直线将两组数据分开。而看第二张图片,圆点和星点几乎都聚合在一起,要区分的话十分困难。
6 e4 N: w1 c5 O/ Y) q- ` d- V+ f% D
我们要划线将他们区分开来的话,有有无数条可以画,但是我们难以找到一条最好区分度最高的线条将它们几乎完全区分。那么在此我们需要了解两个关于数据集的基本概念:, p) z4 s8 ?1 v/ H2 I1 a2 I! l0 h
2 L4 ?8 k; t4 H1 X2 D% z: b
二、理论铺垫( D$ @4 e/ Q& z6 O: j
" S% N# U! i' K
线性可分性(linear separability)& f9 G4 Y0 l0 ], j, x
# D- ~0 [) S; Y. v
8 W& G# ~; X8 y" N
/ g& }; `: A( B# w8 r. G v而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。$ z8 v5 G$ C: X% _
$ X2 v! H$ i$ q' m) P6 y
* _8 B5 @7 k( K; p+ [- o
( P9 S3 U$ K" ]4 I! ^' P" q% s
决策边界
, y0 d/ k, ~& G# C2 ?' S) P2 ~3 P
1 l% z/ n3 d% w" ^- U) k0 q* Z4 HSVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。那么这个决策边界就是不同类之间的界限。( K4 t8 E0 m& x- X; y) ]
* s; D% V$ }$ j4 u# b; E4 v
% s& v" A- _2 }/ M( M6 q7 a
% U) ~$ n7 A# b
总而言之:在具有两个类的统计分类问题中,决策边界或决策表面是超平面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。+ {. D+ }' G3 F; h+ Z, G
9 T, X8 B; U/ Z
支持向量(support vector)
% ]9 M0 H6 R1 ]; F3 S0 ~; o' t {1 p6 |7 v+ u j* G& R: D" `
在了解了超平面和决策边界我们发现SVM的核心任务是找到一个超平面作为决策边界。那么满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:
% T& A+ O/ ^ q
s1 ?( R0 b: ]7 k9 h% k
" I0 d% ~* A [2 t J& u# \
/ a5 j6 e' g4 q& [$ X$ C8 C t, J, `) p/ E$ k/ Y* i
, S: |: z6 I U% F4 t1 A核方法
2 D; [& i* x! G7 i9 t
( N8 {% ^2 @' Q4 r% a$ p# t5 W. ~; z" T% c2 Z4 h
+ z* ~9 y# c; w- q, _0 k4 J: e
v W/ i8 N, j
1 h# }! B5 Z1 ]以回避内积的显式计算。
4 I( B7 y3 f V7 S
. ^/ U( z$ M# Y' K: Q/ P常见的核函数:8 b8 k1 |, U) _9 m# A" z
3 t& t) [7 v7 v
5 V# b0 b" o& L$ s/ y" ]" a9 Q
kernel : {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'
6 V/ x9 `( ?& N1+ r7 ~; R8 _8 H3 [ G. k; a6 x
当多项式核的阶为1时,其被称为线性核,对应的非线性分类器退化为线性分类器。RBF核也被称为高斯核(Gaussian kernel),其对应的映射函数将样本空间映射至无限维空间。
* M5 R" r( h1 Z! I0 S) q; r( g; W4 j( j s
SMO序列最小优化算法
6 _& A/ c. P3 t! q8 d6 f, r; c# H; [6 d0 ^' B8 ~
8 S! Y0 i* ?. }" g, F% ?( |
% ^* c3 H# O/ Z- P/ f# Z; a3 N O! E
6 v2 V$ G2 X. l0 k5 Z; A
# J1 b4 T$ ^/ ?, u8 N- e& z) l W/ p% H7 v7 r* D: E( o& Q
三、Python sklearn代码实现:
. H) K) `/ a( U9 u
& k9 r+ `3 k W7 L& y6 H) c- A8 ^sklearn.svm.SVC****语法格式为:
. z6 j8 y1 a6 S3 m' v# f8 _: r7 A$ v1 d
class sklearn.svm.SVC( *,
) J1 e( H Z# i" i* A( t; \ C=1.0, 2 G4 l, I* c$ y/ Z7 c
kernel='rbf',. `' X' J% w/ e5 |: s" A0 u
degree=3,
* j; p, B- e! M- \ gamma='scale',
/ {/ r3 _* e' x# v- f) ^ coef0=0.0, ' \ X9 T8 l4 N; r3 k
shrinking=True,
6 r0 I( z2 L3 p) T3 K. f probability=False,
% N( d; |0 @; l7 O3 v" e3 \ tol=0.001,
' n1 B7 e. `& U' E* G. ? cache\_size=200, : Z0 G- c% k% D* k
class\_weight=None, # Q, v7 O0 {# {: k
verbose=False, , R: z7 B7 i* J1 ]7 g b; Y
max\_iter=- 1,
3 ]( A0 s: x# k* a% X decision\_function\_shape='ovr',
& l- m7 w" Z- [ break\_ties=False,
3 u) J& O9 n, Q7 z: M; ~8 ` random\_state=None)3 E! p1 W; a" U V# M1 _
+ U3 v" M- b$ K9 P7 g1
% k" f% R4 A! J Q2
0 p% {3 |* f9 k6 l) n: _3 D3
5 g! r& g$ V& v. @0 ~4
- o5 N9 U+ y2 T, ^- q5! B/ I X& i& t5 s
6: w( c' g4 |: L. J+ H) F
7
$ F7 r/ [$ e8 s1 i( l7 t& E6 I87 S/ O' K* H- q: R" O
9
; u2 V) f, ~( Z6 \10
. Q& O5 g! f- O6 o7 @: d3 |' i8 ?11- Z4 E8 }2 H: U/ l
12
0 Z6 {9 o* `" ~2 u2 u1 @" }) ?13& ^. ^! h0 e& {0 \: q) z6 V
14
+ H$ W z2 M/ ` t+ z; B5 n15* Z4 K" M7 [# p) K9 X6 x, A' I
16
- D' E: w7 S! `基于鸢尾花数据的实现及解释2 x g/ n- p* s' T2 i
. n& Q1 x5 }- B) [: Q8 _ [
代码如下:* b- b' n4 H- }* U
u2 e2 \4 l! b) m0 F, j- Z
1 # 导入模块. o! F& A1 Y% Z- R( \
2 import numpy as np4 h$ w! [: z$ O8 M( p0 x& }% F
3 import matplotlib.pyplot as plt
6 O1 b7 { q9 g0 P 4 from sklearn import svm, datasets& t# h& ~0 Z* @' L! b
5 from sklearn.model\_selection import train\_test\_split
. y$ R1 E9 m! a 6 0 S. d/ o7 ?* n5 x. Y8 P
7 # 鸢尾花数据 w8 `& A; }$ a+ A9 l s4 ^% D
8 iris = datasets.load\_iris() #原始数据! y, J7 J7 \& J S9 w! f* A3 P
9 feature = iris.data[:, :2] # 为便于绘图仅选择2个特征(根据前两列数据和结果进行分类)' h/ t' A6 ?1 H# N: C& C
10 target = iris.target& R7 m8 Z4 L/ d4 C
11 ' i! @/ R( p( a* h
12 #数组分组训练数据和测试数据/ i' N! O1 k0 K% @ O& \. d6 G I
13 x\_train,x\_test,y\_train,y\_test=train\_test\_split(feature,target,test\_size=0.2,random\_state=2020)
" R4 C% s6 E: w* m; o0 C14 $ Q3 N+ d2 g5 E/ w0 W# L
15 # 测试样本(绘制分类区域),我们数据选了两列即就是两个特征,所以这里有xlist1,xlist2& s- y+ g/ G. C: Y6 v( u: L
16 xlist1 = np.linspace(x\_train[:, 0].min(), x\_t: X& O n! g# v6 r l
————————————————
) K( q. Q7 N$ a# R* Y" I版权声明:本文为CSDN博主「qq_43479892」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
/ {% W0 Y$ v3 o, C, g$ I( l5 z( M原文链接:https://blog.csdn.net/qq_43479892/article/details/126811791) f% @1 v0 j; m8 S9 h$ m
* {- G! n; M% D' G( M e
" ^8 ]6 @, x5 S8 Q |
zan
|