SGD 一类支持向量机#

class sklearn.linear_model.SGDOneClassSVM(nu=0.5, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, random_state=None, learning_rate='optimal', eta0=0.0, power_t=0.5, warm_start=False, average=False)[source]#

使用随机梯度下降法求解线性一类支持向量机。

此实现旨在与核近似技术(例如 sklearn.kernel_approximation.Nystroem)一起使用,以获得与 sklearn.svm.OneClassSVM 类似的结果,后者默认使用高斯核。

更多信息请参见 用户指南

版本 1.0 中新增。

参数:
nu浮点数,默认为 0.5

一类 SVM 的 nu 参数:训练误差分数的上限和支持向量的分数下限。应在区间 (0, 1] 内。默认为 0.5。

fit_intercept布尔值,默认为 True

是否应估计截距。默认为 True。

max_iter整数,默认为 1000

对训练数据进行迭代的最大次数(又称 epochs)。它只影响 fit 方法的行为,而不影响 partial_fit。默认为 1000。值必须在范围 [1, inf) 内。

tol浮点数或 None,默认为 1e-3

停止准则。如果它不是 None,则当 (loss > previous_loss - tol) 时迭代将停止。默认为 1e-3。值必须在范围 [0.0, inf) 内。

shuffle布尔值,默认为 True

每次迭代后是否应打乱训练数据。默认为 True。

verbose整数,默认为 0

详细程度。

random_state整数、RandomState 实例或 None,默认为 None

在打乱数据时使用的伪随机数生成器的种子。如果为整数,则 random_state 是随机数生成器使用的种子;如果为 RandomState 实例,则 random_state 是随机数生成器;如果为 None,则随机数生成器是 np.random 使用的 RandomState 实例。

learning_rate{'constant','optimal','invscaling','adaptive'},默认为 'optimal'

fit 一起使用的学习率调度。(如果使用 partial_fit,则必须直接控制学习率)。

  • ‘constant’:eta = eta0

  • ‘optimal’:eta = 1.0 / (alpha * (t + t0)),其中 t0 由 Leon Bottou 提出的启发式方法选择。

  • ‘invscaling’:eta = eta0 / pow(t, power_t)

  • ‘adaptive’:eta = eta0,只要训练持续减少。每次连续 n_iter_no_change 个 epochs 无法将训练损失减少 tol 或无法将验证分数提高 tol(如果 early_stopping 为 True),当前学习率就会除以 5。

eta0浮点数,默认为 0.0

“constant”、“invscaling”或“adaptive”调度的初始学习率。默认值为 0.0,因为默认调度“optimal”不使用 eta0。值必须在范围 [0.0, inf) 内。

power_t浮点数,默认为 0.5

反比例缩放学习率的指数。值必须在范围 (-inf, inf) 内。

warm_start布尔值,默认为 False

设置为 True 时,重复使用先前对 fit 的调用的解决方案作为初始化,否则,只需删除先前的解决方案。请参见 词汇表

当 warm_start 为 True 时,重复调用 fit 或 partial_fit 可能导致与单次调用 fit 不同的解决方案,这是因为数据被打乱的方式。如果使用动态学习率,则学习率会根据已查看的样本数量进行调整。调用 fit 将重置此计数器,而 partial_fit 将导致增加现有计数器。

average布尔值或整数,默认为 False

设置为 True 时,计算平均 SGD 权重并将结果存储在 coef_ 属性中。如果设置为大于 1 的整数,则一旦看到的样本总数达到 average,就会开始平均。因此,average=10 将在看到 10 个样本后开始平均。

属性:
coef_形状为 (1, n_features) 的 ndarray

分配给特征的权重。

offset_形状为 (1,) 的 ndarray

用于根据原始分数定义决策函数的偏移量。我们有关系:decision_function = score_samples - offset。

n_iter_整数

达到停止准则的实际迭代次数。

t_整数

训练期间执行的权重更新次数。与 (n_iter_ * n_samples + 1) 相同。

n_features_in_整数

拟合期间看到的特征数量。

版本 0.24 中新增。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

拟合期间看到的特征名称。仅当 X 具有全是字符串的特征名称时才定义。

版本 1.0 中新增。

另请参见

sklearn.svm.OneClassSVM

无监督异常检测。

备注

此估计器的训练样本数量的线性复杂度,因此比 sklearn.svm.OneClassSVM 实现更适合具有大量训练样本(例如 > 10,000)的数据集。

示例

>>> import numpy as np
>>> from sklearn import linear_model
>>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
>>> clf = linear_model.SGDOneClassSVM(random_state=42)
>>> clf.fit(X)
SGDOneClassSVM(random_state=42)
>>> print(clf.predict([[4, 4]]))
[1]
decision_function(X)[source]#

到分离超平面的带符号距离。

内点为正,外点为负。

参数:
X{类数组,稀疏矩阵},形状 (n_samples, n_features)

测试数据。

返回值:
dec类数组, 形状 (n_samples,)

样本的决策函数值。

densify()[source]#

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

coef_成员(转换回)为numpy.ndarray。这是coef_的默认格式,并且拟合需要此格式,因此仅在先前已稀疏化的模型上才需要调用此方法;否则,它将不执行任何操作。

返回值:
self

已拟合的估计器。

fit(X, y=None, coef_init=None, offset_init=None, sample_weight=None)[source]#

使用随机梯度下降拟合线性一类支持向量机。

这解决了与一类支持向量机原始优化问题等效的优化问题,并返回权重向量 w 和偏移量 rho,使得决策函数由 <w, x> - rho给出。

参数:
X{类数组,稀疏矩阵},形状 (n_samples, n_features)

训练数据。

y忽略

未使用,根据约定保留以保持 API 一致性。

coef_init数组, 形状 (n_classes, n_features)

用于预热启动优化的初始系数。

offset_init数组, 形状 (n_classes,)

用于预热启动优化的初始偏移量。

sample_weight类数组, 形状 (n_samples,), 可选

应用于各个样本的权重。如果未提供,则假设为统一权重。如果指定了 class_weight,则这些权重将与 class_weight(通过构造函数传递)相乘。

返回值:
self对象

返回已拟合的 self 实例。

fit_predict(X, y=None, **kwargs)[source]#

对 X 执行拟合并返回 X 的标签。

返回异常值的 -1 和内群的 1。

参数:
X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}

输入样本。

y忽略

未使用,根据约定保留以保持 API 一致性。

**kwargs字典

要传递给fit的参数。

1.4 版本新增。

返回值:
y形状为 (n_samples,) 的 ndarray

内群为 1,异常值为 -1。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看 用户指南,了解路由机制的工作原理。

返回值:
routingMetadataRequest

一个 MetadataRequest,封装路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值, 默认值=True

如果为 True,则将返回此估计器以及作为估计器的包含子对象的的参数。

返回值:
params字典

参数名称与其值的映射。

partial_fit(X, y=None, sample_weight=None)[source]#

使用随机梯度下降拟合线性一类支持向量机。

参数:
X{类数组,稀疏矩阵},形状 (n_samples, n_features)

训练数据子集。

y忽略

未使用,根据约定保留以保持 API 一致性。

sample_weight类数组, 形状 (n_samples,), 可选

应用于各个样本的权重。如果未提供,则假设为统一权重。

返回值:
self对象

返回已拟合的 self 实例。

predict(X)[source]#

返回样本的标签(内群为 1,异常值为 -1)。

参数:
X{类数组,稀疏矩阵},形状 (n_samples, n_features)

测试数据。

返回值:
y数组, 形状 (n_samples,)

样本的标签。

score_samples(X)[source]#

样本的原始评分函数。

参数:
X{类数组,稀疏矩阵},形状 (n_samples, n_features)

测试数据。

返回值:
score_samples类数组, 形状 (n_samples,)

样本的未移位评分函数值。

set_fit_request(*, coef_init: bool | None | str = '$UNCHANGED$', offset_init: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') SGDOneClassSVM[source]#

请求传递给fit方法的元数据。

请注意,只有在enable_metadata_routing=True时,此方法才相关(参见sklearn.set_config)。请参阅用户指南,了解路由机制的工作原理。

每个参数的选项如下:

  • True:请求元数据,如果提供则传递给fit。如果未提供元数据,则忽略请求。

  • False:不请求元数据,元估计器不会将其传递给fit

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:元数据应使用此给定的别名而不是原始名称传递给元估计器。

默认值(sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不对其他参数进行更改。

版本 1.3 中新增。

注意

仅当此估计器用作元估计器的子估计器时(例如,在Pipeline内部使用)此方法才相关。否则,它无效。

参数:
coef_initstr、True、False 或 None,默认值 = sklearn.utils.metadata_routing.UNCHANGED

fitcoef_init参数的元数据路由。

offset_initstr、True、False 或 None,默认值 = sklearn.utils.metadata_routing.UNCHANGED

fitoffset_init参数的元数据路由。

sample_weightstr、True、False 或 None,默认值 = sklearn.utils.metadata_routing.UNCHANGED

fitsample_weight参数的元数据路由。

返回值:
self对象

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单估计器以及嵌套对象(例如Pipeline)。后者具有<component>__<parameter>形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回值:
self估计器实例

估计器实例。

set_partial_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SGDOneClassSVM[source]#

请求传递给partial_fit方法的元数据。

请注意,只有在enable_metadata_routing=True时,此方法才相关(参见sklearn.set_config)。请参阅用户指南,了解路由机制的工作原理。

每个参数的选项如下:

  • True:请求元数据,如果提供则传递给partial_fit。如果未提供元数据,则忽略请求。

  • False:不请求元数据,元估计器不会将其传递给partial_fit

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:元数据应使用此给定的别名而不是原始名称传递给元估计器。

默认值(sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不对其他参数进行更改。

版本 1.3 中新增。

注意

仅当此估计器用作元估计器的子估计器时(例如,在Pipeline内部使用)此方法才相关。否则,它无效。

参数:
sample_weightstr、True、False 或 None,默认值 = sklearn.utils.metadata_routing.UNCHANGED

partial_fitsample_weight参数的元数据路由。

返回值:
self对象

更新后的对象。

sparsify()[source]#

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

coef_成员转换为scipy.sparse矩阵。对于L1正则化模型,这比通常的numpy.ndarray表示方式在内存和存储方面效率更高。

intercept_成员不会被转换。

返回值:
self

已拟合的估计器。

备注

对于非稀疏模型,即当coef_中零元素不多时,这实际上可能会增加内存使用量,因此请谨慎使用此方法。一个经验法则是,零元素的数量(可以使用(coef_ == 0).sum()计算)必须超过50%,才能获得显著的益处。

调用此方法后,除非调用densify,否则将无法再使用partial_fit方法(如果有)进行进一步拟合。