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

【机器学习】什么是支持向量机?

什么是支持向量机?

支持向量机(SVM,Support Vector Machine)是一种强大的机器学习算法,常用于分类问题,也可以用于回归问题。它的核心思想是通过找到一个最佳的“超平面”来将不同类别的数据分开,并使得不同类别之间的间隔最大化。

通俗易懂的理解:

想象你有一片二维的平面,上面有两种不同的点:一种用红色标记,另一种用蓝色标记。你需要画一条直线(或者高维空间中的超平面)来将这两类点分开,且使得这条直线距离两类点的最近点尽可能远。支持向量机就是通过这种方法找到最佳的分隔线(或超平面)。

举个例子:

假设我们有两类动物的体重和身高数据:

  • 红色:老虎
  • 蓝色:猫

我们用身高和体重来区分这两类动物。

身高(cm)体重(kg)动物类型
502
603
7010老虎
8012老虎

支持向量机的目标:

  1. 找到一条分割线(在二维空间中为直线,在高维空间中为超平面),使得它将两类点(猫和老虎)分开。
  2. 使得这条分割线距离每类点的“最近点”尽可能远(这个最近的点称为“支持向量”)。

核心概念:

  1. 支持向量:距离决策边界(分割线)最近的样本点,这些点决定了分割线的位置。
  2. 超平面:在高维空间中的“分割面”,在二维空间中就是一条直线。

SVM的决策边界:

支持向量机通过找到一个最大间隔的超平面来区分不同的类别,最大化的间隔就是“支持向量机”的优势之一,它使得模型对新数据的预测更加稳定。

代码示例:

我们可以使用 scikit-learn 库来实现一个简单的支持向量机分类器,来处理上面的猫和老虎的例子。

from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置字体为支持中文的字体
rcParams['font.family'] = 'SimHei'
rcParams['axes.unicode_minus'] = False

# 数据:身高和体重
X = np.array([[50, 2], [60, 3], [70, 10], [80, 12]])
# 标签:猫=0,老虎=1
y = np.array([0, 0, 1, 1])

# 创建SVM分类器
clf = svm.SVC(kernel='linear')

# 训练SVM模型
clf.fit(X, y)

# 创建一个网格用于画决策边界
xx, yy = np.meshgrid(np.linspace(40, 90, 100), np.linspace(0, 15, 100))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

# 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='autumn')

# 绘制决策边界
plt.contour(xx, yy, Z, levels=[0], linewidths=2, colors='black')

# 标题
plt.title("SVM分类:猫 vs 老虎")

# 显示图形
plt.xlabel('身高 (cm)')
plt.ylabel('体重 (kg)')
plt.show()

解释:

  • X: 是我们输入的数据,表示每个动物的身高和体重。
  • y: 是标签,0表示猫,1表示老虎。
  • svm.SVC(kernel='linear'): 创建一个线性SVM分类器,kernel='linear’表示我们用的是线性核(即我们假设数据可以通过一条直线分开)。
  • clf.fit(X, y): 训练SVM模型。
  • clf.decision_function: 用来获取决策边界(分割线)的值。
  • plt.contour: 绘制决策边界。

输出图像:

图中会显示数据点,并且有一条黑色的线,表示支持向量机的决策边界,分割了猫和老虎的两类数据。
在这里插入图片描述
总结:

  • SVM 是一个通过找到最大间隔超平面来进行分类的算法。
  • 它的优点是对高维数据和非线性问题表现非常好,特别是使用核方法时(例如,使用 RBF核可以处理复杂的非线性数据)。
  • 通过支持向量机,模型会利用支持向量来构建最优的决策边界,保证分类的准确性。

相关文章:

  • [操作系统] 进程间通信:进程池的实现
  • 解读InnoDB数据库索引页与数据行的紧密关联
  • 如何在 React 项目中进行服务器端渲染(SSR),它有什么优势
  • [学成在线]06-视频分片上传
  • BMS电池管理系统上下电过程
  • AVLTree
  • 单片机串口打印调试信息①
  • AI卫浴官:机器学习如何预判您的生理时钟
  • uniapp uni-drawer组件vue3写法
  • 【C++经典例题】寻找字符串中第一个不重复字符的索引
  • C++STL(四):stack和queue的模拟实现
  • [python] 使用Python实现Markdown文档格式转换
  • Flutter 输入组件 Radio 详解
  • 2018扬州大学876农业机械学概论填空名词解释简答
  • 文件I/O--C++的文件操作
  • 风电资源评估的关键指标及其应用
  • Log4j2 的核心实现和源码分析
  • 电源滤波器在医用电气设备中的应用
  • HTML5 canvas圆形泡泡动画背景特效
  • 【Arm+Qt+Opencv】基于人脸识别考勤系统实战
  • 佩斯科夫:若普京认为必要,将公布土耳其谈判俄方代表人选
  • 习近平致电祝贺阿尔巴尼斯当选连任澳大利亚总理
  • 人民日报访巴西总统卢拉:“巴中关系正处于历史最好时期”
  • 新闻1+1丨婚姻登记服务,如何跑出幸福加速度?
  • 朝着解决问题的正确方向迈进——中美经贸高层会谈牵动世界目光
  • 从“求生”到“生活”:医保纳入创新药让梗阻性肥厚型心肌病患者重拾生活掌控权