- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563333 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174223
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
支持向量机分类算法
9 N/ V# I& s, v" Z
% u" S0 J6 ^: I' z ?3 `🚀 优质资源分享 🚀
* I! c W4 g" D, @5 u! b( w* S学习路线指引(点击解锁) 知识定位 人群定位- v; A7 C- ^1 s6 b
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
) C5 }, v2 }. D5 Y1 a" @7 x💛 ython量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
% ^. L* K4 g. B* \8 I& m$ f支持向量机SVM: w: O" Y# K# |. j J3 |1 X
! p% m% I. _" y支持向量机原理: F! f. P! T3 e
7 c& C, ~4 M4 C2 T' a; [
1.寻求最有分类边界
; ~" j h% m& u$ z! z" y
; h2 R; ?& N8 [! g; f' _正确:对大部分样本可以正确的划分类别( U) t! t) S! k; A* T( O' ]
# A- ?# P/ k. Z N( _
泛化:最大化支持向量间距8 ?2 l5 w) |% J6 y# F. D
, i2 a# `& u( n) H& }0 ~6 T8 m公平:与支持向量等距, X# e1 Y- ^8 n( {3 f, j# z
% X8 w* t- E) M- O6 I
简单:线性、直线或平面,分割超平面% W' Z; C) v2 V$ U. I K% M
# F$ E& `. l+ ?. `1 n0 x
2.基于核函数的生维变换
8 K. S" N- O3 y- E$ e! T9 u0 ^; j i5 j6 W
通过名为核函数的特征变换,增加新的特征,使得低维度的线性不可分问题变为高维度空间中线性可分问题。7 M4 P5 Q4 r* x( ^; l1 m( {
& g* T* I+ w6 \; b) p) [
一、引论. R" Y5 E+ m$ Q1 R( ]
3 v& _ K8 y L5 U3 x
使用SVM支持向量机一般用于分类,得到低错误率的结果。SVM能够对训练集意外的数据点做出很好的分类决策。那么首先我们应该从数据层面上去看SVM到底是如何做决策的,这里来看这样一串数据集集合在二维平面坐标系上描绘的图:
# u# f3 ~5 M; |% P
4 j# k% M* I0 |+ W" T$ D9 s
5 c# x' H& C7 l& N- S( w6 W3 X, X9 H0 O* K
现在我们需要考虑,是否能够画出一条直线将圆形点和星星点分开。像first第一张图片来看,圆点和星点就分的很开,很容易就可以在图中画出一条直线将两组数据分开。而看第二张图片,圆点和星点几乎都聚合在一起,要区分的话十分困难。& P+ x( f+ j4 a W7 d
) r7 d: _+ e, q+ Q: _我们要划线将他们区分开来的话,有有无数条可以画,但是我们难以找到一条最好区分度最高的线条将它们几乎完全区分。那么在此我们需要了解两个关于数据集的基本概念:
! @% f5 _$ Q- Q; n9 \& e1 {8 M8 |
+ ~8 f+ C% r! N% T, v5 [7 W二、理论铺垫
% h( H9 x' Z0 u2 V, O
3 w6 y; m9 q9 _2 V线性可分性(linear separability)6 q6 v! H, W8 G7 o9 d
$ G$ j" [* x1 [) R
' s/ h0 m6 q7 c f! {+ \% {1 u( \3 p5 e0 r3 d( v
而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。# i# v+ D; Q" W1 P6 o* Q4 [/ r; N* C
/ k) {3 v- C& X- Q2 R6 s
# _% C8 l2 K0 _$ q
+ m: l5 S" W1 S# a% ?& P决策边界
" V/ s0 H3 Y0 E9 B8 B
. p3 w7 g2 _% }' a7 {+ B& ^SVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。那么这个决策边界就是不同类之间的界限。
m( g& s2 G. P5 S) k+ d5 P& G6 l( j% {, w+ V: b
2 h! b% d Z: t7 M
" T/ E5 _0 M; x& t, q L1 X, k
总而言之:在具有两个类的统计分类问题中,决策边界或决策表面是超平面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。
; y+ s$ d7 q: C, j' d, Z. l1 B6 s; U6 b+ W. c7 o& g0 H G
支持向量(support vector): P, H* Q+ |, v! q" x2 N
! w- l0 r9 }0 ] B
在了解了超平面和决策边界我们发现SVM的核心任务是找到一个超平面作为决策边界。那么满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:
' K! k" U; x5 }/ B: k( G$ @5 a) f+ O6 C s
" ?# `+ |. e) Y6 X) r2 A
: T# J( x, Y& g! b: e* l5 ]
* p6 Z" P1 H/ x. `- q
; @; i* I. f" ?1 f f$ l
核方法
/ w* m+ x! A9 D# k8 I( \5 \8 ]5 c( o" [
m* C8 v, I9 ^4 `6 X. Y
( b) z+ h; X* [5 D8 ^( o2 v6 B/ N1 `
! [9 v" {5 o( d3 O
& \. E2 w6 n' r以回避内积的显式计算。- k0 S6 O1 m3 @, W# p) H3 ^
! l2 H% z& b$ Y" H& V7 D/ _
常见的核函数:1 R2 i7 `+ i }5 X( x* n! t
/ {9 \2 J8 I( P9 n5 ^
5 v/ h8 t& U' N
& K6 f" \" ~) f2 Vkernel : {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'
+ _1 a$ m( u$ F) R2 m1
7 e6 `. U# \8 f* V当多项式核的阶为1时,其被称为线性核,对应的非线性分类器退化为线性分类器。RBF核也被称为高斯核(Gaussian kernel),其对应的映射函数将样本空间映射至无限维空间。: T! s+ t% u$ J1 r9 D9 h% }
$ D& T( f4 s, u' OSMO序列最小优化算法6 n3 B# W9 {2 d6 y6 ^
' g. _* Z# B( m0 ]4 m# T- A! n
$ V& L* n$ V3 I, l V, k3 p! j. J
0 n5 b' ?3 a9 S6 @* ] l! [9 N2 j7 g2 h2 |
+ L; {& \3 Y" H) r v
/ o6 l' Q: p# M) x* V. Y. U3 L, {+ R7 [4 \) t& i
三、Python sklearn代码实现:
. c' z' @- A9 z/ O% F& P- {6 f% G' c8 N+ Y4 B( Q7 `; t
sklearn.svm.SVC****语法格式为:6 ?3 J2 i) o3 }0 @. s: j
* [6 k# E. ]$ h8 o `7 w$ K
class sklearn.svm.SVC( *,
& n$ @. v3 ?% T; x4 l+ { C=1.0, , U: T2 ?7 Z( Q G; M9 V# V
kernel='rbf',) Q! R* F }* I( E, X
degree=3, : ^3 C; V! h6 T, p+ g
gamma='scale',
4 O9 V) K; x+ B% a/ z) P coef0=0.0,
6 w' q; F: m$ g3 U( f2 h8 Y4 \ shrinking=True,
8 S9 s! f, t% N probability=False,
^. {$ ] o/ B9 R0 ?' q% p( X. P# W tol=0.001,
T* H2 E7 @6 q' g cache\_size=200, ; T9 U% E0 l0 N2 c& X
class\_weight=None,
# M6 d, A' y" F4 Y0 o$ n* o verbose=False, * p' c1 k2 E8 f
max\_iter=- 1,
5 U" L$ \7 s. r- u; `( R3 b decision\_function\_shape='ovr', * Y ^0 g) g& _3 h6 p( B5 d! r: Q
break\_ties=False,
4 K& D. G- M9 a- t random\_state=None)9 r! H5 \4 c# a+ T& E" g. H, H1 \
2 x# e% Y3 l! O/ B: @1
( W& Z6 O: d* {; G2 F8 l' }25 D- n7 J$ S1 ]- k
37 q* v1 _4 |, r. M+ C
4
% F9 Y) n- ~' \( g5
2 r7 @/ {7 S8 R# ]6& r4 B# c- o' a" L: |
71 U m& T. B8 Z; C. G8 o
8
# X: ~' g' w G9 E, y" o* P, R9
- v5 R! _1 U4 d* K) R) }. Y- P102 Y4 n0 c' T' f$ r8 R& l
113 H7 N+ \2 V4 t3 H
12# }9 a3 g! ?$ w4 U2 n
13* t2 Q- S( V# h7 A" b
14
# D, V. I/ o* u. \ j15
! @5 g2 o2 V% R7 ^16
5 W. R' K0 k5 u6 v4 N! T0 B* v基于鸢尾花数据的实现及解释
) `5 `) n6 Z! o, n
) j, A) @' g% N代码如下:2 y4 Z* S9 I+ \' H' d! k
4 N Q5 F; k- l4 \! B& o
1 # 导入模块) U/ p8 u/ p- w( e# W7 O
2 import numpy as np
. z/ W6 ] ?% _3 A 3 import matplotlib.pyplot as plt) B# X4 p0 T: J
4 from sklearn import svm, datasets
1 }+ y' \' l/ y, y$ L/ a3 v 5 from sklearn.model\_selection import train\_test\_split
, B/ Y% s) i! ]8 _ 6 0 h0 M ], {$ V0 B
7 # 鸢尾花数据
1 D$ \ W9 N9 ? 8 iris = datasets.load\_iris() #原始数据; N4 m7 B s* G/ y2 t
9 feature = iris.data[:, :2] # 为便于绘图仅选择2个特征(根据前两列数据和结果进行分类)
) g! W9 P( d( a2 d0 ]) Y10 target = iris.target( f6 ?9 y) X% F" L
11
" \! L: V+ R( {) Q9 Q* x4 P12 #数组分组训练数据和测试数据5 P8 H+ m- m! x6 }: {
13 x\_train,x\_test,y\_train,y\_test=train\_test\_split(feature,target,test\_size=0.2,random\_state=2020)
2 { K2 r% d3 ?14 & _2 M% f {4 D' x& z5 L
15 # 测试样本(绘制分类区域),我们数据选了两列即就是两个特征,所以这里有xlist1,xlist2; L( K7 f* _$ M
16 xlist1 = np.linspace(x\_train[:, 0].min(), x\_t
7 }$ I! \- D6 r3 j————————————————
+ n2 h+ v1 C) B) x版权声明:本文为CSDN博主「qq_43479892」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: [+ i' c4 z( {% |
原文链接:https://blog.csdn.net/qq_43479892/article/details/126811791
/ F8 t* F" e7 O% b8 N- D$ _$ r& _& |( e- r4 [- p, o! \2 `' i/ c
8 I; @: n' [$ V' f5 _9 w2 V; X6 ^
|
zan
|