1.LinearSVC与SVC的区别
LinearSVC
- 基于liblinear库实现
- 有多种惩罚参数和损失函数可供选择
- 训练集实例数量大(大于1万)时也可以很好地进行归一化
- 既支持稠密输入矩阵也支持稀疏输入矩阵
- 多分类问题采用one-vs-rest方法实现
SVC
- 基于libsvm库实现
- 训练时间复杂度为 [公式]
- 训练集实例数量大(大于1万)时很难进行归一化
- 多分类问题采用one-vs-rest方法实现
2.LinearSVC详细说明
LinearSVC实现了线性分类支持向量机,它是给根据liblinear实现的,可以用于二类分类,也可以用于多类分类。其原型为:class 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)
初始化参数
-
C:一个浮点数,惩罚参数
-
loss:字符串。表示损失函数。可取值为
-
’hinge’:合页损失函数;
-
’squared_hinge’:合页损失函数的平方
-
penalty:字符串。可取值为’l1’和’l2’分别对应1范数和2范数
-
dual:布尔值。如果为true,则求解对偶问题。如果为false,解决原始问题。当样本数量>特征数量时,倾向采用解原始问题
-
tol:浮点数,指定终止迭代的阈值
-
multi_class: 字符串,指定多分类问题的策略
-
’ovr’: 采用one-vs-rest分类策略;
-
’crammer_singer’: 多类联合分类,很少用。因为它的计算量大,而且精度不会更佳,此时忽略loss,penalty,dual参数
-
fit_intercept: 布尔值。如果为true,则计算截距,即决策函数中的常数项;否则忽略截距
-
intercept_scaling: 浮点值。如果提供了,则实例X变成向量[X,intercept_scaling]。此时相当于添加了一个人工特征,该特征对所有实例都是常数值
-
class_weight: 可以是个字典,或者字符串’balanced’。指定各个类的权重,若未提供,则认为类的权重为1
· 如果是字典,则指定每个类标签的权重;
· 如果是’balanced’,则每个类的权重是它出现频率的倒数 -
verbose: 一个整数,表示是否开启verbose输出
-
random_state: 一个整数或者一个RandomState实例,或者None
· 如果为整数,则它指定随机数生成器的种子
· 如果为RandomState实例,则指定随机数生成器
· 如果为None,则使用默认的随机数生成器 -
max_iter:一个整数,指定最大的迭代次数
属性
- coef_: 一个数组,它给出了各个特征的权重
- intercept_:一个数组,它给出了截距,即决策函数中的常数项
方法
- fix(X,y): 训练模型
- predict(X): 用模型进行预测,返回预测值
- score(X,y[, sample_weight]):返回在(X, y)上预测的准确率