QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3136|回复: 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
    支持向量机分类算法
    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&#128155ython量化交易实战💛        入门级        手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
    % ^. 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
    转播转播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-4-15 11:53 , Processed in 0.375063 second(s), 50 queries .

    回顶部