我在使用libsvm进行机器学习时使用了RBF
核,现在我想探索其他核在我的数据集上的表现。
每个核都有多个需要优化的参数。对于RBF
核,C和g
参数用于网格搜索,以选择最佳的Cost和gamma组合。
-d degree : 设置核函数中的度数(默认值为3)-g gamma : 设置核函数中的gamma值(默认值为1/num_features)-r coef0 : 设置核函数中的coef0值(默认值为0)-c cost : 设置C-SVC、epsilon-SVR和nu-SVR的参数C(默认值为1)-n nu : 设置nu-SVC、单类SVM和nu-SVR的参数nu(默认值为0.5)-p epsilon : 设置epsilon-SVR损失函数中的epsilon值(默认值为0.1)-m cachesize : 设置缓存内存大小,单位为MB(默认值为100)-e epsilon : 设置终止标准的容忍度(默认值为0.001)-h shrinking : 是否使用收缩启发式,0或1(默认值为1)-b probability_estimates : 是否训练SVC或SVR模型以进行概率估计,0或1(默认值为0)-wi weight : 将类i的参数C设置为weight*C,用于C-SVC(默认值为1)
我想了解每个核的相关参数。由于有多个参数需要选择。例如,RBF
核使用C和g
。还请提供参数的网格大小和范围。例如,C的范围为10^-3到10^11,g的范围为10^3到10^-13
我用于RBF核的Perl网格生成器如下:
for ( $i = -3; $i <= 11; $i += 1 ) { for ( $j = 3; $j >= -13; $j += -1 ) { my $a = 2**$i; my $b = 2**$j; $output = "svm-train -c $a -g $b -v 5 $ARGV[0]"; print "$output >& ${ARGV[0]}_${a}_${b}.out \n"; }}
回答:
libsvm支持四种核:线性、多项式、径向基函数(RBF)和Sigmoid(实际上不是有效的核)。
- 线性:无参数
- 多项式:gamma(>0,浮点数)、coef0(浮点数)、degree(>1,整数)
- RBF:gamma(>0,浮点数)
- Sigmoid:gamma(>0,浮点数)、coef0(浮点数)
你无法提供通用的参数网格,因为它们依赖于数据。
C是SVM的一个参数,因此总是需要进行拟合。其余参数并非核特定的,你不需要过多关注它们。