sklearn.svm.LinearSVC

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)

类似于参数kernel= linear的SVC,但是它是liblinear而不是libsvm实现的,所以它在惩罚函数和损失函数的选择上更灵活,更适合大量样本。这个类既支持稠密输入又支持稀疏输入,并且多类支持是根据一对多方案处理的。

用户指南阅读更多内容。

参数 说明
penalty {‘l1’, ‘l2’}, default=’l2’
指定惩罚中使用的规范。 SVC中使用的标准是“ l2”惩罚。 “ l1”会导致稀疏的coef_向量。
loss {‘hinge’, ‘squared_hinge’}, default=’squared_hinge’
指定损失函数。hinge是标准的SVM损失(如SVC类使用的),而squared_hinge是hinge损失的平方。
dual bool, default=True
选择算法来解决对偶或原始优化问题。 当n_samples> n_features时,首选dual = False。
tol float, default=1e-4
设置停止的条件。
C float, default=1.0
正则化参数。 正则化的强度与C成反比。必须严格设置为正的
multi_class {‘ovr’, ‘crammer_singer’}, default=’ovr’
如果y包含两个以上的类,则确定多类策略。 “ ovr”训练n_class一对多的静态分类器,而“ crammer_singer”则优化所有类别的联合目标。 尽管从理论上讲crammer_singer很有趣,因为它是一致的,但在实践中很少使用它,因为它很少导致更好的准确性,并且计算成本更高。 如果选择“ crammer_singer”,则选项损失,惩罚和双重选择将被忽略。
fit_intercept bool, default=True
是否计算此模型的截距。 如果设置为false,则在计算中将不使用截距(即,数据已中心化)。
intercept_scaling float, default=1
当self.fit_intercept为True时,实例向量x变为[x,self.intercept_scaling],即,将具有等于intercept_scaling的恒定值的“合成”特征附加到实例向量。 截距变为intercept_scaling*综合特征权重
注意! 与所有其他特征一样,合成特征权重也要经过l1 / l2正则化。 为了减轻正则化对合成特征权重(以及因此对截距)的影响,必须增加intercept_scaling。
class_weight dict or ‘balanced’, default=None
对于SVC,将类别i的参数C设置为class_weight [i] * C。 如果未给出,则所有类均应具有权重一。 “平衡”模式使用y的值自动将权重与输入数据中的类频率成反比地调整为n_samples /(n_classes * np.bincount(y))。
verbose int, default=0
启用详细输出。 请注意,此设置利用liblinear中每个进程运行时设置的优势,如果启用该设置,则可能无法在多线程上下文中正常工作。
random_state int or RandomState instance, default=None
控制伪随机数生成,以对双坐标下降数据进行混洗(如果dual = True)。 当dual = False时,LinearSVC的基础实现不是随机的,random_state对结果没有影响。 为多个函数调用传递可重复输出的int值。 请参阅词汇表
max_iter int, default=1000
要运行的最大迭代次数。
属性 说明
coef_ ndarray of shape (1, n_features) if n_classes == 2 else (n_classes, n_features)
分配给要素的权重(原始问题的系数)。 仅在线性内核的情况下可用。coef_是从raw_coef_派生的只读属性,该属性遵循liblinear的内部内存布局。
intercept_ ndarray of shape (1,) if n_classes == 2 else (n_classes,)
决策函数中的常数。
classes_ ndarray of shape (n_classes,)
唯一的类标签。
n_iter_ int
所有类的最大迭代次数。

另见:

SVC

支持向量机分类器使用libsvm的实现:内核可以是非线性的,但其SMO算法不能像LinearSVC那样扩展到大量样本。 此外,SVC多类模式使用一种对一种方案实现,而LinearSVC使用一种对另一种方案。 通过使sklearn.multiclass.OneVsRestClassifier包装器,可以用SVC来实现一个类和其他类。 最后,如果输入是C连续的,则SVC可以适合密集数据而无需复制内存。 稀疏数据仍然会导致内存复制。

sklearn.linear_model.SGDClassifier

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

注:

底层的C实现在拟合模型时使用随机数生成器选择特征。 因此,对于相同的输入数据具有略有不同的结果并不罕见。 如果发生这种情况,请尝试使用较小的tol参数。

基本的实现liblinear使用了稀疏的内部表示形式来表示将导致内存复制的数据。

在某些情况下,预测输出可能与独立liblinear的输出不匹配。 在叙述性文档中查看与liblinear的区别

参考:

LIBLINEAR: A Library for Large Linear Classification

示例

>>>

>>> from sklearn.svm import LinearSVC
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler
>>> from sklearn.datasets import make_classification
>>> X, y = make_classification(n_features=4, random_state=0)
>>> clf = make_pipeline(StandardScaler(),
...                     LinearSVC(random_state=0, tol=1e-5))
>>> clf.fit(X, y)
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('linearsvc', LinearSVC(random_state=0, tol=1e-05

>>>

>>> print(clf.named_steps['linearsvc'].coef_)
[[0.141...   0.526... 0.679... 0.493...]]

>>>

>>> print(clf.named_steps['linearsvc'].intercept_)
[0.1693...]
>>> print(clf.predict([[0000]]))
[1]

方法

方法 说明
decision_function(self,X) 预测样本的置信度得分。
densify(self) 将系数矩阵转换为数组格式。
fit(self, X, y[, sample_weight]) 根据给定的训练数据拟合模型。
get_params(self[, deep]) 获取这个估计器的参数。
predict(self, X) 预测X中样本的类别标签。
score(self, X, y[, sample_weight]) 返回给定测试数据和标签上的平均准确度。
set_params(self, **params) 设置这个估计器的参数。
sparsify(self) 将系数矩阵转换为稀疏格式。
 __init__(self, 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)

源码

初始化self, 请参阅help(type(self))以获得准确的说明

decision_function(self, X)

源码

预测样本的置信度得分。一个样本的置信分数是该样本到超平面的有符号距离。

参数 说明
X array_like or sparse matrix, shape (n_samples, n_features)
样本
返回值 说明
result array, shape=(n_samples,) if n_classes == 2 else (n_samples, n_classes)
每个(样本,班级)组合的置信度得分。在二进制情况下,得到self的置信度得分。其中,>0表示这个类将被预测。
densify(self)

源码

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

将coef_成员(返回)转换为numpy.ndarray。 这是coef_的默认格式,并且是拟合所需的格式,因此仅在以前稀疏的模型上才需要调用此方法。 否则,它是无操作的。

返回值 说明
self Fitted estimator
 fit(self, X, y, sample_weight=None)

源码

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

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
训练向量,其中n个样本中的样本个数和n个特征就是特征的个数。
y array-like of shape (n_samples,)
与X对应的目标向量。
sample_weight array-like of shape (n_samples,), default=None
分配给单个样本的权重数组。如果没有提供,则每个样品都给予单位权重。
返回值 说明
self object
估计器的一个实例。
 get_params(self, deep=True)

源码

获取此估计的参数。

参数 说明
deep bool, default=True
如果为真,将返回此估计器的参数以及作为估计器所包含子对象的参数。
返回值 说明
params mapping of string to any
参数名称映射到它们的值。
 predict(self, X)

源码

预测X中样本的类标签。

参数 说明
X array_like or sparse matrix, shape (n_samples, n_features)
样本
返回值 说明
C array, shape [n_samples]
每个样本预测的类标签。
score(self, X, y, sample_weight=None)

源码

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

在多标签分类中,这是子集精度,这是一个严格的指标,因为您需要为每个样本正确预测每个标签集。

参数 说明
X array-like of shape (n_samples, n_features)
测试样本
y array-like of shape (n_samples,) or (n_samples, n_outputs)
X的真实标签
sample_weight array-like of shape (n_samples,), default=None
样本权重
返回值 说明
score float
预测的平均准确度
set_params(self, **params)

源码

设置此估算器的参数。

该方法适用于简单的估计器以及嵌套对象(例如管道)。 后者的参数格式为<component> __ <parameter>,以便可以更新嵌套对象的每个组件。

参数 说明
**params dict
已估计的参数
返回值 说明
self object
估计实例
sparsify(self)

源码

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

将coef_成员转换为scipy.sparse矩阵,对于L1规范化的模型,该矩阵可以比通常的numpy.ndarray具有更高的内存和存储效率。

Intercept_成员未转换。

返回值 说明
self 拟合估计量

注意:

对于非稀疏模型,即当coef中没有很多零时,这可能会增加内存的使用,所以要小心使用这种方法。经验法则是,使用(coef == 0).sum()计算的零元素的数量必须大于50%,才能提供显著的好处。 调用此方法后,在调用densify之前,无法进一步使用partial_fit方法(如果需要使用该方法)。