QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2134|回复: 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
    支持向量机分类算法1 i* u' B* d2 Z. C' X( ~" e3 c
    . y/ }3 p0 {+ ?
    🚀 优质资源分享 🚀0 T) ?2 _! d; X% q
    学习路线指引(点击解锁)        知识定位        人群定位: a2 f+ ]3 T% G" ^7 Z' @% h
    🧡 Python实战微信订餐小程序 🧡        进阶级        本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。: ]" Z0 T- I- w" }/ q  f
    &#128155ython量化交易实战💛        入门级        手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
    2 m$ E6 E- y5 J! N/ e支持向量机SVM
    % J: A0 g+ ]9 Y8 R- a2 b8 h0 W4 \1 g" f& g1 Z
    支持向量机原理' F9 d1 U) G9 D8 l  K

    ) a9 s; _2 N: ]- T/ A; }" u1.寻求最有分类边界
    , k+ a6 j' K8 t5 W
    ) Q  X* s( z& Z* }正确:对大部分样本可以正确的划分类别
    " j- W0 f# X6 ^. Q* u* B
    ) Z6 e* O9 [  A5 o泛化:最大化支持向量间距0 s2 d1 w; G( a, L6 Y

    % x- m4 F3 q& l! z/ Q公平:与支持向量等距! R+ h1 y' P5 x# \0 Z
    3 _; A" X# ]6 B( c* @
    简单:线性、直线或平面,分割超平面
    + I( {) L5 F* d( `
    ; J7 \! z' F/ n! k2.基于核函数的生维变换
    7 |2 m0 \+ C7 M  t4 O6 c7 e
    ! K2 A1 E4 B) V8 d$ ^' S通过名为核函数的特征变换,增加新的特征,使得低维度的线性不可分问题变为高维度空间中线性可分问题。
    7 }, k" f. |" j& u3 K0 M. \9 T
    # G0 _0 W" ^+ x一、引论, x  {- C3 L7 K( r: ?

    4 q6 ^* o9 c2 {" _' V使用SVM支持向量机一般用于分类,得到低错误率的结果。SVM能够对训练集意外的数据点做出很好的分类决策。那么首先我们应该从数据层面上去看SVM到底是如何做决策的,这里来看这样一串数据集集合在二维平面坐标系上描绘的图:8 N* H' Q" T3 r; F1 s3 D" O
    / w% m7 d& A4 {* v: I0 `

    8 C0 {0 e3 C; o0 H) |
    3 I" `% N) @4 d现在我们需要考虑,是否能够画出一条直线将圆形点和星星点分开。像first第一张图片来看,圆点和星点就分的很开,很容易就可以在图中画出一条直线将两组数据分开。而看第二张图片,圆点和星点几乎都聚合在一起,要区分的话十分困难。0 e4 i, f! B' }, p/ ^0 P
    : [. n" O( H" ^
    我们要划线将他们区分开来的话,有有无数条可以画,但是我们难以找到一条最好区分度最高的线条将它们几乎完全区分。那么在此我们需要了解两个关于数据集的基本概念:6 Z  G: @5 z$ a

    0 @. W4 m& F  x  R6 V2 v/ o5 w5 l二、理论铺垫
    2 L, _0 F+ g3 J
    ! Z  ^, M! Z, O- v+ L( k+ F2 ^6 X) @线性可分性(linear separability)/ e* k! N" y* @2 @3 X
    9 T. ]* F4 _- `# g& L5 Y9 x/ g
    * ~' l& o9 }6 }) a3 |
    - P: Q9 x: K* y' N
    而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。
    6 |* ^; F5 j; U9 g
    7 q) G  s" `1 u. H! j
    * V$ {; z. {5 j7 g5 V) w3 Q. ?& |9 S, m% ]% J1 ^
    决策边界) p" R, F/ c0 a
    8 p. @! [* x7 o& ^
    SVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。那么这个决策边界就是不同类之间的界限。1 V# p* n; y, F; `6 b: P

    6 l% a  K# q1 B8 f6 D* O
    6 }% a; P" A' B  r' W
    * [/ A! G2 l6 g% s& f9 X总而言之:在具有两个类的统计分类问题中,决策边界或决策表面是超平面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。
    , D0 }. z0 N% N+ F% f% a2 i
    ) p+ F! k9 B  t. ^* _支持向量(support vector)
    5 H! n3 K. [" r) x0 O8 E4 L3 c& p2 i  c* P
    在了解了超平面和决策边界我们发现SVM的核心任务是找到一个超平面作为决策边界。那么满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:
    ) b; W7 v9 [; a1 g3 V) x1 I
    / a: M# c$ q  _; x6 b7 r% J" B/ |6 s2 J! u* T9 ]" s9 S2 z( E* J
    : U* o2 ^' G! Y2 q" J

    5 p4 L6 s9 x$ k! P3 n0 }4 s) A9 B5 \& K
    核方法& S5 @# v- J& ], i( O8 C

    1 Y* @+ x' C; \: z" ~& Q2 G* s
    - B$ X) L1 j4 Q  F; y8 n, [. _4 @3 j" Y) X1 b, s9 M1 c

    ) }3 o* z2 H6 u' t7 }7 v. q' t, `) Z( U( r1 V
    以回避内积的显式计算。, ?7 R5 s+ P$ s8 t7 N. _
    5 {. l: E9 a- w
    常见的核函数:) X# m, S/ O0 n/ o  h, H
    1 P% j& E0 y; s4 a8 a, P" [" [

    + a1 H  v; ~5 x1 w, Q4 ?0 U0 p7 U+ E
    kernel : {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'. }! b. M( z; t- S
    1$ D7 D2 H4 l. N+ F; L' w
    当多项式核的阶为1时,其被称为线性核,对应的非线性分类器退化为线性分类器。RBF核也被称为高斯核(Gaussian kernel),其对应的映射函数将样本空间映射至无限维空间。
    7 w) O4 l" K$ R% ?6 _2 r9 a
    8 I& ?5 h* y* S% b& n! T- t5 rSMO序列最小优化算法- l1 X0 Z' s6 P0 \

    - \3 y1 y; i- @3 e& ]: _; M% e" O$ _8 ^8 D- ]
    . I# s; i! r6 _# z% U9 O
    % }( _7 q2 e/ y3 j/ [3 Z% N- P; b
    7 g6 ~4 R% u& X
    0 M( }( V4 g2 x+ o: b

    1 f/ T8 `, Q/ ]; C三、Python sklearn代码实现:! m# m$ B: C$ _; V2 u- K  Y
    . x9 l! |1 x. s! a' y
    sklearn.svm.SVC****语法格式为:. S$ o+ i" p0 r& b! t

    $ y: p, s7 {) Z3 G& I* W% }  a9 h8 n- Yclass sklearn.svm.SVC(  *, $ s  g* }- I: d3 ?" S
    C=1.0,
    6 G; S$ f" z8 H# u9 Z1 M8 h2 I2 j* G kernel='rbf',
    & ^# x5 v/ r& v degree=3,
    6 Y; C/ z1 O/ I gamma='scale',
    , a' s+ o7 A( m% H% F coef0=0.0, 5 h0 U' U' o& g0 A
    shrinking=True,
    : g' _; L7 c# [* {9 u probability=False,
    : D; g) k# |/ n" b' p( J- O6 I& W tol=0.001,
    # V& V4 |4 y' d; g% z cache\_size=200, ' [" C# f, T0 w6 }
    class\_weight=None, % J# V1 w( _0 A* j+ }
    verbose=False,
    8 n5 [" `$ ~: y* U max\_iter=- 1, % l1 l9 W6 w6 v4 `. N
    decision\_function\_shape='ovr', 6 Z+ J) Q2 z, l$ [" L
    break\_ties=False, 2 o& d3 f% W6 ]: ^+ W4 v5 Z; W
    random\_state=None)
    7 d+ ]% g& q' F4 ]( p! N# x! t' l" O. \. j/ L
    1
      V# y1 e  z' `7 i: [- _( {1 h2& I6 M$ N/ g* h, {0 u. N3 Q
    3- s/ N; h, }: Q# t/ O6 z" X9 y. z
    4% m" M, s1 N  `. d7 D" w& Z
    5
    4 R3 R: V, N, D3 t& A61 }' h, X; v! g
    7
    8 o; c) N2 l$ h8 n  {* `8
    + f& ~# \! P$ N97 m1 k# A' i' {6 i7 J6 Y6 M
    109 D: l) _9 q1 ^& h5 Y8 [
    117 S& n- }" R6 ~* n7 v& `; b8 i1 {
    12" {# L! b2 E, h5 B/ p" Q( q
    13
    4 r/ C+ Z3 Q1 y! f* u2 R9 E143 p+ h/ F$ c- a) D
    15, D, {3 |& a) a) c
    16
    ! l6 I1 J; [) z+ A0 y基于鸢尾花数据的实现及解释
    / I0 a0 G. L) v) q$ {5 E0 S2 a; k# z3 Y2 G& Q
    代码如下:$ j# I0 j, O8 I, [8 T
    " T+ [  w7 S6 B
    1 # 导入模块
      d" \* l  t" F5 \- A 2 import numpy as np
    ( _$ x( ]0 v+ S/ _: g- k 3 import matplotlib.pyplot as plt% m; u3 h9 |9 i9 f
    4 from sklearn import svm, datasets* m6 ]4 O9 D5 Z2 ]* o% I2 i
    5 from sklearn.model\_selection import train\_test\_split
    5 x! U- Y6 S: C$ @' w# S 6 ; \0 W5 W! Q/ j1 x8 C1 m
    7 # 鸢尾花数据
    - z: C2 [8 b/ z  ], U 8 iris = datasets.load\_iris()         #原始数据$ [" W2 @/ r  b% @2 v" Z/ p' Y
    9 feature = iris.data[:, :2] # 为便于绘图仅选择2个特征(根据前两列数据和结果进行分类)" y: H1 r0 G2 F5 A6 ^% Q
    10 target = iris.target
    2 T8 s# i" j8 Q1 h) g9 R: {11 : C7 I5 s8 s  R+ X& Q
    12 #数组分组训练数据和测试数据3 ?, b2 |0 B, j( a" Q& m' [0 F
    13 x\_train,x\_test,y\_train,y\_test=train\_test\_split(feature,target,test\_size=0.2,random\_state=2020)8 z' {4 n# v& P( N: R* s  c
    14
    4 E/ B1 s4 `0 j. P+ k- a; Z# Q' T15 # 测试样本(绘制分类区域),我们数据选了两列即就是两个特征,所以这里有xlist1,xlist2
    / B' T* [' K5 E$ E3 K16 xlist1 = np.linspace(x\_train[:, 0].min(), x\_t
    " ~' v4 B+ A+ A————————————————8 R3 W! a" [, A
    版权声明:本文为CSDN博主「qq_43479892」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ) g( k: b9 F. t" u原文链接:https://blog.csdn.net/qq_43479892/article/details/126811791
    ; q! \2 o7 @! [# E
    , f  ]4 P6 x5 V$ V4 Z; `0 Y
    6 M' A1 P! A4 P
    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, 2025-6-7 22:04 , Processed in 0.404912 second(s), 50 queries .

    回顶部