LinearSVC与SVC的区别

LinearSVC

基于liblinear库实现
有多种惩罚参数和损失函数可供选择
训练集实例数量大(大于1万)时也可以很好地进行归一化
既支持稠密输入矩阵也支持稀疏输入矩阵
多分类问题采用one-vs-rest方法实现

SVC

基于libsvm库实现
训练时间复杂度为 o ( n 2 ) o(n^2) o(n2)
训练集实例数量大(大于1万)时很难进行归一化
多分类问题采用one-vs-rest方法实现

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:一个浮点数,惩罚参数. 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)上预测的准确率

预测方法
两者的预测方法都是利用公式:
s i g n ( b + y i x T w ) sign(b+y_i x^Tw) sign(b+yixTw)

你可能感兴趣的:(机器学习)