QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3159|回复: 0
打印 上一主题 下一主题

[其他资源] 支持向量机分类算法

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-13 12:41 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    支持向量机分类算法
    ' W* D% w7 v* u7 C$ b6 ], V! u% Y1 x4 S$ ~( B
    🚀 优质资源分享 🚀
    % w0 S; v3 C- `0 S学习路线指引(点击解锁)        知识定位        人群定位+ H/ _8 T: o* F: X9 ]- c6 N) I
    🧡 Python实战微信订餐小程序 🧡        进阶级        本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。7 y5 f/ G( ^  U5 V) f; ^- r
    &#128155ython量化交易实战💛        入门级        手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
    , j  B; M- o3 n5 F支持向量机SVM4 P$ ]/ T2 M9 k5 W$ L$ d. [
    : C8 i, O+ N) P+ h! M
    支持向量机原理0 x5 B4 A  Q. Y. z9 d; o

    # s0 Y/ Q. D/ G1.寻求最有分类边界8 s; b& i+ M8 {% X, p5 @% u

    / n- k# ~/ g* D' o- B8 l正确:对大部分样本可以正确的划分类别& f/ R. _' P/ A0 X

    ) ]3 w% B) r& R; k泛化:最大化支持向量间距5 t; w9 d+ I& H' Y- [' v5 C
    + P& p3 }/ q$ w: O1 u1 J7 o8 S0 A
    公平:与支持向量等距
    : ^2 C; f9 d; r! s  U. |" F7 Z
    / ]3 E8 D' D- W& Q; Z1 ~简单:线性、直线或平面,分割超平面4 ^$ h/ A2 u6 u0 B) E; [

    ' }$ P$ w' F- c- f, g/ U2.基于核函数的生维变换% L3 M# A$ K3 w3 K$ i, d

    - U( Z" {2 O0 N5 G- S# O通过名为核函数的特征变换,增加新的特征,使得低维度的线性不可分问题变为高维度空间中线性可分问题。
    , V1 H' U  G+ C6 m2 ]! C. v0 Y0 @. w$ x" L& A1 W7 Y: N
    一、引论
    , O& l! U& p+ [  L) B# a
    . O( C' U7 V- r2 O3 ]' ^使用SVM支持向量机一般用于分类,得到低错误率的结果。SVM能够对训练集意外的数据点做出很好的分类决策。那么首先我们应该从数据层面上去看SVM到底是如何做决策的,这里来看这样一串数据集集合在二维平面坐标系上描绘的图:
    + Z( z+ v$ e. r2 O7 ]( E+ w# X. u* f2 a5 d6 o/ |3 \
    0 D7 d: \! j  z  \8 W

    ' ~8 ^8 X' [& @: ^8 a  @现在我们需要考虑,是否能够画出一条直线将圆形点和星星点分开。像first第一张图片来看,圆点和星点就分的很开,很容易就可以在图中画出一条直线将两组数据分开。而看第二张图片,圆点和星点几乎都聚合在一起,要区分的话十分困难。! Y& d# {- B/ u3 C* o7 g
    + j4 O5 A6 \  E" P; @
    我们要划线将他们区分开来的话,有有无数条可以画,但是我们难以找到一条最好区分度最高的线条将它们几乎完全区分。那么在此我们需要了解两个关于数据集的基本概念:
    - Q9 n1 k* W! R3 P. Y3 b% l; K+ N# O* W+ e4 E  `( l+ f1 r
    二、理论铺垫- @0 k& J8 Q* D4 g$ o) c) g
    # Q2 ~1 W* G9 M# _! e! F
    线性可分性(linear separability)
    + J% s6 w% W5 L# H+ ~8 m: P$ q' ?1 L2 Y. Z5 ]( v
    ; Y- u6 b4 Z9 Z3 z; O$ [: L( x( l

    - G8 Q! S6 ~: c' q+ `而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。! t3 N( u" D1 Y. K; R1 w

    $ ~5 L  [  G$ X
    9 {/ C0 n$ T, G- p5 O
    8 k% X" X# Z6 Z2 y* y决策边界6 m- o2 ~' N) s0 `4 N

    0 p0 q8 h$ Q( kSVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。那么这个决策边界就是不同类之间的界限。
    ' I% Y6 N' S0 v; j  c) U
    ; ^4 P. H8 F, g8 ^
    9 F8 t, K$ P0 F
    0 _7 }! Q# a7 w5 M& b8 ~总而言之:在具有两个类的统计分类问题中,决策边界或决策表面是超平面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。  z$ _6 i* ]! W& n7 B6 r
    ) {  O3 U7 N$ p9 D1 z  [
    支持向量(support vector)
    + q2 R) u1 S$ y$ \8 ~
    ! \; Q& A! {7 A" w7 `在了解了超平面和决策边界我们发现SVM的核心任务是找到一个超平面作为决策边界。那么满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:- P6 R4 W: W; [& V
    - u% F0 |4 t) k$ O

    ; O+ P- ~9 A! s$ A! D1 |0 W) x
    0 U5 z. G8 z' r7 ~6 @1 B, }/ T5 f, I- N* E

    3 D6 Y# J7 R5 B) D核方法; l; u2 t4 h, s* P, c; h, p8 j
    9 D0 z6 i/ {# n
    ; `+ A7 h  X  ^1 `) k1 F

    & k# {) ~6 Z2 R0 i- L. d. a% C: G; R, h: d
    . q" G  d8 R  o& c8 e$ n  ^7 R
    以回避内积的显式计算。9 W- e* w- F  |3 j

    ) W+ Q3 g" G  a. S3 k: G( D5 }常见的核函数:, m" ~) a* m, W

    , c7 b: P* n+ q  ?8 R/ Y+ r+ g: ?) `, c1 [# ^9 y1 v

    " e4 J. b+ M9 i, C) m; N4 @3 okernel : {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf': T4 l- X6 g( @
    13 m3 l* K, R8 @8 c9 H
    当多项式核的阶为1时,其被称为线性核,对应的非线性分类器退化为线性分类器。RBF核也被称为高斯核(Gaussian kernel),其对应的映射函数将样本空间映射至无限维空间。" b: F3 ~& b; D+ |( H' k
    " d/ a$ P: C8 [5 Z! D
    SMO序列最小优化算法
    8 F8 h5 }4 u! }. {+ U! w' T: f  X; w& m2 d* ~# ~
    + G! D- ?0 P! Z) W. {5 l
    4 q7 D! K, W  k( |& F, Y
    - z, F4 H. |8 }$ q( D
    4 f! t9 d5 G$ h) K) j& m5 L
    2 K& d( c4 J5 I

    2 `  i8 W& \2 H6 I7 |( i- N) n! O# x三、Python sklearn代码实现:( A" f# ^4 h3 k: Q2 W2 X  J

    . _( D. |( P$ C5 isklearn.svm.SVC****语法格式为:/ j$ [/ K, N0 O# H& F# j  e3 Q

    7 _5 \6 ]% [* U6 m- c& |class sklearn.svm.SVC(  *,
    , h( X0 }# |- u5 O" g& {% N8 R# J C=1.0,
    ! ]. b( v1 C6 L+ E2 I kernel='rbf',
    ; B9 i+ p# B! e! k8 \ degree=3,
    5 O  p9 d2 H, x) M gamma='scale', & Q/ k3 h! p& K
    coef0=0.0,
    5 \1 b. I) d7 N4 n8 s shrinking=True, 0 N" y! }/ C( ]9 Y% ^& m
    probability=False,
    - ^, G7 J4 j; P tol=0.001, / p2 |6 d7 ]2 _: i* m
    cache\_size=200, 6 n! g* \3 M* w9 \2 K) n: ~  B
    class\_weight=None,
    0 k3 K  d. Q! B  w, y& e verbose=False,
    4 u  M* s& r9 @3 s9 V2 c& C% Z" {( L max\_iter=- 1, 3 P' A% F; z* \5 @
    decision\_function\_shape='ovr',
    ( T: q8 q6 d: J break\_ties=False, - T$ e1 f- C7 P- g9 l) d2 N9 ]7 A
    random\_state=None)# a, E3 e4 q0 R7 b9 P0 [
    8 F4 i; L" D) n; Y; Y
    1
      R) i2 }" c6 G2 C: r! I$ J2
    & x! M9 c- M5 k2 b3
      u, |4 N8 e' Q2 k/ E4: z" o! U3 }- X" x  }' x" f
    5
    - e3 W* ^/ P. x& {1 g" `0 z! X9 f6
    0 l5 i% g4 t; j2 C1 j8 P7
    0 V; }3 j! ]7 Q5 N5 m7 `8% e) D3 e3 C! ~, f0 s
    9! k1 H2 `/ x9 o0 J- x. G* h
    10$ O5 u6 C, y2 k3 `4 g: V
    11, m, H" G- ~4 \4 D. ?2 T) U
    12
    6 P) K  N% U+ F0 j) b13
    - N& k/ ]& d4 ^0 U0 S14# E* Y  ?, w' m9 q. W4 G  X* {
    15: X5 L# c& E6 a8 \0 {
    16& _3 w, j' N: ?, d. K0 E% h  q
    基于鸢尾花数据的实现及解释/ {; A$ V  k/ a; H" B: w

    2 Y: l; `3 d* A. T( h代码如下:
    3 j+ s5 @* k' ]2 p& ]! n* C- U9 V+ {7 h1 i' r
    1 # 导入模块& g- R- \! Q) K
    2 import numpy as np
    0 P8 d# s' J* N$ o# w/ F  W 3 import matplotlib.pyplot as plt
    ' X3 B4 P& Z, s" h5 ]0 D7 V$ D, |7 j. J+ n' X 4 from sklearn import svm, datasets
    ) I, B7 y, d4 D5 I% C/ U 5 from sklearn.model\_selection import train\_test\_split
    ; ?) c1 k0 @- P- ~$ I 6
    " {  B+ \/ o0 i1 @( L! Y 7 # 鸢尾花数据
    # H- w8 W7 ~+ H  _ 8 iris = datasets.load\_iris()         #原始数据4 l1 o  j2 h& g/ j. u! y
    9 feature = iris.data[:, :2] # 为便于绘图仅选择2个特征(根据前两列数据和结果进行分类)6 {% G9 b7 W3 u+ z2 B; N' R
    10 target = iris.target% N! g3 ~! a# `+ Y
    11
    , X9 K7 s: d. @7 \# @12 #数组分组训练数据和测试数据
    % }! n5 p* W# K" ?13 x\_train,x\_test,y\_train,y\_test=train\_test\_split(feature,target,test\_size=0.2,random\_state=2020)
    0 i) u+ F7 G1 g5 z% y$ D2 W14 5 e! d2 R* E. Y! x! Z  ]& Q0 `
    15 # 测试样本(绘制分类区域),我们数据选了两列即就是两个特征,所以这里有xlist1,xlist20 S& b# K1 @" X8 f- d
    16 xlist1 = np.linspace(x\_train[:, 0].min(), x\_t* D9 S% h( ^5 |' D& h/ O0 X2 C
    ————————————————
    6 n/ G' n# h* I. Z! Y3 v版权声明:本文为CSDN博主「qq_43479892」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。/ U$ Y0 _7 m& L9 b; [, I4 h
    原文链接:https://blog.csdn.net/qq_43479892/article/details/126811791
    8 y' j' u1 [5 K2 `1 q: R, [. g7 N
    4 v2 f& Q% {$ S: q
    3 P; H2 o- a. x: i
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-11 02:11 , Processed in 0.554643 second(s), 51 queries .

    回顶部