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

缺点

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

适用条件

  • 小样本数据
  • 非线性数据
相关推荐
向量引擎9 分钟前
向量引擎接入 GPT Image 2 和 deepseek v4:一个 api key 把热门模型串起来,开发者终于不用深夜修接口了
人工智能·gpt·计算机视觉·aigc·api·ai编程·key
努力努力再努力FFF20 分钟前
医生对AI辅助诊断感兴趣,作为临床人员该怎么了解和学习?
人工智能·学习
AI医影跨模态组学34 分钟前
如何将纵向MRI深度学习特征与局部晚期直肠癌新辅助放化疗后的免疫微环境建立关联,并解释其对pCR及预后的机制
人工智能·深度学习·论文·医学·医学影像·影像组学
Empty-Filled35 分钟前
AI生成测试用例功能怎么测:一个完整实战案例
网络·人工智能·测试用例
eastyuxiao35 分钟前
设计一个基于 OpenClaw 的 AI 智能体来辅助交易
人工智能
Mr数据杨39 分钟前
手写数字识别如何支撑文档数字化应用
机器学习·数据分析·kaggle
波动几何1 小时前
因果动力学架构技能cda
人工智能
Lucas_coding1 小时前
【Claude Code Router】 Claude Code 兼容 OpenAI 格式 API, Claude code 接入本地部署模型
人工智能·python
jinanwuhuaguo1 小时前
(第二十七篇)OpenClaw四月的演化风暴:OpenClaw 2026年4月全版本更新的文明级解读
大数据·人工智能·架构·kotlin·openclaw
测试员周周1 小时前
【AI测试系统】第5篇:从 Archon 看 AI 工程化落地:为什么"确定性编排+AI 弹性智能"是终局?
人工智能·python·测试