QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3166|回复: 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
    支持向量机分类算法
    ) o- g; m/ p5 R3 e5 j- |; A/ |9 z" L
    🚀 优质资源分享 🚀
    8 p5 U- N4 O; H3 s1 g学习路线指引(点击解锁)        知识定位        人群定位$ B* }6 @8 f( E9 p" _( j6 c
    🧡 Python实战微信订餐小程序 🧡        进阶级        本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
    1 B- @# m! `: i$ Q, l5 `&#128155ython量化交易实战💛        入门级        手把手带你打造一个易扩展、更安全、效率更高的量化交易系统4 Y2 n- p2 X  E8 ~, f
    支持向量机SVM  w: P) O; B6 `2 C8 x, L

    8 D% q  ^  Z+ P/ O" d. l) {6 |支持向量机原理
    ( y2 S8 ~0 L* C5 `
    1 `, j. \0 w- n# I1.寻求最有分类边界
    # [) z$ Z0 b. ~9 t( S: c& k9 H$ ]
    + l/ |/ j) \: Z9 ~2 D正确:对大部分样本可以正确的划分类别
    $ k# l7 t* k* n7 c5 d) I! x' f+ j! N5 A
    泛化:最大化支持向量间距
    - h) ]+ m! h) Q
    5 F" W7 r3 c$ E公平:与支持向量等距
    ( O9 [" ]( G, }* g6 |6 t4 T8 h8 \
    + q6 x/ p* P8 p5 g简单:线性、直线或平面,分割超平面
    2 d; q. v. y5 i7 p$ B/ P5 c. ^+ ^" q, ~$ I# W% b
    2.基于核函数的生维变换
    ' z/ x& i  H4 j# h' R8 Z9 p5 n( r$ _2 C$ m
    通过名为核函数的特征变换,增加新的特征,使得低维度的线性不可分问题变为高维度空间中线性可分问题。8 U4 y! P1 {  k& C% e1 g/ T

    8 y6 t( M+ X2 P一、引论
    5 `5 |: L9 P5 K7 l  q0 e4 z1 z& k2 \
    使用SVM支持向量机一般用于分类,得到低错误率的结果。SVM能够对训练集意外的数据点做出很好的分类决策。那么首先我们应该从数据层面上去看SVM到底是如何做决策的,这里来看这样一串数据集集合在二维平面坐标系上描绘的图:
    " j/ Y! Q$ U( k, K" o' k$ I! Y+ E/ a
    + `. E+ \: T8 y
    ; A/ F$ d  w4 m& ]6 }
    现在我们需要考虑,是否能够画出一条直线将圆形点和星星点分开。像first第一张图片来看,圆点和星点就分的很开,很容易就可以在图中画出一条直线将两组数据分开。而看第二张图片,圆点和星点几乎都聚合在一起,要区分的话十分困难。" ?# L- O3 [* u( x! O) Y
    % b& x+ b3 P( y# a5 z
    我们要划线将他们区分开来的话,有有无数条可以画,但是我们难以找到一条最好区分度最高的线条将它们几乎完全区分。那么在此我们需要了解两个关于数据集的基本概念:
    . ^( M" s  |0 I& [
    6 y, z9 R4 U; C& J  X( {9 |$ b+ l$ j二、理论铺垫6 {5 z% N! U* _
    6 \" [- o" U/ b1 q9 S# e
    线性可分性(linear separability)4 [+ M* d8 S) f, C
    2 V7 q1 D/ y; T4 q/ S

    0 {1 M2 c8 h7 y6 c. [) E! r1 P9 E2 ^! L+ b
    而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。
    5 w) U9 T9 \( E5 C3 X3 N
    ' {# _+ i; ~! g
    2 a8 d0 @$ T6 r1 O# y1 g* p' ~0 u
    3 w8 C1 {6 n! G9 Y4 g  h决策边界
    ' {  O, g+ M4 E% q
    $ B' d% y8 m) H9 ~3 HSVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。那么这个决策边界就是不同类之间的界限。
    6 O2 E9 W: _1 Z8 d5 w( w
    ' [  `' y0 F( n2 ?# D/ d8 o9 }
    0 k6 f/ @4 X: q$ {
    9 Q7 W+ U) P& }5 d, U# O总而言之:在具有两个类的统计分类问题中,决策边界或决策表面是超平面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。  K6 X, G$ G& C$ R$ k

    0 z1 `# `& I5 h* u支持向量(support vector)- j, a( u! e! h0 f8 m8 q
    & O0 C% C* ^0 t
    在了解了超平面和决策边界我们发现SVM的核心任务是找到一个超平面作为决策边界。那么满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:
    * o0 x, t# E& i# ^: a# L+ q; u3 K

    2 T3 |7 x( m% |: @- O" Q2 ^+ i
    4 X$ u  H1 l0 ]" @, H$ D) r/ I4 _
    3 m7 N( E6 \8 h+ I5 i# m9 U' j" ]
    核方法
    % m: n$ O. D4 W6 _& q
    $ E4 p& K/ g% ^* ?$ j5 G% M) G
    4 l8 ]( ]! l5 [, O: T6 z1 \
    ' w# q, d, [$ x! d4 V3 g/ V
    ) f0 \+ _9 m9 L5 R) v3 g$ w' p/ E6 |. x1 W) |6 x# N
    以回避内积的显式计算。
      b% g& z. s+ K& ^  T4 }/ O' h4 U: a& j
    常见的核函数:. v1 `4 i/ i2 b* y9 b: [" \
    - o7 M* i) r  `

    4 M5 |' o6 p  E
    * z/ f- j0 b2 `$ q( rkernel : {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'
    , ^3 ]! J3 Y: A& I4 k- n3 c1
    6 u% S/ v8 F2 K) k& Z# L! v" A当多项式核的阶为1时,其被称为线性核,对应的非线性分类器退化为线性分类器。RBF核也被称为高斯核(Gaussian kernel),其对应的映射函数将样本空间映射至无限维空间。
    / ~; N/ X* T" Y: M% R1 ~
    / ?* i( \4 p2 r- A0 C* cSMO序列最小优化算法2 _$ I  B2 u& [5 P$ ~) z
    2 O0 c4 U% k, O' k

    $ }. I0 F+ M# ?' V. W
    " v! ~% a  t* _; h( r' P& M: U& f1 d( e* j! F5 z; C# K; x

    7 c! m# E  \! P( P6 X; e5 ^
    2 s$ s: |1 Y' q: F3 k5 P1 H# H7 A% ~0 v: c' d
    三、Python sklearn代码实现:
    ; l* t% _' x6 S
    8 A( v/ s3 I; t$ X  `sklearn.svm.SVC****语法格式为:
    / p8 X) i* H5 e& F, y; z; w. P& Z  T  M& l  }2 f: Y2 O$ @$ A+ H
    class sklearn.svm.SVC(  *,
    ; K( O6 [& w  B; a7 ?+ ~ C=1.0, 8 i& |9 j8 Y6 ^
    kernel='rbf',# S+ ~# k2 T* Q, k' _* A8 `
    degree=3, 0 @$ C9 W  Q. k, {/ p4 O1 Y* E+ R
    gamma='scale',
    + ~' G1 \! a2 y7 X( Y coef0=0.0,
    3 N. ?. W% s5 s" A; I( S shrinking=True,
    ( a" }# V* x7 @2 p8 j probability=False, ( P5 B5 f2 l; f% Q& ^
    tol=0.001,
    ' B  q% r: `0 v. h3 A1 ] cache\_size=200, : D3 @' f$ H; v& N, i4 l
    class\_weight=None, ; ?9 t0 X, N2 r! t" q2 Q
    verbose=False, ) J3 a$ ^  e7 U( u! ^: I
    max\_iter=- 1, / U" N: D  ]5 {: U6 ^0 q
    decision\_function\_shape='ovr', # a8 L. e8 s/ }# q4 n; E
    break\_ties=False, 8 U3 I# H% M* h3 r% D/ d
    random\_state=None)
    7 W+ p; v; W) f: o" z! R1 x
    8 T2 m( f. W  v. f3 k14 e( k& v7 t7 G3 T. p
    20 R/ t' L9 C- @7 e( f, t  D- e
    3  D9 Q5 a. ?1 N9 _9 m) ^
    4
      e$ b8 \- D  B) L; _) }0 T5' A. [8 _7 b$ ~' C1 M
    6
    - Q9 v# i1 H0 H4 V( e  G7
    ( G2 m9 m6 Q1 Q9 n# P9 o8* i, `5 d# S5 @+ W; a  Z3 C# @1 u
    9
    ! E; b1 T0 {3 e! L# A, M103 E# d- P: r  M: M7 T
    11
    " d& y+ H% @8 L6 l12
    - i6 h2 s* b3 B$ n$ c. z3 u13- z; x% p9 w1 B5 a$ A
    14
    7 b3 ~# `7 f/ j159 ]; r* h: i1 C3 H+ h6 q8 B) m
    16
    ) V8 Y2 H5 n3 S3 _! E1 o基于鸢尾花数据的实现及解释
    - o% A: Y# x2 z$ G( g
    " g1 `4 M. l' ?& q" J2 N代码如下:
    ( L! o: E% L# r9 v6 e; ]
    + D0 i. X6 v, ?* g" \' y+ H! s 1 # 导入模块% W0 ?* ?- Q2 C) K
    2 import numpy as np- b; f: A4 V7 ^
    3 import matplotlib.pyplot as plt
    : x4 {* ^3 n. D, M" ] 4 from sklearn import svm, datasets
    3 D$ b3 m- b$ C 5 from sklearn.model\_selection import train\_test\_split
    " B8 \. x# u7 c( A7 c9 ?6 b" e 6
    2 R: s* m! [8 t' ]7 I 7 # 鸢尾花数据
    $ P1 `' y/ v' Z 8 iris = datasets.load\_iris()         #原始数据
    3 J$ H& q/ ?7 e+ a/ {, Q# e: Y 9 feature = iris.data[:, :2] # 为便于绘图仅选择2个特征(根据前两列数据和结果进行分类)
    $ d, h/ g. ?) \10 target = iris.target6 |" V. H+ X# ?6 X  B# a8 x. I" u
    11
    , k; c! ~; ~1 B! }( j12 #数组分组训练数据和测试数据  i% v8 \0 k2 E, j, H
    13 x\_train,x\_test,y\_train,y\_test=train\_test\_split(feature,target,test\_size=0.2,random\_state=2020)
    9 j" |4 J# [7 n; O) B0 r# d1 u! R14
    / {$ s3 u+ Z$ m4 ~0 r15 # 测试样本(绘制分类区域),我们数据选了两列即就是两个特征,所以这里有xlist1,xlist22 J& H# y" x4 X
    16 xlist1 = np.linspace(x\_train[:, 0].min(), x\_t2 J+ k, C7 Z  g0 S+ f" r. B
    ————————————————; v- f& ~" [4 Y" B3 [2 W  R
    版权声明:本文为CSDN博主「qq_43479892」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。0 Q$ [8 a" o" @3 y" _
    原文链接:https://blog.csdn.net/qq_43479892/article/details/126811791
    & M8 u  ~% h4 W3 i0 l4 }* ^3 o- U) s
    0 }! A% L6 Y# _
    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-16 03:03 , Processed in 0.402668 second(s), 51 queries .

    回顶部