1. sklearn中的LinearSVC与SVC的区别
这两种都能够实现SVM算法,但是他们是基于不同的底层实现的。
LinearSVC:
- 基于liblinear库实现
- 只有两种损失函数供选择,其默认的是squared_hinge loss
- 针对于大样本能够实现较快的运算速度与较好的效果
- 多分类采用的是OVR(one vs rest)
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:字符串。可取值为'l1'和'l2'分别对应1范数和2范数
loss:字符串。表示损失函数。可取值为'hinge':合页损失函数;'squared_hinge':合页损失函数的平方
dual:布尔值。如果为true,则求解对偶问题。如果为false,解决原始问题。当样本数量>特征数量时,倾向采用解原始问题
tol:浮点数,指定终止迭代的阈值
C:一个浮点数,惩罚参数
multi_class: 字符串,指定多分类问题的策略,'ovr': 采用one-vs-rest分类策略;'crammer_singer': 多类联合分类,很少用。因为它的计算量大,而且精度不会更佳
fit_intercept: 布尔值。如果为true,则计算截距,即决策函数中的常数项;否则忽略截距
intercept_scaling: 浮点值。如果提供了,则实例X变成向量[X,intercept_scaling]。此时相当于添加了一个人工特征,该特征对所有实例都是常数值
class_weight: 可以是个字典,或者字符串’balanced’。指定各个类的权重,若未提供,则认为类的权重为1。如果是字典,则指定每个类标签的权重;如果是'balanced',则每个类的权重是它出现频率的倒数
verbose: 一个整数,表示是否开启verbose输出
random_state: 一个整数或者一个RandomState实例,或者None。如果为整数,则它指定随机数生成器的种子如果为RandomState实例,则指定随机数生成器。如果为None,则使用默认的随机数生成器
max_iter:一个整数,指定最大的迭代次数
SVC:
- 基于libsvm库实现的
- 默认损失函数为hinge loss
- 对于大样本往往很难收敛
- 多分类既可采用OVO(One vs One)也可采用OVR(One vs Rest)
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’
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值
2. SVM分类器的实现
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC
svm_model = SVC(kernel = 'linear')
#f rom sklearn.svm import LinearSVC
# svm_model = LinearSVC()
svm_model.fit(train_x,train_y)
predict1 = svm_model.predict(train_x)
accuracy1 = accuracy_score(train_y,pred1)
print(accuracy1)
predict2 = svm_model.predict(test_x)
accuracy2 = accuracy_score(test_y,pred2)
print(accuracy2)
参考文献
(本文谨作为学习道路上的记载,不作任何商业用途,如有侵权,私信立删。如果该文章能对您的学习工作产生些许帮助,那这篇文档的意义将被无限放大)
[1] sklearn.svm.LinearSVC与sklearn.svm.SVC区别
[2] sklearn里LinearSVC与SVC区别
[3] sklearn.svm.LinearSVC函数
[4] sklearn.svm.SVC函数
[5] sklearn.svm.SVC 参数说明
版权声明:本文为MrShuang123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。