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

算法系列——有监督学习——5.支持向量机(核方法)

一、概述

在深度学习出现之前,使用了核方法的支持向量机非常受欢迎。

通过在支持向量机中引入核方法(kernel methods)这个技巧,那些无法人力标注特征值的复杂数据也能被处理。当然,这个算法现在也用于解决各种分类和回归问题。

本文介绍通过在支持向量机中引入核方法,使模型可以学习复杂的决策边界的做法。这里以分类为例进行介绍,但是对于回归问题,同样可以使用核方法。线性支持向量机通过最大化间隔,可以得到尽可能远离数据的“好的”决策边界。但是由于决策边界必定为直线,所以它很难对如图所示的“每个标签的边界为曲线的数据”进行分类。

以某个点为中心分布的数据:

为了分隔如图所示的数据,模型需要学习曲线的线性决策边界。支持向量机可以使用核方法学习复杂的决策边界。例如,对这次的数据使用核方法,模型可以学到如图所示的圆形的决策边界。

二、算法说明

核方法的一个常见解释是“将数据移动到另一个特征空间,然后进行线性回归”。

对于这个解释,我们再详细地看一下。首先,思考一下如何使线性不可分数据成为线性可分数据。假设有一个比训练数据更高维的空间,训练数据中的每一个点都对应着这个高维空间中的一个点。在这个高维空间中,训练数据对应的点是可以线性分离的,实际的训练数据是来自于该高维空间的投影。 一旦有了这样的空间,模型就可以在高维空间中使用支持向量机来学习决策边界。最后,将高维空间的决策边界投影到由原始特征形成的向量空间上,得到决策边界。

如图所示为在高维空间中对数据进行线性分离的情形,该数据原本是线性不可分的。

虽然构建线性分离的高维空间非常困难,但通过一个叫作核函数的函数,核方法就可以使用在高维空间中学习到的决策边界,而无须构建具体的线性分离的高维空间。

三、示例代码

下面通过示例代码来看一下使用核方法的支持向量机如何学习呈圆形分布的数据的决策边界。
先生成呈圆形分布的数据,将其拆分为训练数据和验证数据,使用训练数据训练模型,使用验证
数据评估正确率。代码中没有明确指定使用哪个核方法,这是因为代码默认使用RBF(Radial Basis Function,径向基函数)核方法。

from sklearn.svm import SVC
from sklearn.datasets import make_gaussian_quantiles  # 生成非线性可分的高斯分布数据。
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 生成300个样本,分为两类。数据通过分位数划分,形成非线性可分结构(如同心圆或交叉分布)
X, y = make_gaussian_quantiles(n_features=2, n_classes=2, n_samples=300)
# 划分数据 30%数据作为测试集(90个样本)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
model = SVC()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(accuracy_score(y_pred, y_test))

四、详细说明

学习结果因核函数而异核方法中可以使用的核函数多种多样。使用不同的核函数,得到的决策边界的形状也不同。如图所示为使用具有代表性的核函数在相同的数据上训练支持向量机的结果,这些核函数分别是线性核函数、Sigmoid核函数、多项式核函数和RBF核函数。

图a中的线性核函数等价于线性支持向量机。图b中使用Sigmoid函数作为核函数。从图中可以看出,通过改变核函数,模型学习到了曲线的决策边界。另外,图c中的多项式核函数(二次)学习到了圆形的决策边界。从图d中可以看到RBF核函数是如何学习更复杂的决策边界的。

五、注意点

使用核方法后,我们就无法清楚地知道支持向量机使用的是什么特征了。在将RBF作为核函数,并将RBF核函数的超参数γ设置为3.0时,模型学习的结果如图所示。通过增加这个超参数的值,模型会从数据中学习更复杂的决策边界。

图中的模型学习的是一个复杂的决策边界,但我们已经不知道模型使用的是什么特征了。核方法适合用于“相比特征的可解释性更看重精度”的场景。还需要注意的是,得到的决策边界不一定是通过示例代码学习到的那种一目了然的决策边界。由于这些特点,在使用支持向量机时,不宜立即使用非线性核函数,在此之前,应先使用线性核函数进行分析,以了解数据。
 

 

相关文章:

  • Eplan许可分析
  • flutter 专题 九十 四 Flutter开发之基础知识
  • 区间震荡指标
  • JavaWeb之WebSocket
  • Servlet、Servlet的5个接口方法、生命周期、以及模拟实现 HttpServlet 来写接口的基本原理
  • 加速还是安全?CDN与群联云防护的本质差异与适用场景
  • 闻所闻尽:穿透声音的寂静,照见生命的本真
  • 数据库主观题题库及答案
  • 力扣45.跳跃游戏
  • 【leetcode hot 100 39】组合总和
  • 查看GPU型号、大小;CPU型号、个数、核数、内存
  • Vue3 基础语法指南:响应式系统与 Ref 应用
  • JavaIO流的使用和修饰器模式(直击心灵版)
  • 1201. 【高精度练习】蜜蜂路线
  • vpc网络的原理
  • 【Android】基础架构(详细介绍)
  • HAL库定时器配置
  • 每日一题力扣3248.矩阵中的蛇c++
  • 第三章:单调队列
  • Java中的JSONObject对象
  • 移动互联网未成年人模式正式发布
  • 美的集团一季度净利增长38%,库卡中国机器人接单增超35%
  • 中国体育报关注徐梦桃、王曼昱、盛李豪等获评全国先进工作者:为建设体育强国再立新功
  • 主播说联播丨六部门出台新政!来华买买买,实惠多多多
  • 汽车爆炸致俄军中将死亡嫌疑人被羁押,作案全过程披露
  • AI翻译技术已走向大规模商用,应用场景覆盖多个关键领域