机器学习(9-1)

支持向量机

支持向量机(SVM)就是在一堆数据里,找一条"最宽的分界线",把不同类别尽量分得又准又稳。

|------|------|------|---------|------|
| | 分类标准 | 核心思想 | 最优化目标 | 泛化能力 |
| 线性模型 | 决策边界 | 民主投票 | 点到直线距离和 | 一般 |
| SVM | 超平面 | 民主集中 | margin | 提升 |

什么是间隔

在 SVM 中,我们要找一个超平面

让它 把两类样本分开,并且离两类最近的点尽可能远 。这个"最近距离"就是 间隔(margin)

SVM硬间隔(Hard Margin)

特点

  • 假设数据是完全线性可分的
  • 不允许任何样本被分错
  • 所有点都必须在"安全边界"之外

最优化目标

  • 最大化间隔margin
  • 最大化距离d(线性模型中相当于斜边,而SVM中相当于直角边)
  • 点到直线的垂直距离

SVM软间隔(Soft Margin)

要解决的问题

  • 异常值outlier
  • 支持向量的选择
  • 民主集中思想的弱化

允许少量犯错,加入容错值,引入松弛变量 ξ

优化目标

参数 C

  • C 大 :强烈惩罚错误、更接近硬间隔、容易过拟合

  • C 小:允许更多错误、间隔更大、泛化能力更强

非线性SVM:核技巧

线性核函数

线性核函数是最简单的核函数,它直接在输入特征空间中进行内积计算,不进行任何映射。

  • 其中,和 ​ 是样本点

  • 线性核函数相当于没有映射,直接在原始特征空间中操作

多项式核函数

多项式核函数通过对输入样本进行多项式映射,将数据从原始空间映射到更高维度空间,在高维空间中可能能找到一个线性决策边界。(通过调整多项式的度数,可以控制映射的复杂度)

  • 其中,ccc 是常数,ddd 是多项式的次数。

  • 这种核函数允许在输入空间中进行多项式映射,产生更复杂的决策边界

高斯核函数(RBF函数、径向基函数)

高斯核函数是最常用的核函数之一,它能够将数据映射到无限维度的空间,从而可以非常灵活地处理复杂的非线性关系。高斯核的特点是其通过样本之间的"距离"来定义相似度,距离越近,相似度越高。

其中, 表示样本点之间的欧几里得距离,σ是高斯核的宽度参数。

如何选择核函数

  • 当特征多且接近样本数量,可直接选择线性核SVM
  • 当特征数少,样本数正常,推荐选用高斯核函数
  • 当特征数少,样本数很大,建议选择多项式核函数(不要让阶数过高,否则可能过拟合)

SVM解决分类任务

SVM解决回归任务

数据准备

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(666)
x = np.random.uniform(-3,3,size=100)
y = 0.5 * x**2 +x+2 +np.random.normal(0,1,size=100)
X = x.reshape(-1,1)

代码实现

python 复制代码
from sklearn.svm import LinearSVR
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
# 线性回归
# epsilon:超参数,容忍误差
def StandarLinearSVR(epsilon=0.1):
    return Pipeline([
        ("std_scaler",StandardScaler()),
        ("linearSVR",LinearSVR(epsilon=epsilon))
    ])

svr = StandarLinearSVR()
svr.fit(X,y)
y_predict = svr.predict(X)
plt.scatter(x,y)
plt.plot(np.sort(x),y_predict[np.argsort(x)],color='r')
plt.show()
python 复制代码
# 非线性回归任务
# epsilon:超参数,容忍误差
def StandarSVR(epsilon=0.1):
    return Pipeline([
        ("std_scaler",StandardScaler()),
        ("SVR",SVR(kernel='rbf',epsilon=epsilon))
    ])

svr = StandarSVR()
svr.fit(X,y)
y_predict = svr.predict(X)
plt.scatter(x,y)
plt.plot(np.sort(x),y_predict[np.argsort(x)],color='r')
plt.show()

SVM优缺点和适用条件

优点

  • 高效处理非线性数据
  • 良好的泛化能力(L2正则化特性)
  • 解决分类(SVC)和回归(SVR)问题
  • 稳定性(数据微小变化不会对超平面产生很大影响)

缺点

  • 选择合适的核函数比较困难
  • 大量内存需求(生成很多支持向量)
  • 大数据集上训练时间长
  • 难以解释

适用条件

  • 小样本数据
  • 非线性数据
相关推荐
AI指北21 小时前
AI速递 | 黄仁勋CES2026演讲:物理AI的“ChatGPT时刻”即将到来!
人工智能
梦梦代码精21 小时前
一个让 AI 应用“快速上线+私有部署+商业变现”的开源方案
人工智能·开源
webkubor21 小时前
🧠 2025:AI 写代码越来越强,但我的项目返工却更多了
前端·机器学习·ai编程
柠檬071121 小时前
opencv mat 统计小于0的个数
人工智能·opencv·计算机视觉
数据猿21 小时前
【金猿CIO展】上海纽约大学信息技术部高级主任常潘:大数据铸基,AI赋能,从数字化校园向智慧有机体的十年跃迁
大数据·人工智能
大猪宝宝学AI21 小时前
【AI Infra】SonicMoE论文笔记
论文阅读·人工智能·性能优化
sww_10261 天前
Spring-AI和LangChain4j区别
java·人工智能·spring
Coovally AI模型快速验证1 天前
超越Sora的开源思路:如何用预训练组件高效训练你的视频扩散模型?(附训练代码)
人工智能·算法·yolo·计算机视觉·音视频·无人机
GitCode官方1 天前
参会预告 | AtomGit 邀您共赴 TritonNext 2026 技术大会,解锁 AI 系统与编译生态新机遇
人工智能·开源·atomgit