scikit-learn 支持向量机

参考链接:http://www.cnblogs.com/solong1989/p/9620170.html

参数:

C : float, optional (default=1.0)

惩罚系数,用来控制损失函数的惩罚系数,类似于LR中的正则化系数。C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样会出现训练集测试时准确率很高,但泛化能力弱,容易导致过拟合。 C值小,对误分类的惩罚减小,容错能力增强,泛化能力较强,但也可能欠拟合。

kernel : string, optional (default=’rbf’)

指定要在算法中使用的内核类型。 它必须是'linear','poly'(多项式核函数),'rbf'(高斯核函数),'sigmoid','precomputed'(用户自定义核函数)或者“callable”(可调用)之一。 如果没有给出,将使用'rbf'。 如果给出callable,则它用于从数据矩阵预先计算内核矩阵; 该矩阵应该是一个形状数组(n_samples,n_samples)。

常用的核函数https://blog.csdn.net/batuwuhanpei/article/details/52354822

一般有如下指导规则:

  1. 如果Feature的数量很大,甚至和样本数量差不多时,往往线性可分,这时选用LR或者线性核Linear;
  2. 如果Feature的数量很小,样本数量正常,不算多也不算少,这时选用RBF核;
  3. 如果Feature的数量很小,而样本的数量很大,这时手动添加一些Feature,使得线性可分,然后选用LR或者线性核Linear;
  4. 多项式核一般很少使用,效率不高,结果也不优于RBF;
  5. Linear核参数少,速度快;RBF核参数多,分类结果非常依赖于参数,需要交叉验证或网格搜索最佳参数,比较耗时;
  6. 应用最广的应该就是RBF核,无论是小样本还是大样本,高维还是低维等情况,RBF核函数均适用。

degree : int, optional (default=3)

当指定kernel为'poly'时,表示选择的多项式的最高次数,默认为三次多项式;若指定kernel不是'poly',则忽略,即该参数只对'poly'有用。(多项式核函数是将低维的输入空间映射到高维的特征空间)

gamma : float, optional (default=’auto’)

核函数系数 for ‘rbf’, ‘poly’ and ‘sigmoid’.

当前默认值为'auto',它使用1 / n_features,如果传递gamma ='scale',则它使用1 /(n_features * X.std())作为gamma的值。 当前默认的gamma''auto'将在版本0.22中更改为'scale'。

'auto_deprecated',不推荐使用'auto'版本作为默认值,表示没有传递明确的gamma值。

核函数系数,该参数是rbf,poly和sigmoid的内核系数;默认是'auto',那么将会使用特征位数的倒数,即1 / n_features。(即核函数的带宽,超圆的半径)。gamma越大,σ越小,使得高斯分布又高又瘦,造成模型只能作用于支持向量附近,可能导致过拟合;反之,gamma越小,σ越大,高斯分布会过于平滑,在训练集上分类效果不佳,可能导致欠拟合。

coef0 : float, optional (default=0.0)

核函数中的独立项。 它只在'poly'和'sigmoid'中很重要。

shrinking : boolean, optional (default=True)

是否进行启发式。此时相当于使用SMO算法,将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。

如果能预知哪些变量对应着支持向量,则只要在这些样本上训练就够了,其他样本可不予考虑,这不影响训练结果,但降低了问题的规模并有助于迅速求解。进一步,如果能预知哪些变量在边界上(即a=C),则这些变量可保持不动,只对其他变量进行优化,从而使问题的规模更小,训练时间大大降低。这就是Shrinking技术。 Shrinking技术基于这样一个事实:支持向量只占训练样本的少部分,并且大多数支持向量的拉格朗日乘子等于C。

probability : boolean, optional (default=False)

是否启用概率估计。 必须在调用fit之前启用它,并且会减慢该方法的速度。

tol : float, optional (default=1e-3)

能够容忍的停止标准,即残差收敛条件,默认是0.0001,即容忍1000分类里出现一个错误,与LR中的一致;误差项达到指定值时则停止训练。

cache_size : float, optional

Specify the size of the kernel cache (in MB).缓冲大小,用来限制计算量大小,默认是200M。

class_weight : {dict, ‘balanced’}, optional

权重设置,正类和反类的样本数量是不一样的,这里就会出现类别不平衡问题,该参数就是指每个类所占据的权重,默认为1,即默认正类样本数量和反类一样多,也可以用一个字典dict指定每个类的权值,或者选择默认的参数balanced,指按照每个类中样本数量的比例自动分配权值。如果不设置,则默认所有类权重值相同,以字典形式传入。 将类i的参数C设置为SVC的class_weight [i] * C. 如果没有给出,所有课程都应该有一个重量。 “平衡”模式使用y的值自动调整与输入数据中的类频率成反比的权重,如n_samples /(n_classes * np.bincount(y))

类似决策树中class_weight的作用

verbose : bool, default: False

是否启用详细输出。在训练数据完成之后,会把训练的详细信息全部输出打印出来,可以看到训练了多少步,训练的目标值是多少;但是在多线程环境下,由于多个线程会导致线程变量通信有困难,因此verbose选项的值就是出错,所以多线程下不要使用该参数。

max_iter : int, optional (default=-1)

最大迭代次数。

求解器内迭代的硬限制,-1表示无限制

decision_function_shape : ‘ovo’, ‘ovr’, default=’ovr’

原始的SVM只适用于二分类问题,如果要将其扩展到多类分类,就要采取一定的融合策略,这里提供了三种选择。‘ovo’ 一对一,为one v one,即将类别两两之间进行划分,用二分类的方法模拟多分类的结果,决策所使用的返回的是(样本数,类别数*(类别数-1)/2); ‘ovr’ 一对多,为one v rest,即一个类别与其他类别进行划分,返回的是(样本数,类别数),或者None,就是不采用任何融合策略。默认是ovr,因为此种效果要比oro略好一点。

Changed in version 0.19: decision_function_shape is ‘ovr’ by default.

New in version 0.17: decision_function_shape=’ovr’ is recommended.

Changed in version 0.17: 不推荐使用decision_function_shape ='ovo'和None.

random_state : int, RandomState instance or None, optional (default=None)

在使用SVM训练数据时,要先将训练数据打乱顺序,用来提高分类精度,这里就用到了伪随机序列。

如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例.

猜你喜欢

转载自blog.csdn.net/yingzoe/article/details/86658696