Sklearn.svm

Sklearn.svm

  • scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 。另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 。

  • SVM和NuSVM区别仅仅在于对损失的度量方式不同,NuSVM有一个参数来控制训练集训练的错误率或支持向量的百分比。

  • LinearSVM仅支持线性核函数,不支持各种低维到高维的核函数,对线性不可分的数据不能使用。

Kernel

  1. 线性核函数(Linear Kernel)

    表达式为:𝐾(𝑥,𝑧)=𝑥∙𝑧,普通的内积。LinearSVC 和 LinearSVR 只能使用它。

  2. 多项式核函数(Polynomial Kernel)

    表达式为:𝐾(𝑥,𝑧)=(𝛾𝑥∙𝑧+𝑟)𝑑 ,其中𝛾 𝑟 𝑑都需要自己调参,比较麻烦。线性不可分SVM常用的核函数之一。

  3. 高斯核函数(Gaussian Kernel)

    表达式为:𝐾(𝑥,𝑧)=𝑒𝑥𝑝(−𝛾||𝑥−𝑧||2), 其中𝛾大于0,需要自己调参。
    在SVM中也称为径向基核函数(Radial Basis Function,RBF)是libsvm默认核函数,也是scikit-learn默认的核函数。非线性数据使用默认的高斯核函数会有比较好的效果。

  4. Sigmoid核函数(Sigmoid Kernel)

    表达式为:𝐾(𝑥,𝑧)=𝑡𝑎𝑛ℎ(𝛾𝑥∙𝑧+𝑟), 其中𝛾𝑟都需要自己调参。线性不可分SVM常用的核函数之一。

SVM分类算法库

参数LinearSVCSVCNuSVC
惩罚系数C默认为1,需要通过交叉验证来选择一个合适的C。一般来说,如果噪点较多,C需小一些。同上
nunu代表训练集训练的错误率的上限,或者支持向量的百分比下限,取值范围为(0,1],默认是0.5。
核函数 kernel‘linear’线性核函数, ‘poly’多项式核函数, ‘rbf’高斯核函数, ‘sigmoid’sigmoid核函数。默认是高斯核’rbf’。“precomputed”, 即预先计算出所有训练集和测试集样本对应的Gram矩阵,这样𝐾(𝑥,𝑧)直接在对应的Gram矩阵中找对应的位置的值。同上
正则化参数penalty‘l1’ L1正则化, ‘l2’ L2正则化。默认是L2正则化,如果我们需要产生稀疏话的系数的时候,可以选L1正则化。
是否用对偶形式优化dual默认是True, 即采用对偶形式来优化算法,如果样本量比特征数多,此时采用对偶形式计算量较大,推荐dual设置为False,即采用原始形式优化
核函数参数degree核函数中的𝑑,默认为3。一般需要通过交叉验证选择一组合适的𝑑,𝛾,𝑟同上
核函数参数gamma核函数中的𝛾,默认为’auto’, 即1/特征维度同上
核函数参数coef核函数中的𝑟,默认为0同上
样本权重class_weight指定样本各类别的权重,防止训练集某些类别的样本过多,导致训练的决策过于偏向这些类别。可以自己指定各个样本的权重,或者用“balanced”算法自己计算权重,样本量少的类别所对应的样本权重会高。如果样本类别分布没有明显的偏倚,选择默认"None"同上同上
分类决策decision_function_shapeOvR(one ve rest)无论多少元分类,都看做二元分类,对于第K类的分类决策,我们把所有第K类的样本作为正例,其他所有样本都作为负例,然后在上面做二元分类,得到第K类的分类模型。OvO(one-vs-one)每次在所有的T类样本里面选择两类样本出来,T1类和T2类,把所有输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元分类,得到模型参数。我们一共需要T(T-1)/2次分类。从上面的描述可以看出OvR相对简单,但分类效果相对略差,而OvO分类相对精确,但是分类速度没有OvR快。一般建议使用OvO以达到较好的分类效果。同上
分类决策multi_classOvR或者 ‘crammer_singer’
缓存大小cache_sizeLinearSVC计算量不大,因此不需要这个参数在大样本的时候,缓存大小会影响训练速度,因此如果机器内存大,推荐用500MB甚至1000MB。默认是200,即200MB同上

SVM回归算法库

参数LinearSVRSVRNuSVR
惩罚系数C在分类模型里,nuSVC使用nu这个等价的参数控制错误率,没有使用C。在回归模型里,nuSVR仍然有这个参数,因为除了惩罚系数C还有还有一个距离误差𝜖来控制损失度量,因此仅仅一个nu不能等同于C,也就是说回归错误率是惩罚系数C和距离误差𝜖共同作用的结果。同上同上
nu通过选择不同的错误率可以得到不同的距离误差𝜖。
距离误差epsilon训练集中的样本需满足 − ϵ − ξ i ∨ ≤ y i − w ∙ ϕ ( x i ) − b ≤ ϵ + ξ i ∧ -\epsilon - \xi_i^{\lor} \leq y_i - w \bullet \phi(x_i ) -b \leq \epsilon + \xi_i^{\land} ϵξiyiwϕ(xi)bϵ+ξi同上
损失函数度量loss‘epsilon_insensitive’ 满足 − ϵ − ξ i ∨ ≤ y i − w ∙ ϕ ( x i ) − b ≤ ϵ + ξ i ∧ -\epsilon - \xi_i^{\lor} \leq y_i - w \bullet \phi(x_i ) -b \leq \epsilon + \xi_i^{\land} ϵξiyiwϕ(xi)bϵ+ξi,是默认的SVM回归的损失度量标准形式。 ‘squared_epsilon_insensitive’ ,满足 y i − w ∙ ϕ ( x i ) − b ≤ ϵ + ξ i ∧ y_i - w \bullet \phi(x_i ) -b \leq \epsilon + \xi_i^{\land} yiwϕ(xi)bϵ+ξi,少一个松弛系数。一般使用默认的‘epsilon_insensitive’。

调参小结

  1. 一般推荐在做训练之前对数据进行归一化,当然测试集中的数据也需要归一化。
  2. 在特征数非常多的情况下,或者样本数远小于特征数的时候,使用线性核,效果就已经很好,并且只需要选择惩罚系数C即可。
  3. 在选择核函数时,如果线性拟合不好,一般推荐使用默认的高斯核’rbf’。这时主要需要对惩罚系数C和核函数参数𝛾进行调参,通过多轮的交叉验证选择合适的惩罚系数C和核函数参数𝛾。
  4. 理论上高斯核不会比线性核差,但是这个理论却建立在要花费更多的时间来调参上。所以实际上能用线性核解决问题我们尽量使用线性核。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值