【机器学习】图解SVM中gamma和c参数的作用

本文深入解析SVM中的关键参数C和gamma的作用,及其对模型精度、召回率及F1分数的影响。通过调整这些参数并进行交叉验证,以提升模型的泛化能力和鲁棒性。

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

引言

上一篇博客主要讲解了一下svm的基本原理,然而在实际工程中解决一些分类问题时,我们需要调整c和gamma的值进行模型的训练,然后根据测试的precision,recall以及f1_score来进行模型的效果的判断。

所谓的precision,recall和f1_score所代表的意义如下:

precision:表示测试的准确度。具体等于正确预测个数(TP) / 被预测正确的个数(FP+FN)

recall:表示预测的召回率。具体等于正确预测的个数 / 预测的总个数

f1_score=2*precision*recall/(precision+recall),相当于对精度和召回率的一个综合评测

在使用svm对数据进行训练的时候,为了使得在模型准确度达到一定的要求的条件下,模型的泛化能力尽量更好,也就是鲁棒性要好,防止在训练过程中模型的过拟合。因此我们需要不断的调整gamma和c的值,并对数据不断地进行交叉验证,以找到合适的gamma和c的值,对应的训练的结果w和b作为最终的结果进行新样本的预测。

参数c和gamma的作用

我们通过下图详解参数c的作用,首先我们以一个简单的线性分类器为例,上一个博客中我们知道影响分类器的主要因素是支持向量,即虚线上的样本,如下图可知:

                      

但当正负样本的分布在如下情况时,需要引入核函数对数据进行高维度的映射,具体如下图:

    

实线为决策平面,虚线上的样本为支持向量。

参数c

上图中我们知道决策平面与支持向量之间有一个距离差,而在实际工程中,参数c正是影响了支持向量与决策平面之间的距离,具体效果为:

c越大,分类越严格,不能有错误

c越小,意味着有更大的错误容忍度

具体可以通过下图展示:

        

c越大分类结果越好相应的泛化能力降低,c越小,我们的决策边界更大一些,即在训练时容忍一些样本的误差,拿一些边界更宽的样本作为支持向量。

参数gamma

参数gamma主要是对低维的样本进行高度度映射,gamma值越大映射的维度越高,训练的结果越好,但是越容易引起过拟合,即泛化能力低。具体效果如下图表示:

               

当gamma较大时,决策平面如一个梅花,分类的效果好,但是模型的鲁棒性不一定高。

因此我们需要合理的选择c和gamma的值,使得在训练结果准确的同时,测试结果同样相对高,即鲁棒性能力强。

总结

在实际工程应用中,我们需要不断的调整gamma和c的值,并对数据不断地进行交叉验证,使得模型的预测结果更高。此时对应的训练结果w和b作为svm最终的训练结果。

 

 

 

 

 

 

 

 

 

 

 

### 支持向量机 (SVM) 中 Gamma 参数的功能与影响 Gamma 参数是当选择径向基函数 (RBF) 作为核函数时引入的一个重要超参数。它控制着数据点在高维空间中的分布情况以及模型的复杂度。 #### Gamma 参数作用 Gamma 参数定义了单个训练样本的影响范围大小。较高的 Gamma 值意味着每个训练样例的影响范围较小,从而使得决策边界更加贴合训练数据[^2]。这通常会导致模型具有更高的复杂性更强的能力捕捉局部模式。然而,这也可能增加过拟合的风险。相反,较低的 Gamma 值会扩大单个训练样本的影响范围,使决策边界更为平滑,有助于提高模型的泛化能力。 #### 对支持向量数量的影响 随着 Gamma 参数增大,支持向量的数量倾向于减少,因为更大的 Gamma 导致更窄的支持区域,只有靠近决策边界的少数点会被选作支持向量。反之,减小 Gamma 则会使更多数据点成为支持向量,进而可能导致模型变得过于简单而无法很好地适应复杂的分类任务。 #### 超参数调节的重要性 在实际应用中,合理设置 Gamma 参数对于获得良好的预测性能至关重要。如果 Gamma 设置得过高,则容易造成过拟合并降低测试集上的表现;若设定得太低,则可能出现欠拟合现象,无法充分表达输入数据间的非线性关系[^5]。因此,在构建 SVM 模型过程中,往往需要借助交叉验证技术来寻找最佳的 Gamma 取值组合以平衡偏差-方差权衡。 ```python from sklearn.svm import SVC import numpy as np # 创建一个简单的二维数据集用于演示目的 X = np.array([[0, 0], [1, 1]]) y = np.array([0, 1]) # 使用不同的 gamma 值实例化多个 SVC 模型 svc_low_gamma = SVC(gamma=0.01).fit(X, y) svc_high_gamma = SVC(gamma=100).fit(X, y) print(f"Support vectors with low gamma ({svc_low_gamma.gamma}): {len(svc_low_gamma.support_vectors_)}") print(f"Support vectors with high gamma ({svc_high_gamma.gamma}): {len(svc_high_gamma.support_vectors_)}") ``` 上述代码展示了如何通过改变 `gamma` 来观察其对支持向量数目产生的效果差异。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值