在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 564703 点 威望 12 点 阅读权限 255 积分 174634 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
支持向量机分类算法 . L: t, v. U; t/ K( z
! L8 a; t) Y Y7 Y3 M- a 🚀 优质资源分享 🚀
0 v' \- V/ |( o! k$ M 学习路线指引(点击解锁) 知识定位 人群定位8 _9 ^' p0 s6 ^. [8 I: E0 F
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。0 R! D( Q' u" F1 g) J, d, i( Y' E" u
💛 ython量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
/ u( a) B* d% [2 z 支持向量机SVM
0 r$ j+ G% \1 ` 7 v) X2 W5 y1 A N% o4 n
支持向量机原理' U: U& z0 a1 j
$ ~8 B, v, i3 L9 C7 G d2 g8 Z& _
1.寻求最有分类边界
# h1 S6 s' ~8 a& g5 Y
! C) u. y0 Q% p) i) p. n( E ^ 正确:对大部分样本可以正确的划分类别
7 b- q- E1 z& }5 } d! u* ]
Q3 t7 }( {0 x' {- Q/ j2 d- R 泛化:最大化支持向量间距$ E% b) X: i0 e6 \9 E
4 t z7 w, P$ M
公平:与支持向量等距' m0 e! @1 b$ V, h
7 y% c) S; H. f- R W
简单:线性、直线或平面,分割超平面# ]2 k1 c4 o. y8 u7 D, A' I; C
( l! w, z7 b0 y 2.基于核函数的生维变换
- P: U8 U4 j3 Y, d& A # ]6 m I9 @+ e" h. e5 \, D
通过名为核函数的特征变换,增加新的特征,使得低维度的线性不可分问题变为高维度空间中线性可分问题。
( c5 V1 E/ P2 d2 |9 k; D6 v
0 |; L4 h) z! U 一、引论5 I" T6 S2 R' v2 w
2 A c8 i8 D) K( d7 F% B
使用SVM支持向量机一般用于分类,得到低错误率的结果。SVM能够对训练集意外的数据点做出很好的分类决策。那么首先我们应该从数据层面上去看SVM到底是如何做决策的,这里来看这样一串数据集集合在二维平面坐标系上描绘的图:
& B+ V& w" ]5 D/ Z" Q % c. X9 ]7 Q/ b. _ D& X1 ^# N
( A5 b5 k' u. A$ n' j- l
+ ^. i$ O2 i6 W0 f9 z% w, _ 现在我们需要考虑,是否能够画出一条直线将圆形点和星星点分开。像first第一张图片来看,圆点和星点就分的很开,很容易就可以在图中画出一条直线将两组数据分开。而看第二张图片,圆点和星点几乎都聚合在一起,要区分的话十分困难。
+ Z7 r% Z$ o4 g9 ?
' h* x0 P# t$ c/ x1 S1 G5 K( d7 |2 V 我们要划线将他们区分开来的话,有有无数条可以画,但是我们难以找到一条最好区分度最高的线条将它们几乎完全区分。那么在此我们需要了解两个关于数据集的基本概念:
- \, B# t& N2 w! {+ ^
" V0 Y3 p; r7 ?+ r: |7 f; } 二、理论铺垫% B" q0 N) t+ R; C5 i
& H1 ?: J) m: |# r* T$ C5 K" Y
线性可分性(linear separability)) e: j& G) E: C3 }6 \: }, E& Z
7 k9 A$ O3 X5 ~: ]* J( U5 _2 j+ `- x
5 W) {* A9 k% q0 a3 d) s- i0 O1 d# i
k7 c% F1 r5 I; ]# U/ L 而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。
# f! }3 o+ }. C0 B& R
8 T4 \2 x* a! r2 h# t, r ( S" K h- {; R l: K
* R: e- `8 i: o* V/ M# }0 _3 b8 j 决策边界, }0 M) B. H. r% w5 L/ z* {9 N
$ j' b7 U3 q' b
SVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。那么这个决策边界就是不同类之间的界限。
S ?9 ^1 a, S# K, d/ {( S
* X$ l% F6 d" w L. o- ]7 R5 M ( m) v2 r6 t+ a% m e1 b9 y
' h- m0 x3 T5 N0 W" s 总而言之:在具有两个类的统计分类问题中,决策边界或决策表面是超平面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。
% W+ T$ a% b3 J- _; Q $ E5 J; N5 a% F7 I2 C2 E; E
支持向量(support vector); x* x4 U, m% s& v. [. [
3 H5 [- l0 e) T( [" G) j5 Y 在了解了超平面和决策边界我们发现SVM的核心任务是找到一个超平面作为决策边界。那么满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:0 e; H3 B) x' I; ]
, A% Y9 N- I7 Y; v' X: k4 l. X
- z% D3 ?- J: t- C& X9 w
i* \" d4 C$ J5 N, @
/ i+ s+ r8 n1 A% h# l
6 K$ s' H- k0 a6 F j8 D
核方法1 i) B! _' ~# t9 U! ?3 T' A
/ R0 @; o- s) d8 X6 g, K
/ s0 i! \6 U# G9 j) a, R) j1 t
- x- u" w3 H. S3 a1 k
# |9 ?! P$ e* t& g" v4 x# F: s 2 P2 K5 r6 T `, f
以回避内积的显式计算。
8 P2 N, |, t1 n7 l$ E* F, d) `+ ? * ~1 ?2 ~" D5 q+ M/ N
常见的核函数:
% c. \( N* k3 p# `5 [& u O' e
3 b" I Z. @8 v x0 { ; g8 ?; m c8 |) Q' R6 m
" ^3 T+ \( ~& w kernel : {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'# y$ V# q: Q' |8 {8 W
11 |) i1 v) \7 ^
当多项式核的阶为1时,其被称为线性核,对应的非线性分类器退化为线性分类器。RBF核也被称为高斯核(Gaussian kernel),其对应的映射函数将样本空间映射至无限维空间。. \! [% z# Q' E/ |
( @0 j" Q z7 E& h
SMO序列最小优化算法
2 \2 d3 s! T' v9 a " F1 k+ W( L6 Q) ^/ E
& ~5 N" J, D! V3 X, o: k. D: E 8 ?' q& F& I# s4 T. k: `3 F
/ ^: I S' i8 v- H4 d+ S' V
* l7 T0 g6 L4 y9 r
- U2 Z W+ c9 t3 T# c6 l) J
@$ V3 |: [; e) ^: d! \. J 三、Python sklearn代码实现:
& m* }5 N1 O& P" t. z# j+ a
% ~ Y) }4 ?8 P sklearn.svm.SVC****语法格式为:
6 a9 a& E W7 q8 y
0 Q. M: v# q2 ` }6 E6 B, v4 i class sklearn.svm.SVC( *,
" @8 \8 s+ X! z) h! C+ f C=1.0,
; V2 w6 g! k, ]* m$ y kernel='rbf',
1 R$ a& U" C$ N2 j* Q+ X( w8 { degree=3, 9 x0 l, {; }; m6 x8 l# o+ E
gamma='scale',
9 I. W7 c+ a$ ~& t coef0=0.0, 5 ]' G" u- \# u$ w# ~3 B( n9 t
shrinking=True,
" h! b3 B6 n7 X9 I9 b probability=False, : I) A4 t' b$ |
tol=0.001,
$ H _/ S6 {1 ^ cache\_size=200,
. p4 v2 z7 A/ A" c' }( }/ R class\_weight=None,
% H4 j, g' ]) r7 O verbose=False,
3 ?( h+ r6 A! P; v; q max\_iter=- 1, ' P( u8 X& m8 u1 p F" n
decision\_function\_shape='ovr',
9 d y0 {$ ~ L; D* i+ f2 f6 b, T3 M break\_ties=False, 0 s& k9 p- U8 z" d: L$ \" Y: G
random\_state=None)7 y1 [% N% G1 Y1 E' y+ k
{3 Y0 d" K+ @0 d3 Y( P: A3 v 1( u. ?1 e# n; x& A. V6 [3 y
2
* e1 g" A( [% c' W3 D0 u 3# m& l) A* d9 c0 @/ U( u0 L; u
4 d# q2 d7 E0 g2 g
58 q: l' ? m0 z5 l! ~ \+ I
62 |9 N8 i2 S& H
7+ @; `" Y1 n! U% p
82 D4 Q& R0 `" L% u2 E; j
9% ]' A8 \/ s! ~$ l( J, p
10; T: P' h# S9 F2 ?! K% A7 f
11/ h& j+ \, Y* e
128 o% ]3 s, ^ g2 m5 t
13
( J$ A7 l. z' Y; k, [, } 14
) f! ?, r; S0 F, b 15$ t9 u4 h d4 X& G. ]3 R0 x3 _
16; d8 }- w# b4 a0 C6 q2 u5 Y
基于鸢尾花数据的实现及解释- c+ W7 {9 q: W$ M8 L$ y+ i
( E7 b" \5 b/ x# H% I
代码如下:
( P4 ]' K; Y5 y8 @0 o; L 6 l9 X" d( S% u5 g/ U
1 # 导入模块
3 D% b8 X; ~+ `" p$ S 2 import numpy as np. u9 j. L" L+ H
3 import matplotlib.pyplot as plt
. G) z2 N/ N# p! X: h" Q 4 from sklearn import svm, datasets$ F' L4 F# a0 Z! W
5 from sklearn.model\_selection import train\_test\_split
* o/ T& x! e5 I6 |2 U+ s 6
7 ^" S- X9 D3 C 7 # 鸢尾花数据3 p) x* K1 O, `. `8 n( f; s
8 iris = datasets.load\_iris() #原始数据+ m1 S/ |! \4 Z) P4 H1 h0 i+ ^
9 feature = iris.data[:, :2] # 为便于绘图仅选择2个特征(根据前两列数据和结果进行分类)
6 t# G/ P) T! a' I) r [ 10 target = iris.target) Y* D& W+ [5 k) g7 q
11
% g7 C& X; w4 g) @ 12 #数组分组训练数据和测试数据
+ C$ `: K1 b5 ^$ s" L/ k 13 x\_train,x\_test,y\_train,y\_test=train\_test\_split(feature,target,test\_size=0.2,random\_state=2020)4 B; e8 w. v* n
14 ' p* Q' J; b6 M9 K
15 # 测试样本(绘制分类区域),我们数据选了两列即就是两个特征,所以这里有xlist1,xlist2$ O: [- r8 j% r4 B8 w/ u1 \/ a
16 xlist1 = np.linspace(x\_train[:, 0].min(), x\_t
8 N1 N9 g! P" w- `! }5 W ————————————————
8 Q# _ ^" {3 n* Y6 ~8 E 版权声明:本文为CSDN博主「qq_43479892」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
$ A4 s0 P+ R3 J, w9 i4 s' i8 n& R+ ` 原文链接:https://blog.csdn.net/qq_43479892/article/details/126811791/ f- p( ^9 O0 W- ]( X
$ Y# \9 l h8 ?* m/ F3 J4 b& s - F8 ~/ K& q! }7 k! a
zan