数据挖掘十大算法(三):支持向量机SVM sklearn实现

  • Post author:
  • Post category:其他


今天进入了支持向量机(SVM)的学习,如果只是对支持向量机的表面理论了解,那么还算不是太难。但是对于里面的数学推导真的不是一两天能看懂的(尤其是我这种数学功底不是很强的),使用编码实现数学推导的一系列过程也不是那么好理解的。由于时间关系,直接学习sklearn中SVM的使用,以后有时间再更新对支持向量机深入的了解。

主要关于

SVC



LinearSVC

的翻译,有疑惑的地方可以查看最下面官方文档,自行理解。(在大量样本时,最好选择LinearSVC模型)


一 sklearn的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)



参数:



l  C


:C-SVC的惩罚参数C。默认值是float=1.0

C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。



l  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)



l  degree


:多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。



l  gamma


: ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features



l  coef0


:核函数的常数项。对于‘poly’和 ‘sigmoid’有用。


l  probability

:是否采用概率估计。.默认为False


l  shrinking

:是否采用shrinking heuristic方法,默认为true


l  tol

:停止训练的误差值大小,默认为1e-3


l  cache_size

:核函数cache缓存大小,默认为200


l  class_weight

:类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)


l  verbose

:允许冗余输出


l  max_iter

:最大迭代次数。-1为无限制。


l  decision_function_shape

:‘ovo’, ‘ovr’ or None, default=None3


l  random_state

:数据洗牌时的种子值,int型

主要调节的参数有:C、kernel、degree、gamma、coef0。



方法:


decision_function(X)

样品X到分离超平面的距离。


fit(X,y [,sample_weight])

根据给定的训练数据拟合SVM模型。


get_params([deep])

获取此估算工具的参数。


predict(X)

对X中的样本进行分类。


score(X,y [,sample_weight])

返回给定测试数据和标签的平均准确度。


set_params(** PARAMS)

设置此估算器的参数。


二 sklearn的LinearSVC部分文档翻译,主要涉及的是模型参数的意义和方法:


Sklearn.svm.LinearSVC(penalty=’l2’,loss=’squared_hinge’,dual=True,tol=0.0001,C=1.0,multi_class=’ovr’,fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)


|  penalty :

string, ‘l1’ or ‘l2’ (default=’l2’)

指定惩罚中使用的规范。 ‘l2’惩罚是SVC中使用的标准。 ‘l1’引导稀疏的coef_向量。


|  loss :

string, ‘hinge’ or ‘squared_hinge’ (default=’squared_hinge’)

指定损失函数。 “hinge”是标准的SVM损失(例如由SVC类使用),而“squared_hinge”是hinge损失的平方。


|  dual :

bool, (default=True)

选择算法以解决双优化或原始优化问题。 当n_samples> n_features时,首选dual = False。


|  tol :

float, optional (default=1e-4)

误差停止标准


|  C :

float, optional (default=1.0)

错误项的惩罚参数


|  multi_class :

string, ‘ovr’ or ‘crammer_singer’ (default=’ovr’)

如果y包含两个以上的类,则确定多类策略。 “ovr”训练n_classes one-vs-rest分类器,而“crammer_singer”优化所有类的联合目标。 虽然crammer_singer在理论上是有趣的,因为它是一致的,但它在实践中很少使用,因为它很少能够提高准确性并且计算成本更高。 如果选择“crammer_singer”,则将忽略选项loss,penalty和dual。


|  fit_intercept :

boolean, optional (default=True)

是否计算此模型的截距。 如果设置为false,则不会在计算中使用截距(即,预期数据已经居中)。


|  intercept_scaling :

float, optional (default=1)

当self.fit_intercept为True时,实例向量x变为[x,self.intercept_scaling],即具有等于intercept_scaling的常量值的“合成”特征被附加到实例向量。 截距变为intercept_scaling *合成特征权重注意! 合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。


|  class_weight :

{dict, ‘balanced’}, optional

将种类i的参数C设置为SVC的class_weight [i] * C. 如果没有给出,所有种类都应该有一个权重。 “balanced”模式使用y的值自动调整与输入数据中的类频率成反比的权重,如n_samples /(n_classes * np.bincount(y))


|  verbose :

int, (default=0)

启用详细输出。 注意,此设置利用liblinear中的每进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。


|  random_state :

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

在随机数据混洗时使用的伪随机数生成器的种子。 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。


|  max_iter :

int, (default=1000)

要运行的最大迭代次数。



方法:


decision_function(X)

预测样本的置信度分数。


densify()

将系数矩阵转换为密集阵列格式。


fit(X,y [,sample_weight])

根据给定的训练数据拟合模型。


get_params([deep])

获取此估算工具的参数。


predict(X)

预测X中样本的类标签。


score(X,y [,sample_weight])

返回给定测试数据和标签的平均准确度。


set_params(** PARAMS)

设置此估算器的参数。


sparsify()

将系数矩阵转换为稀疏格式。

SVC和LinearSVC的区别以及SGDClassifier:



SVC:



使用libsvm实现支持向量机分类器:内核可以是非线性的,但其SMO算法不能像LinearSVC那样扩展到大量样本。此外,SVC多类模式使用一对一方案实现,而LinearSVC使用一个对剩余方案。通过使用

sklearn.multiclass.OneVsRestClassifier

包装器,可以使用SVC实现一个与剩余的一个。最后,如果输入是C连续的,SVC可以在没有内存复制的情况下拟合密集数据。稀疏数据仍然会产生内存复制。



sklearn.linear_model.SGDClassifier:



SGDClassifier可以通过调整惩罚和损失参数来优化与LinearSVC相同的成本函数。此外,它需要更少的内存,允许增量(在线)学习,并实现各种损失功能和正规化机制。

官方文章地址:

SVC:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

LinearSVC:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC



版权声明:本文为qq_36523839原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。