机器学习(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)问题
  • 稳定性(数据微小变化不会对超平面产生很大影响)

缺点

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

适用条件

  • 小样本数据
  • 非线性数据
相关推荐
不完备智能4 分钟前
🦌 DeerFlow 2.0 深度解析:字节跳动开源的"超级 Agent harness"架构揭秘
人工智能
阿木木AEcru4 分钟前
DeepSeek 崩了 13 小时,不是故障,是 V4 在换引擎
人工智能
小小工匠4 分钟前
Superpowers - 09 从构思到落地:如何用「计划编写与任务粒度」驾驭 AI 时代的软件开发
人工智能·skills·superpowers
阿聪谈架构5 分钟前
第07章(下):LangGraph 工作流进阶 —— 检查点、人工介入与多 Agent 协作
人工智能·后端
小小工匠7 分钟前
Superpowers - 08 在 AI 时代重写「需求评审会」:深入解读 Superpowers 的头脑风暴与设计规范机制
人工智能·skills·superpowers
橘子编程15 分钟前
Hermes Agent 完整使用指南
人工智能
yuhulkjv33517 分钟前
AI导出的Excel公式失效
人工智能·ai·chatgpt·excel·豆包·deepseek·ai导出鸭
七夜zippoe22 分钟前
OpenClaw 子代理(Subagent)机制详解
大数据·人工智能·subagent·openclaw·子代理
薛定e的猫咪27 分钟前
【Neural Networks 2025】TDAG 论文解读:多智能体不是重点,动态任务分解才是关键
人工智能·深度学习·计算机视觉
wayz1131 分钟前
Day 1 编程实战:机器学习基础与评估指标
人工智能·机器学习