LinearSVC#
- class sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', *, dual='auto', 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)[源代码]#
线性支持向量分类。
与参数core =' linear '的SRC类似,但以liblinear而不是libsvm的方式实现,因此它在惩罚和损失函数的选择方面具有更大的灵活性,并且应该更好地扩展到大量样本。
的主要区别
LinearSVC
和SVC
取决于默认使用的损失函数,以及这两个实现之间的拦截正规化的处理。此类支持密集和稀疏输入,并且多类支持根据一对一的方案处理。
阅读更多的 User Guide .
- 参数:
- penalty' l1 ',',默认=' l2 '
指定惩罚中使用的规范。“l2”罚分是SRC中使用的标准。“l1”导致
coef_
稀疏的载体。- loss' hinge ',' squared_hinge '},默认=' squared_hinge '
指定损失函数。“hinge”是标准的SV损失(例如由SRC类使用),而“squared_hinge”是hinge损失的平方。的组合
penalty='l1'
和loss='hinge'
不支持。- dual“Auto”或布尔,默认=“Auto”
选择算法来解决二元或原始优化问题。当n_samples > n_features时,首选dual=False。
dual="auto"
将根据值自动选择参数的值n_samples
,n_features
,loss
,multi_class
和penalty
.如果n_samples
<n_features
和优化器支持选择loss
,multi_class
和penalty
,则dual将设置为True,否则将设置为False。在 1.3 版本发生变更: 的
"auto"
选项在1.3版本中添加,并在1.5版本中成为默认选项。- tolfloat,默认= 1 e-4
停止标准的容忍度。
- Cfloat,默认=1.0
正规化参数。正规化的强度与C成正比。必须严格积极。如需直观地可视化调整规则化参数C的影响,请参阅 缩放SVCs的正规化参数 .
- multi_class'ovr','crammer_singer'},default='ovr'
Determines the multi-class strategy if
y
contains more than two classes."ovr"
trains n_classes one-vs-rest classifiers, while"crammer_singer"
optimizes a joint objective over all classes. Whilecrammer_singer
is interesting from a theoretical perspective as it is consistent, it is seldom used in practice as it rarely leads to better accuracy and is more expensive to compute. If"crammer_singer"
is chosen, the options loss, penalty and dual will be ignored.- fit_intercept布尔,默认=True
是否适合拦截。如果设置为True,则特征载体将扩展为包括拦截项:
[x_1, ..., x_n, 1]
,其中1对应于截取。如果设置为False,则计算中不会使用任何拦截(即数据预计已居中)。- intercept_scalingfloat,默认=1.0
当
fit_intercept
为True,实例载体x变成[x_1, ..., x_n, intercept_scaling]
,即“合成”特征,其常值等于intercept_scaling
被附加到实例载体。拦截变成intercept_scaling * synthetic feature weight. Note that liblinear internally penalizes the intercept, treating it like any other term in the feature vector. To reduce the impact of the regularization on the intercept, theintercept_scaling
parameter can be set to a value greater than 1; the higher the value ofintercept_scaling
, the lower the impact of regularization on it. Then, the weights become[w_x_1, ..., w_x_n, w_intercept* intersection_scaling]',其中 `w_x_1, ..., w_x_n
表示特征权重,截取权重通过以下方式进行缩放intercept_scaling
.与其他特征相比,这种缩放允许拦截项具有不同的正规化行为。- class_weightdict或“balanced”,默认=无
将i类的参数C设置为
class_weight[i]*C
对于SRC。如果没有给出,所有类别的权重都应该为一。“平衡”模式使用y值自动调整与输入数据中的类别频率成反比例的权重,n_samples / (n_classes * np.bincount(y))
.- verboseint,默认=0
Enable verbose output. Note that this setting takes advantage of a per-process runtime setting in liblinear that, if enabled, may not work properly in a multithreaded context.
- random_stateint,RandomState实例或无,默认=无
控制伪随机数的生成,用于对双坐标下降的数据进行洗牌(如果
dual=True
).当dual=False
的底层实现LinearSVC
不是随机的,random_state
对结果没有影响。传递一个int值,以便在多个函数调用中获得可重复的输出。看到 Glossary .- max_iterint,默认=1000
要运行的最大迭代次数。
- 属性:
- coef_如果n_classes == 2,则形状(1,n_features)的nd数组 else(n_classes,n_features)
分配给特征的权重(原始问题中的系数)。
coef_
是派生自的只读属性raw_coef_
这遵循liblinear的内存布局。- intercept_如果n_classes == 2,则形状为(1,)的nd数组否则(n_classes,)
决策功能中的常数。
- classes_形状的nd数组(n_classes,)
独特的班级标签。
- n_features_in_int
期间看到的功能数量 fit .
Added in version 0.24.
- feature_names_in_ :nd形状数组 (
n_features_in_
,)nd数组形状( Names of features seen during fit. Defined only when
X
has feature names that are all strings.Added in version 1.0.
- n_iter_int
所有类中运行的最大迭代次数。
参见
SVC
使用libsvm实现支持向量机分类器:内核可以是非线性的,但其MMO算法不像LinearSRC那样扩展到大量样本。此外,SRC多类模式使用一对一方案来实现,而LinearSRC使用一对一方案来实现。通过使用
OneVsRestClassifier
wrapper.最后,如果输入是C连续的,则CSV可以适应密集数据,而无需内存复制。但稀疏数据仍然会引发内存复制。sklearn.linear_model.SGDClassifier
SGDClassifier可以通过调整惩罚和损失参数来优化与LinearSRC相同的成本函数。此外,它需要更少的内存,允许增量(在线)学习,并实现各种损失函数和正规化制度。
注意到
底层C实现在匹配模型时使用随机数生成器来选择特征。因此,相同输入数据的结果略有不同的情况并不罕见。如果发生这种情况,请尝试使用较小的
tol
参数.底层实现liblinear对将引发内存复制的数据使用稀疏内部表示。
在某些情况下,预测输出可能与独立Liblinear的输出不匹配。看到 differences from 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([[0, 0, 0, 0]])) [1]
- decision_function(X)[源代码]#
预测样本的置信度分数。
样本的置信度分数与该样本到超平面的带符号距离成正比。
- 参数:
- X形状(n_samples,n_features)的{类数组,稀疏矩阵}
我们想要获取其置信度分数的数据矩阵。
- 返回:
- scores形状的ndarray(n_samples,)或(n_samples,n_classes)
信心分数
(n_samples, n_classes)
组合.在二元情况下,置信度得分self.classes_[1]
其中>0意味着这个类将被预测。
- densify()[源代码]#
将系数矩阵转换为密集数组格式。
转换
coef_
member(back)to a numpy.ndarray.这是coef_
并且是装配所需的,因此仅需要对之前已精简的模型调用此方法;否则,这是不操作的。- 返回:
- 自我
拟合估计量。
- fit(X, y, sample_weight=None)[源代码]#
根据给定的训练数据对模型进行匹配。
- 参数:
- X形状(n_samples,n_features)的{类数组,稀疏矩阵}
训练载体,在哪里
n_samples
是样本数量和n_features
是功能的数量。- y形状类似阵列(n_samples,)
相对于X的目标载体。
- sample_weight形状类似数组(n_samples,),默认=无
分配给各个样本的权重数组。如果未提供,则给予每个样本单位重量。
Added in version 0.18.
- 返回:
- self对象
估计器的一个实例。
- get_metadata_routing()[源代码]#
获取此对象的元数据路由。
请检查 User Guide 关于路由机制如何工作。
- 返回:
- routingMetadataRequest
A
MetadataRequest
封装路由信息。
- get_params(deep=True)[源代码]#
获取此估计器的参数。
- 参数:
- deep布尔,默认=True
如果为True,将返回此估计量和包含的作为估计量的子对象的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- predict(X)[源代码]#
预测X中样本的类别标签。
- 参数:
- X形状(n_samples,n_features)的{类数组,稀疏矩阵}
我们想要获取预测的数据矩阵。
- 返回:
- y_pred形状的nd数组(n_samples,)
包含每个样本的类标签的载体。
- score(X, y, sample_weight=None)[源代码]#
返回给定测试数据和标签的平均准确度。
在多标签分类中,这是子集准确度,这是一个苛刻的指标,因为您需要为每个样本正确预测每个标签集。
- 参数:
- X形状类似阵列(n_samples,n_features)
测试样本。
- y形状的类似阵列(n_samples,)或(n_samples,n_outputs)
真正的标签
X
.- sample_weight形状类似数组(n_samples,),默认=无
样本重量。
- 返回:
- score浮子
平均准确度
self.predict(X)
w.r.t.y
.
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LinearSVC [源代码]#
请求元数据传递给
fit
法请注意,此方法仅适用于以下情况
enable_metadata_routing=True
(见sklearn.set_config
).请参阅 User Guide 关于路由机制如何工作。The options for each parameter are:
True
:元数据被请求并传递给fit
如果提供的话。如果未提供元数据,则会忽略请求。False
:未请求元数据,元估计器不会将其传递给fit
.None
:不请求元数据,如果用户提供元估计器,则元估计器将引发错误。str
:元数据应通过此给定别名而不是原始名称传递给元估计器。
默认 (
sklearn.utils.metadata_routing.UNCHANGED
)保留现有请求。这允许您更改某些参数的请求,而不是其他参数。Added in version 1.3.
备注
只有当该估计器用作元估计器的子估计器时,该方法才相关,例如在
Pipeline
.否则就没有效果了。- 参数:
- sample_weight字符串、真、假或无, 默认=sklearn.utils. metalics_Routing.UNChanged
元数据路由
sample_weight
参数fit
.
- 返回:
- self对象
更新的对象。
- set_params(**params)[源代码]#
设置此估计器的参数。
该方法适用于简单估计器以及嵌套对象(例如
Pipeline
).后者具有以下形式的参数<component>__<parameter>
以便可以更新嵌套对象的每个组件。- 参数:
- **paramsdict
估计参数。
- 返回:
- self估计器实例
估计实例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') LinearSVC [源代码]#
请求元数据传递给
score
法请注意,此方法仅适用于以下情况
enable_metadata_routing=True
(见sklearn.set_config
).请参阅 User Guide 关于路由机制如何工作。The options for each parameter are:
True
:元数据被请求并传递给score
如果提供的话。如果未提供元数据,则会忽略请求。False
:未请求元数据,元估计器不会将其传递给score
.None
:不请求元数据,如果用户提供元估计器,则元估计器将引发错误。str
:元数据应通过此给定别名而不是原始名称传递给元估计器。
默认 (
sklearn.utils.metadata_routing.UNCHANGED
)保留现有请求。这允许您更改某些参数的请求,而不是其他参数。Added in version 1.3.
备注
只有当该估计器用作元估计器的子估计器时,该方法才相关,例如在
Pipeline
.否则就没有效果了。- 参数:
- sample_weight字符串、真、假或无, 默认=sklearn.utils. metalics_Routing.UNChanged
元数据路由
sample_weight
参数score
.
- 返回:
- self对象
更新的对象。
- sparsify()[源代码]#
将系数矩阵转换为稀疏格式。
转换
coef_
scipy.sparse矩阵的成员,对于L1正规化模型,该矩阵比通常的numpy. ndray表示具有更高的内存和存储效率。的
intercept_
成员未转换。- 返回:
- 自我
拟合估计量。
注意到
对于非稀疏模型,即当零不多时
coef_
,这实际上可能 increase 内存使用情况,因此请谨慎使用此方法。经验法则是零元素的数量,可以用(coef_ == 0).sum()
,必须超过50%才能提供显着的好处。调用此方法后,使用partial_fit方法(如果有的话)的进一步匹配将无法工作,直到调用denssify。