当前位置: 首页 > news >正文

机器学习算法_支持向量机

一、支持向量机

  • 支持向量机只能做二分类任务

  • SVM全称支持向量机,即寻找到一个超平面使样本分成两类,且间隔最大

  • 硬间隔:如果样本线性可分,在所有样本分类都正确的情况下,寻找最大间隔;如果出现异常值或样本线性不可分,此时硬间隔无法实现

  • 软间隔:允许部分样本,在最大间隔之内,甚至在错误的一边,寻找最大间隔;目标是尽可能保持间隔宽阔和限制间隔违例之间寻找良好的平衡

  • 惩罚系数:通过惩罚系数来控制这个平衡,C值越小,则间隔越宽,分错的样本个数也就越多;反之,C值越大,则间隔越窄,分错的样本个数越少

二、LinearSVC_API

class sklearn.svm LinearSVC(C = 1.0)
  • 示例
from plot_util import plot_decision_boundary_svc, plot_decision_boundary
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVCX, y = load_iris(return_X_y= True)x = X[y < 2, :2]
y = y[y < 2]plt.scatter(x[y == 0, 0], x[y == 0, 1], c = 'r')
plt.scatter(x[y == 1, 0], x[y == 1, 1], c = 'b')
plt.show()# 特征处理
transform = StandardScaler()
x_tran = transform.fit_transform(x)# 模型训练
model = LinearSVC(C = 30)
model.fit(x_tran, y)
y_pre = model.predict(x_tran)
print(accuracy_score(y, y_pre))# 可视化处理
plot_decision_boundary_svc(model, axis = [-3, 3, -3, 3])
plt.scatter(x_tran[y == 0, 0], x_tran[y == 0, 1], c = 'r')
plt.scatter(x_tran[y == 1, 0], x_tran[y == 1, 1], c = 'b')
plt.show()# 模型训练
model = LinearSVC(C = 0.01)
model.fit(x_tran, y)
y_pre = model.predict(x_tran)
print(accuracy_score(y, y_pre))# 可视化处理
plot_decision_boundary_svc(model, axis = [-3, 3, -3, 3])
plt.scatter(x_tran[y == 0, 0], x_tran[y == 0, 1], c = 'r')
plt.scatter(x_tran[y == 1, 0], x_tran[y == 1, 1], c = 'b')
plt.show()

三、SVM算法原理

要去求一组参数(w, b),使其构建的超平面函数能够最优地分离两个集合

样本空间中任一点x到超平面(w, b)的距离可写成: r = w T x + b ∣ ∣ w ∣ ∣ r = \frac{w^Tx+b}{||w||} r=∣∣w∣∣wTx+b,想要找到具有最大间隔的划分超平面,也就是要找到能满足下式中约束的参数w和b,使得间隔 γ \gamma γ最大

​ $ \begin{cases} \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}{i} + b \geqslant +1, & y{i} = +1; \ \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}{i} + b \leqslant -1, & y{i} = -1. \end{cases} $

距离超平面最近的几个训练样本点使上式等号成立,他们被称为“支持向量”,两个异类支持向量到超平面的距离之和为(最大间隔距离表示): 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} ∣∣w∣∣2

  • 训练样本:$ \begin{cases} \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}{i} + b \geqslant +1, & y{i} = +1; \ \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}{i} + b \leqslant -1, & y{i} = -1. \end{cases} 则目标函数可以写成: 则目标函数可以写成: 则目标函数可以写成:max_{w, b} = \frac{2}{||w||}s.t.y_i(w^Tx_i+b) \geqslant 1,其中i=1,2,3,\dots, m$

  • 将目标函数进一步优化: m i n w , b = 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x i + b ) ⩾ 1 , 其中 i = 1 , 2 , 3 , … , m min_{w, b} = \frac{1}{2}||w||^2 s.t.y_i(w^Tx_i+b) \geqslant 1,其中i = 1, 2, 3, \dots, m minw,b=21∣∣w2s.t.yi(wTxi+b)1,其中i=1,2,3,,m

  • 添加核函数,将目标函数转化成以下形式:KaTeX parse error: {align*} can be used only in display mode.

  • 构建拉格朗日函数:其中 α i \alpha_i αi为拉格朗日乘子(相当于 λ i \lambda_i λi):$L(w, b, \alpha) = \frac{1}{2}||w||^2-\sum_{i = 1}^{n} \alpha_i\left(1 - y_{i} \left(\boldsymbol{w}^{\mathrm{T}} \cdot \boldsymbol{\varPhi}(x_{i}) + b\right)-1\right) \dots \dots ① $

  • 要想求得极小值,上式后半部分应该取的极大值: m i n w , b m a x α L ( w , b , α ) < = = > m a x α m i n w , b L ( w , b , α ) min_{w, b}max_{\alpha}L(w, b, \alpha) <==> max_{\alpha }min_{w, b}L(w, b, \alpha) minw,bmaxαL(w,b,α)<==>maxαminw,bL(w,b,α)

  • 要找 m i n w , b L ( w , b , α ) min_{w, b}L(w, b, \alpha) minw,bL(w,b,α),既要先对 w , b w, b w,b求导

    • w w w求偏导,并令其为0: L = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i ( y i w T φ ( x i ) + y i b − 1 ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i y i w T φ ( x i ) + α i y i b − α i L=\frac{1}{2}||w||^2-\sum_{i = 1}^n \alpha_i(y_iw^T \varphi(x_i)+y_ib-1)=\frac{1}{2}||w||^2-\sum_{i = 1}^n \alpha_iy_iw^T \varphi(x_i)+\alpha_iy_ib-\alpha_i L=21∣∣w2i=1nαi(yiwTφ(xi)+yib1)=21∣∣w2i=1nαiyiwTφ(xi)+αiyibαi

      ∂ L ∂ w = w − ∑ i = 1 n α i y i φ ( x i ) = 0 \frac{\partial L}{\partial w}= w-\sum_{i = 1}^n\alpha_iy_i \varphi(x_i) = 0 wL=wi=1nαiyiφ(xi)=0

      得到: w = ∑ i = 1 n α i y i φ ( x i ) = 0 w =\sum_{i = 1}^n\alpha_iy_i \varphi(x_i) = 0 w=i=1nαiyiφ(xi)=0

    • 对b求偏导,并令其为0:
      L = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i y i w T φ ( x i ) + α i y i b − α i L = \frac{1}{2}||w||^2-\sum_{i = 1}^n \alpha_iy_iw^T\varphi(x_i)+\alpha_iy_ib-\alpha_i L=21∣∣w2i=1nαiyiwTφ(xi)+αiyibαi

      ∂ L ∂ b = ∑ i = 1 n α i y i = 0 \frac{\partial L}{\partial b}=\sum_{i = 1}^n\alpha_iy_i=0 bL=i=1nαiyi=0
      得到: ∑ i = 1 n α i y i = 0 \sum_{i = 1}^n\alpha _iy_i = 0 i=1nαiyi=0

  • 将上面两个求导的结果代入①式中,得到:$\begin{align*} L(\boldsymbol{w}, b, \boldsymbol{\alpha})&=\frac{1}{2}|\boldsymbol{w}|^{2}-\sum_{i = 1}^{n} \alpha_{i}(y_{i}(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{\varphi}(x_{i}) + b) - 1)\ &=\frac{1}{2}\boldsymbol{w}^{\mathrm{T}}\boldsymbol{w}-\sum_{i = 1}{n}(\alpha_{i}y_{i}\boldsymbol{w}{\mathrm{T}}\boldsymbol{\varphi}(x_{i})+\alpha_{i}y_{i}b - \alpha_{i})\ &=\frac{1}{2}\boldsymbol{w}^{\mathrm{T}}\boldsymbol{w}-\sum_{i = 1}{n}\alpha_{i}y_{i}\boldsymbol{w}{\mathrm{T}}\boldsymbol{\varphi}(x_{i})-b\sum_{i = 1}^{n}\alpha_{i}y_{i}+\sum_{i = 1}^{n}\alpha_{i}\ &=\frac{1}{2}\boldsymbol{w}^{\mathrm{T}}\boldsymbol{w}-\sum_{i = 1}{n}\alpha_{i}y_{i}\boldsymbol{w}{\mathrm{T}}\boldsymbol{\varphi}(x_{i})+\sum_{i = 1}^{n}\alpha_{i}\ &=\frac{1}{2}\boldsymbol{w}^{\mathrm{T}}\sum_{i = 1}{n}\alpha_{i}y_{i}\boldsymbol{\varphi}(x_{i})-\boldsymbol{w}{\mathrm{T}}\sum_{i = 1}^{n}\alpha_{i}y_{i}\boldsymbol{\varphi}(x_{i})+\sum_{i = 1}^{n}\alpha_{i}\ &=\sum_{i = 1}^{n}\alpha_{i}-\frac{1}{2}\left(\sum_{i = 1}{n}\alpha_{i}y_{i}\boldsymbol{\varphi}(x_{i})\right){\mathrm{T}}\cdot\sum_{i = 1}^{n}\alpha_{i}y_{i}\boldsymbol{\varphi}(x_{i})\ &=\sum_{i = 1}^{n}\alpha_{i}-\sum_{i = 1}^{n}\sum_{j = 1}{n}\alpha_{i}\alpha_{j}y_{i}y_{j}\boldsymbol{\varphi}{\mathrm{T}}(x_{i})\boldsymbol{\varphi}(x_{j}) \end{align*} $

四、SVM核函数

  • 核函数作用:核函数将原始输入空间映射到新的特征空间,从而使原本线性不可分的样本可能在核空间可分
  • 核函数分类
    • 线性核: k ( x i , x j ) = x i T x j k(x_i, x_j)=x_i^Tx_j k(xi,xj)=xiTxj
    • 多项式核: k ( x i , x j ) = ( x i T x j ) d k(x_i, x_j) = (x_i^Tx_j)^d k(xi,xj)=(xiTxj)d
    • 高斯核(RBF, 径向基函数): k ( x I , x j ) = e p x ( − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) k(x_I, x_j) = epx(-\frac{||x_i-x_j||^2}{2\sigma^2}) k(xI,xj)=epx(2σ2∣∣xixj2)——产生将样本投射到无限维空间的运算效果,使得原来不可分的数据变得可分,使用最多
    • 拉普拉斯核: k ( x i , x j ) = e x p ( − ∣ ∣ x i − x j ∣ ∣ 2 σ ) k(x_i, x_j)=exp(-\frac{||x_i-x_j||^2}{\sigma}) k(xi,xj)=exp(σ∣∣xixj2)
    • Sigmod核: k ( x i , x j ) = t a n h ( β x i T x j + θ ) k(x_i, x_j) = tanh(\beta x_i^Tx_j+\theta) k(xi,xj)=tanh(βxiTxj+θ)

1.高斯核

  • 公式: K ( x , y ) = e − γ ∣ ∣ x − y ∣ ∣ 2 K(x, y) = e^{-\gamma||x-y||^2} K(x,y)=eγ∣∣xy2,其中 γ = 1 2 σ 2 \gamma=\frac{1}{2\sigma^2} γ=2σ21

    • γ \gamma γ是超参数,作用与标准差相反, γ \gamma γ越大(标准差越小),高斯分布越窄, γ \gamma γ越小,高斯分布越宽
  • API( γ \gamma γ较大,过拟合; γ \gamma γ较小,欠拟合)

from sklearn.svm import SVC
SVC(kernel = 'rbf', gamma=gamma)
http://www.xdnf.cn/news/1034605.html

相关文章:

  • 图数据库(TuGraph)
  • DataX 框架学习笔记
  • GDI 区域检测与边框宽度的关系
  • 实习记录1
  • ImportError: DLL load failed while importing win32api: 找不到指定的模块
  • 18.vue.js的scoped样式隔离?原理和使用?(1)
  • 在线五子棋
  • 【Docker基础】Docker核心概念:命名空间(Namespace)与资源隔离联系
  • 从0开始学习R语言--Day23--稳健回归
  • 电路问题处理:SGMII链路中的AC耦合电容摆放位置
  • 轮廓 裂缝修复 轮廓修复 填补孔洞 源代码
  • 「Flink」Flink项目搭建方法介绍
  • 【飞牛os0.9.9系统使用docker 挂载cgroup2异常问题】
  • 傅里叶级数从三角函数形式到复指数形式的完整推导步骤
  • 位运,模拟,分治,BFS,栈和哈希表
  • Ant Design 版本演进详解:从 1.x 到 5.x 的发展历程
  • 【项目实训#09】智能代码文件助手模式前后端设计与实现
  • 读取配置文件到Settings对象的完整实现
  • synchronized和ReentrantLock的区别
  • gpt3大模型蒸馏后效果会变差么
  • HTTP 请求报文 方法
  • 湖北理元理律师事务所债务优化实务:平衡还款与生活的法律路径
  • 2022mpsPTE岗位笔试题
  • 自动化立体仓库堆垛机控制系统STEP7 FC1功能块 读取位置值SSI接口
  • KJY0047-J1阶段测试
  • 模拟 AJAX 提交 form 表单及请求头设置详解
  • 人工智能学习24-BP激活函数
  • 全球化2.0|云轴科技ZStack联合Teleplex举办技术沙龙 · 吉隆坡站
  • Oracle 单实例双IP配置
  • Qt:Qt桌面程序正常退出注意事项