机器学习08 | 支持向量机(SVM)

我们依次分享了 随机森林、GBDT、XGBoost 这些基于树的集成模型,它们在处理大规模数据时,往往表现出了极强的预测能力和泛化性能。

但是在生信数据中,树模型未必是最优解,今天分享一个经典模型—— 支持向量机(Support Vector Machine, SVM)

SVM 的核心思想非常直观:找到一条能够 最大化类别间间隔(margin) 的超平面,并通过 核函数(Kernel trick 将非线性问题映射到高维空间,从而实现线性可分。很适合解决“小样本,高维度”数据的分类问题

原理详解

Step1:线性可分的超平面

假设我们有两类样本(红色点和蓝色点),SVM 的目标是找到一个 能够最大化类别间间隔(margin) 的超平面:

分类规则为:

Step2: 最大化间隔(Margin)

SVM既要正确分类所有点,又要最大化两类样本到超平面的间隔,于是我们定义:

  • 距离超平面最近的点 → 支持向量

  • 这些点到超平面的距离,就是 间隔 (Margin)

而单个支持向量到超平面的距离为1/||w||,所以总间隔(Margin) = 两边加起来:

优化问题写成:

Step3: 软间隔(Soft Margin)

现实数据往往不能完全分开,如果强制所有点都分对,就会导致边界被“奇怪的点”拖歪,模型过拟合。

于是我们引入 松弛变量 ξ,允许少量点分错,并用 C 来控制“分错点的惩罚力度”。

C(惩罚系数)

  • C 大:强制分类正确,间隔可能变小 → 容易过拟合。

  • C 小:允许少量错误,间隔更大 → 泛化更好。

Step4: 核函数(Kernel Trick)

当样本在原始空间不可分时,可以通过核函数把数据“升维”,在高维空间里再拉直线,核函数的核心就是,不是真的算高维坐标,而是直接用核函数来计算两个点在高维空间的相似度。

常见核函数有下面几种:

  • 线性核:高维稀疏数据(如基因表达谱)。

  • RBF 核:万能核,适合非线性复杂关系(常用在甲基化、蛋白质组学)。

  • 多项式核:适合存在交互作用的特征。

    以RBF 核 (Radial Basis Function, 高斯核)为例:

γ(gamma)参数:

  • γ 大:模型复杂,两个点只要距离稍微远一点,核值就接近 0,即每个点影响范围小,模型容易过拟合。

  • γ 小:即使两个点距离比较远,核值也还不小,即每个点影响范围更大,模型更平滑,泛化能力强。
    代码实现

  • 横轴 (Sigma)

RBF 核的参数,值越大 → 决策边界越曲折;值越小 → 决策边界越光滑。

  • 纵轴 (ROC Cross-Validation)

用交叉验证计算的平均 ROC AUC。

  • 不同颜色/线条 (Cost)

图例里的 0.01, 0.1, 1, 10, 100 是 C(惩罚系数)。

library(caret)library(kernlab)#十折交叉ctrl <- trainControl(  method = "cv",                # 单次 k 折交叉验证  number = 10,                  # 10 折  classProbs = TRUE,            # 启用概率输出(评估ROC需要)  summaryFunction = twoClassSummary,  # 使用ROC、敏感度、特异度作为指标  savePredictions = "final"     # 保存最优模型下的预测结果)#提前输入参数sig <- as.numeric(kernlab::sigest(X))[2]          # 中位数估计grid <- expand.grid(  C = 10^seq(-2, 2, by = 1),                       # 0.01~100  sigma = sig * c(0.25, 0.5, 1, 2, 4)              # 围绕估计值搜索)#  训练 set.seed(123)svm_rbf_fit <- train(  x = X, y = y,                # 特征矩阵   method = "svmRadial",        # 使用 SVM + RBF核  metric = "ROC",              # 用 ROC AUC 作为调参的指标  trControl = ctrl,            # 交叉验证的控制参数  preProcess = c("center", "scale"),  # 预处理:中心化、标准化  tuneGrid = grid              # 自定义超参数网格 (C 和 sigma))svm_rbf_fit              # 查看最优参数与CV表现plot(svm_rbf_fit)        # 不同(C, sigma)下的ROC对比

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容