SVM的两个参数 C 和 gamma

本文深入解析SVM模型中的C与gamma参数的重要性及其对泛化能力的影响,同时介绍GridSearch方法在参数搜索中的应用。通过实例探讨不同参数设置下模型的性能变化,强调参数选择对模型准确率的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           SVM模型有两个非常重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差

           gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。

          此外大家注意RBF公式里面的sigma和gamma的关系如下

   

        这里面大家需要注意的就是gamma的物理意义,大家提到很多的RBF的幅宽,它会影响每个支持向量对应的高斯的作用范围,从而影响泛化性能。我的理解:如果gamma设的太大,会很小,很小的高斯分布长得又高又瘦, 会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,存在训练准确率可以很高,(如果让无穷小,则理论上,高斯核的SVM可以拟合任何非线性数据,但容易过拟合)而测试准确率不高的可能,就是通常说的过训练;而如果设的过小,则会造成平滑效应太大,无法在训练集上得到特别高的准确率,也会影响测试集的准确率。

此外,可以明确的两个结论是:
结论1:样本数目少于特征维度并不一定会导致过拟合,这可以参考余凯老师的这句评论:
这不是原因啊,呵呵。用RBF kernel, 系统的dimension实际上不超过样本数,与特征维数没有一个trivial的关系。

结论2:RBF核应该可以得到与线性核相近的效果(按照理论,RBF核可以模拟线性核),可能好于线性核,也可能差于,但是,不应该相差太多。
当然,很多问题中,比如维度过高,或者样本海量的情况下,大家更倾向于用线性核,因为效果相当,但是在速度和模型大小方面,线性核会有更好的表现。

老师木还有一句评论,可以加深初学者对SVM的理解:
须知rbf实际是记忆了若干样例,在sv中各维权重重要性等同。线性核学出的权重是feature weighting作用或特征选择 。
以上摘录了:http://blog.sina.com.cn/s/blog_6ae183910101cxbv.html


Grid Search

Grid Search是用在Libsvm中的参数搜索方法。很容易理解:就是在C,gamma组成的二维参数矩阵中,依次实验每一对参数的效果。

                                                    


使用grid Search虽然比较简单,而且看起来很naïve。但是他确实有两个优点:

  1. 可以得到全局最优
  2. (C,gamma)相互独立,便于并行化进行


### 支持向量机SVM参数CGamma调整优化方法及其影响 #### 参数定义与作用机制 在支持向量机(SVM)模型中,`C` `gamma` 是两个重要的超参数。其中: - **C** 控制着错误分类的成本以及模型复杂度之间的平衡[^1]。较小的 C 值意味着更宽泛的支持向量边界,允许更多的训练样本被误分类;较大的 C 则追求更高的准确性,即使这意味着构建更加复杂的决策边界。 - **Gamma (γ)** 特指当采用径向基函数(RBF)作为核函数时引入的一个额外参数。它决定了单个训练样例的影响范围大小。较高的 gamma 表示每个点具有较短的作用距离,从而使得模型能够捕捉局部特征并形成更为精细的决策曲面;相反地,较低的 gamma 导致全局化的平滑化处理方式,倾向于创建较为简单的线性或近似线性的分离平面。 #### 影响分析 随着 `gamma` 的增加,支持向量的数量会减少,因为此时只有那些非常接近边界的实例才会成为支持向量。这可能导致过拟合现象的发生,尤其是在高维度的数据集上。另一方面,如果设置得太低,则可能会引起欠拟合问题,无法充分表达数据内部结构的变化趋势。 对于 `C` 来说,其值的选择同样至关重要。过大或者过小都会给最终性能带来负面影响。具体表现为:太高的惩罚系数容易造成过度适应训练集的情况(即过拟合),而偏低则难以有效地区分不同类别间的差异,进而降低预测精度。 #### 实践中的调优策略 为了找到最佳组合,在实践中通常采取网格搜索(Grid Search)[^4]的方法来进行广泛的探索。下面给出一段Python代码片段用于展示如何利用Scikit-Learn库执行此操作: ```python from sklearn.svm import SVC from sklearn.model_selection import GridSearchCV, train_test_split import numpy as np # 加载并预处理数据... X_train, X_test, y_train, y_test = train_test_split(X, y) param_grid = {'C': [0.1, 1, 10], 'gamma': [0.001, 0.01, 0.1]} grid_search = GridSearchCV(SVC(), param_grid=param_grid, cv=5) grid_search.fit(X_train, y_train) print("Best parameters found:", grid_search.best_params_) ``` 这段脚本通过指定一系列候选值来遍历所有可能的配对情况,并借助交叉验证技术评估每种配置下的表现指标,最后返回最优解。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值