各类模型参数汇总

1. SVM

1.1 SVC

sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False,
tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None,random_state=None)

参数:

  • C:C-SVC的惩罚参数C?默认值是1.0
    C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
  • kernel :核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’
       0 – 线性:u’v
       1 – 多项式:(gamma*u’*v + coef0)^degree
       2 – RBF函数:exp(-gamma|u-v|^2)
       3 –sigmoid:tanh(gamma*u’*v + coef0)
  • degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
  • gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features
  • coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。
  • probability :是否采用概率估计?.默认为False
  • shrinking :是否采用shrinking heuristic方法,默认为true
  • tol :停止训练的误差值大小,默认为1e-3
  • cache_size :核函数cache缓存大小,默认为200
  • class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)
  • verbose :允许冗余输出?
  • max_iter :最大迭代次数。-1为无限制。
  • decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3
  • random_state :数据洗牌时的种子值,int值
    主要调节的参数有:C、kernel、degree、gamma、coef0。

调参

SVM分类算法库参数小结:

参数 LinearSVC SVC NuSVC
惩罚系数C 即为我们第二节中SVM分类模型原型形式和对偶形式中的惩罚系数C,默认为1,一般需要通过交叉验证来选择一个合适的C。一般来说,如果噪音点较多时,C需要小一些。 NuSVC没有这个参数, 它通过另一个参数nu来控制训练集训练的错误率,等价于选择了一个C,让训练集训练后满足一个确定的错误率
nu LinearSVC 和SVC没有这个参数,LinearSVC 和SVC使用惩罚系数C来控制惩罚力度 nu代表训练集训练的错误率的上限,或者说支持向量的百分比下限,取值范围为(0,1],默认是0.5.它和惩罚系数C类似,都可以控制惩罚的力度。
核函数 kernel LinearSVC没有这个参数,LinearSVC限制了只能使用线性核函数 核函数有四种内置选择,第三节已经讲到:‘linear’即线性核函数, ‘poly’即多项式核函数, ‘rbf’即高斯核函数, ‘sigmoid’即sigmoid核函数。如果选择了这些核函数, 对应的核函数参数在后面有单独的参数需要调。默认是高斯核’rbf’。还有一种选择为”precomputed”,即我们预先计算出所有的训练集和测试集的样本对应的Gram矩阵,这样K(x,z)直接在对应的Gram矩阵中找对应的位置的值。当然我们也可以自定义核函数, 由于我没有用过自定义核函数,这里就不多讲了。
正则化参数penalty 仅仅对线性拟合有意义,可以选择‘l1’即L1正则化 或者 ‘l2’即L2正则化。默认是L2正则化,如果我们需要产生稀疏话的系数的时候,可以选L1正则化,这和线性回归里面的Lasso回归类似。 SVC和NuSVC没有这个参数
是否用对偶形式优化dual 这是一个布尔变量,控制是否使用对偶形式来优化算法,默认是True,即采用上面第二节的分类算法对偶形式来优化算法。如果我们的样本量比特征数多,此时采用对偶形式计算量较大,推荐dual设置为False,即采用原始形式优化 SVC和NuSVC没有这个参数
核函数参数degree LinearSVC没有这个参数,LinearSVC限制了只能使用线性核函数 如果我们在kernel参数使用了多项式核函数 ‘poly’,那么我们就需要对这个参数进行调参。这个参数对应(K(x,z)=(γx∙z+r)d中的d。默认是3。一般需要通过交叉验证选择一组合适的
核函数参数gamma LinearSVC没有这个参数,LinearSVC限制了只能使用线性核函数 如果我们在kernel参数使用了多项式核函数 ‘poly’,高斯核函数‘rbf’, 或者sigmoid核函数,那么我们就需要对这个参数进行调参。多项式核函数中这个参数对应(K(x,z)=(γx∙z+r)d中的γ一般需要通过交叉验证选择一组合适的γ,r,d 高斯核函数中这个参数对应K(x,z)=exp(γ
核函数参数coef0 LinearSVC没有这个参数,LinearSVC限制了只能使用线性核函数 如果我们在kernel参数使用了多项式核函数 ‘poly’,或者sigmoid核函数,那么我们就需要对这个参数进行调参。多项式核函数中这个参数对应(K(x,z)=(γx∙z+r)d中的r。一般需要通过交叉验证选择一组合适的γ,r,d sigmoid核函数中这个参数对应(K(x,z)=tanh(γx∙z+r)中的r。一般需要通过交叉验证选择一组合适的γ,r coef0默认为0
样本权重class_weight 指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多,导致训练的决策过于偏向这些类别。这里可以自己指定各个样本的权重,或者用“balanced”,如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。当然,如果你的样本类别分布没有明显的偏倚,则可以不管这个参数,选择默认的”None”
分类决策decision_function_shape LinearSVC没有这个参数,使用multi_class参数替代。 可以选择’ovo’或者‘ovo’.目前0.18版本默认是’ovo’.0.19版本将是’ovr’OvR(one ve rest)的思想很简单,无论你是多少元分类,我们都可以看做二元分类。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元分类,得到第K类的分类模型。其他类的分类模型获得以此类推。OvO(one-vs-one)则是每次每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元分类,得到模型参数。我们一共需要T(T-1)/2次分类。从上面的描述可以看出OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而OvO分类相对精确,但是分类速度没有OvR快。一般建议使用OvO以达到较好的分类效果。
分类决策multi_class 可以选择 ‘ovr’ 或者 ‘crammer_singer’ ovr’和SVC和nuSVC中的decision_function_shape对应的‘ovr’类似。’crammer_singer’是一种改良版的’ovr’,说是改良,但是没有比’ovr‘好,一般在应用中都不建议使用。 SVC和nuSVC没有这个参数,使用decision_function_shape参数替代。
缓存大小cache_size LinearSVC计算量不大,因此不需要这个参数 在大样本的时候,缓存大小会影响训练速度,因此如果机器内存大,推荐用500MB甚至1000MB。默认是200,即200MB.

你可能感兴趣的:(分类算法简述)