QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3194|回复: 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
    支持向量机分类算法
    : F. z, z; |. C$ C' l& l' u  {$ g" n4 b8 I
    🚀 优质资源分享 🚀  g' [1 U; D/ @: _
    学习路线指引(点击解锁)        知识定位        人群定位
    % M& E5 Y; \5 H$ {- @9 ]🧡 Python实战微信订餐小程序 🧡        进阶级        本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。% d2 [& D; Y7 Q: o7 Z
    &#128155ython量化交易实战💛        入门级        手把手带你打造一个易扩展、更安全、效率更高的量化交易系统; D' [) a8 d0 R, B9 {! o
    支持向量机SVM& Z" j) T( z. ~

    / A8 N- T3 J3 V5 N2 D支持向量机原理% Q4 N( P4 V0 b+ Y

    . C) @$ F# a# H  q2 B% ]+ G1.寻求最有分类边界
    # Y9 R4 c' E( ~9 N$ s# E  N
    " W+ {7 x) D# U! _+ h正确:对大部分样本可以正确的划分类别- b: g- G9 s. ^) d7 {0 K; i
    1 R' r# _) @0 ~' c( p
    泛化:最大化支持向量间距5 N6 O1 t6 ]2 {# c- H

    ! B$ m& H7 P9 S; P4 w2 @公平:与支持向量等距, [: B2 H) ~+ F1 K2 v/ N6 q6 b
    5 w  q$ z# i: n8 ~" F7 k
    简单:线性、直线或平面,分割超平面
    & O* n6 v$ Q- M0 i( f* |
    0 ^% T) d/ q: a* _2 W2.基于核函数的生维变换% ]% b5 O' N: H
    6 ~2 G# G# @+ I( \; w' H1 {6 ^! y
    通过名为核函数的特征变换,增加新的特征,使得低维度的线性不可分问题变为高维度空间中线性可分问题。
    1 K) S+ ?( \5 v$ B8 B
    1 U! @% N4 s& m一、引论
    7 e4 T0 H" `) e0 T) Y( h9 ]. i" M! C2 n: d+ v$ E- T; \
    使用SVM支持向量机一般用于分类,得到低错误率的结果。SVM能够对训练集意外的数据点做出很好的分类决策。那么首先我们应该从数据层面上去看SVM到底是如何做决策的,这里来看这样一串数据集集合在二维平面坐标系上描绘的图:
    3 }( I% B6 ~+ G" W3 B/ [! W. ?+ Q! Y- P
    - ]9 ?$ P. K9 \
    ! c/ ~: r& X& S4 H0 }: M
    现在我们需要考虑,是否能够画出一条直线将圆形点和星星点分开。像first第一张图片来看,圆点和星点就分的很开,很容易就可以在图中画出一条直线将两组数据分开。而看第二张图片,圆点和星点几乎都聚合在一起,要区分的话十分困难。' q+ T+ e' s$ R) a
    ( A" K) {, n- i
    我们要划线将他们区分开来的话,有有无数条可以画,但是我们难以找到一条最好区分度最高的线条将它们几乎完全区分。那么在此我们需要了解两个关于数据集的基本概念:
    % B4 J6 R. C, o
    0 T) S- P9 a3 N5 D' N7 y4 T7 M二、理论铺垫
    4 C6 g( N+ z. v  W+ p9 Z8 y) l
    * Q  F8 `. E1 I. A5 k# V线性可分性(linear separability)
    / {! R# J) x; N3 \, B  ?3 C1 @# k5 L
    3 W3 C: u5 X4 f5 o1 x7 e" w' I

    ) m  r5 s. l% B) D1 ^2 x7 s4 \9 n而对机器学习来说,涉及的多是高维空间(多维度)的数据分类,高维空间的SVM,即为超平面。机器学习的最终目的就是要找到最合适的(也即最优的)一个分类超平面(Hyper plane),从而应用这个最优分类超平面将特征数据很好地区分为两类。
    / Z  h7 k# v1 y, \$ X3 U. c% C7 H$ a3 i% ^$ b
    # U: A. ^! @; m9 N7 m- |

    2 \5 ?5 _1 J9 p; V. l决策边界& D% U4 Q6 k5 z7 l+ I4 R' ?
    . {* h8 g1 i* @. G/ t4 ]- w" b
    SVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。那么这个决策边界就是不同类之间的界限。
    4 T5 K1 ]! i$ O& `* D$ a  n
    0 h9 ~0 e2 D3 O+ v" Q3 g6 Y% I0 i2 }0 ?+ J) p6 s! i  i

    9 W% n- K  g2 S; o' w) c总而言之:在具有两个类的统计分类问题中,决策边界或决策表面是超平面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。
    3 ~- `  U( V; T: o: M' |2 _, `) V, [1 m8 c
    支持向量(support vector)6 E; Y9 D) `" c- W& ]! ^

    0 o. d: i; i; T9 B* w在了解了超平面和决策边界我们发现SVM的核心任务是找到一个超平面作为决策边界。那么满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:
    " d: L+ X: g; v( D  S, j+ z) a
    8 }% q$ _' z. d: e* R
    9 V3 z! _  A$ v) c
    : \! _( K1 P  J. W7 J! W' ?6 H# b5 k: M; A/ w3 W3 x

    % b1 O' F% U& O" }7 u核方法- ?6 C# i( o; R( I- V

    # ^% v4 B6 Q" i, m  I6 a1 i8 ]
    , z1 c+ n+ B2 K- I( ?8 t, u- Z6 u, y5 S8 ^! [

    , U7 w9 Z6 m7 B7 s4 R! Q+ t0 ^7 M- Q& F* q0 b
    以回避内积的显式计算。
    2 p1 m/ `' o9 j8 h! U+ X# `9 {5 b' t; ~& D/ [
    常见的核函数:
    ' |  G3 [. D: v  A6 k5 c2 l$ n
    2 d$ l3 f/ B- x7 U
      N- @# \; I8 i) x1 g6 c
    / u2 ?1 j" ?  U' L8 f9 R9 Ikernel : {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'" Q  b. h% _. c
    1
    $ d" h( l  S: I% M* @8 m当多项式核的阶为1时,其被称为线性核,对应的非线性分类器退化为线性分类器。RBF核也被称为高斯核(Gaussian kernel),其对应的映射函数将样本空间映射至无限维空间。. E6 w" F# c4 B

    + X2 j- ^( T1 ySMO序列最小优化算法
    * f% q: ]: S1 Z8 K7 O( E, U# [
    7 b# z7 u+ m/ ~, K
    : u- H  X6 b7 }( \2 P: k5 M2 R$ ^, h" g3 W& E9 D+ u1 r

    0 ^/ ?: r% Q. K  N0 E6 {/ q8 R- U2 {

    / v+ y( E8 {: B/ [# T
    / Y+ y* {. r* X1 Q/ L1 C; e三、Python sklearn代码实现:
    2 G! @* l; ]+ P, G. N" T+ Z' t8 V
    4 ]% I; l2 Y5 W8 S. gsklearn.svm.SVC****语法格式为:
    # Y0 h7 T- e# G2 T9 |$ |% O# B) b$ G& h, H
    class sklearn.svm.SVC(  *, ! g. N0 h5 {2 y% ]' \6 ?1 T2 N
    C=1.0, " e( B. T9 _; |) ]5 C: U' j( D
    kernel='rbf',6 Z1 s4 ?* z# J0 C& q+ B% f$ h
    degree=3, # p0 g& V/ }- y: j: x. r( |
    gamma='scale', ! Z6 I! J& o$ O
    coef0=0.0, . x% Q& S. v4 H. W5 \
    shrinking=True,
    , D- m% H( Z3 w7 @ probability=False, * I* n% |8 i% N4 ~. ]2 \9 Y, g8 h
    tol=0.001,
    / ^! l7 R8 {) F' C. Q cache\_size=200, 8 d5 z2 Y+ a# }, b6 _7 n
    class\_weight=None,
    ) ]: y) X# S9 U* P verbose=False, - T# P5 ]2 M3 d
    max\_iter=- 1, % K7 n. Z4 o3 o9 \6 ^# P
    decision\_function\_shape='ovr',
    ! ^& n3 R/ \7 j1 L# |% L break\_ties=False,
    * v- ~" O8 C5 { random\_state=None)) x5 y) @3 r0 E# u# S
      k$ N3 [* z6 K. D
    1. Y" V# {2 j4 g4 Q0 Y# r# ?
    2
    / K( X$ C  q* u" s34 X8 \) B3 B4 u5 C$ a
    4$ z3 F0 `+ w! k5 I3 D; k
    5
    ! u9 x7 W) _# k0 h. @- B& O6- D3 {. c' S* @. U# S- n  f1 [
    7
    ) c0 x) e2 C; u8 t5 k2 f6 I9 P8% x  S2 P) x% h9 V. \6 w
    9
    1 A/ N# U2 }7 f  _" X" U/ A9 R10
    $ D  K( b' l5 j0 X11% ^- M. r3 X% d4 b
    12
    + @9 I: c( Z3 d0 X6 Z' u13
    ! t( b  Y* A) D# i8 t4 L) T14
    + T" K+ d0 g/ d4 I4 S! v15% A+ z1 \: A- P& k- X+ l
    16
    % k" h) V. B* H基于鸢尾花数据的实现及解释& l2 \2 [7 a$ V" a

    ; |9 A) s+ p/ _4 _# j. ^代码如下:- g' _: A& m# n$ n
    2 N; Y- T4 [' ]1 J
    1 # 导入模块; u) c1 j: B- j! n3 I4 [" U
    2 import numpy as np
    & B- ~8 C% ?; k 3 import matplotlib.pyplot as plt
    ' @* G7 n7 w4 k' K- a# x" L( X) z 4 from sklearn import svm, datasets" I# p+ p( l3 v) b* a
    5 from sklearn.model\_selection import train\_test\_split
    , d, k3 p, O( d' [ 6
    3 Y" a+ Q4 |% S; L 7 # 鸢尾花数据! o( J7 N# T6 F& J
    8 iris = datasets.load\_iris()         #原始数据
    $ d! U& g/ z- A6 `5 v; U 9 feature = iris.data[:, :2] # 为便于绘图仅选择2个特征(根据前两列数据和结果进行分类)! o- v% U. n  c9 Q, r
    10 target = iris.target7 D0 u) E7 f) z* n
    11
    5 ^$ j1 S7 }+ x6 Z8 O* S12 #数组分组训练数据和测试数据$ h6 N0 C- A/ k6 F9 d7 p
    13 x\_train,x\_test,y\_train,y\_test=train\_test\_split(feature,target,test\_size=0.2,random\_state=2020)- C/ a  P; l& v% a( i
    14
    + |( U" f) ^3 j# z2 B3 V15 # 测试样本(绘制分类区域),我们数据选了两列即就是两个特征,所以这里有xlist1,xlist2  U4 f8 ~* v. F# \. L0 h
    16 xlist1 = np.linspace(x\_train[:, 0].min(), x\_t( O7 {4 E, @6 L
    ————————————————
    " b; V- e/ R* j, W- K- O版权声明:本文为CSDN博主「qq_43479892」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    9 A9 E- f, H) Q4 J$ T! q( V原文链接:https://blog.csdn.net/qq_43479892/article/details/126811791
    7 ~/ D  j. n4 l
    4 H) r3 G. X, L; o7 d8 w5 Q1 q! i1 m7 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, 2026-8-24 04:59 , Processed in 0.487106 second(s), 51 queries .

    回顶部