RANSACRegressor#

class sklearn.linear_model.RANSACRegressor(estimator=None, *, min_samples=None, residual_threshold=None, is_data_valid=None, is_model_valid=None, max_trials=100, max_skips=inf, stop_n_inliers=inf, stop_score=inf, stop_probability=0.99, loss='absolute_error', random_state=None)[source]#

RANSAC (RANdom SAmple Consensus) 算法。

RANSAC是一种迭代算法,用于从完整数据集的内点子集中鲁棒地估计参数。

用户指南中了解更多信息。

参数:
estimatorobject, default=None

实现以下方法的基本估计器对象

  • fit(X, y): 使用给定的训练数据和目标值拟合模型。

  • score(X, y): 返回给定测试数据的平均准确率,用于定义由 stop_score 设定的停止准则。此外,该分数用于判断两个大小相等的共识集哪个更好。

  • predict(X): 使用线性模型返回预测值,用于通过损失函数计算残差。

如果 estimator 为 None,则对于 dtype 为 float 的目标值,将使用 LinearRegression

请注意,当前的实现仅支持回归估计器。

min_samplesint (>= 1) or float ([0, 1]), default=None

从原始数据中随机选择的最小样本数。对于 min_samples >= 1,被视为绝对样本数;对于 min_samples < 1,被视为相对样本数 ceil(min_samples * X.shape[0])。这通常被选为估计给定 estimator 所必需的最小样本数。默认情况下,假定使用 LinearRegression 估计器,并且 min_samples 被选为 X.shape[1] + 1。此参数高度依赖于模型,因此如果使用了非 LinearRegressionestimator,则用户必须提供一个值。

residual_thresholdfloat, default=None

数据样本被分类为内点的最大残差。默认情况下,阈值被选为目标值 y 的 MAD(中位数绝对偏差)。残差严格等于阈值的点被视为内点。

is_data_validcallable, default=None

在模型拟合之前,使用随机选择的数据调用此函数:is_data_valid(X, y)。如果其返回值为 False,则跳过当前随机选择的子样本。

is_model_validcallable, default=None

使用估计的模型和随机选择的数据调用此函数:is_model_valid(model, X, y)。如果其返回值为 False,则跳过当前随机选择的子样本。使用此函数拒绝样本比使用 is_data_valid 的计算成本更高。is_model_valid 因此只应在需要估计模型进行拒绝决策时使用。

max_trialsint, default=100

随机样本选择的最大迭代次数。

max_skipsint, default=np.inf

由于找到零内点或由 is_data_valid 定义的无效数据或由 is_model_valid 定义的无效模型而可以跳过的最大迭代次数。

Added in version 0.19.

stop_n_inliersint, default=np.inf

如果找到至少这个数量的内点,则停止迭代。

stop_scorefloat, default=np.inf

如果分数大于等于此阈值,则停止迭代。

stop_probabilityfloat in range [0, 1], default=0.99

如果 RANSAC 中采样了至少一个无异常值的训练数据集,则 RANSAC 迭代停止。这需要生成至少 N 个样本(迭代),

N >= log(1 - probability) / log(1 - e**m)

其中概率(置信度)通常设置为高值,例如 0.99(默认值),e 是当前内点占总样本数的比例。

lossstr, callable, default=’absolute_error’

支持字符串输入 'absolute_error' 和 'squared_error',它们分别查找每个样本的绝对误差和平方误差。

如果 loss 是可调用对象,它应该是一个接受两个数组作为输入(真实值和预测值)并返回一个 1-D 数组的函数,数组的第 i 个值对应于 X[i] 上的损失。

如果样本上的损失大于 residual_threshold,则该样本被归类为异常值。

版本 0.18 新增。

random_stateint, RandomState instance, default=None

用于初始化中心的生成器。传递一个 int 以在多次函数调用中获得可重现的输出。请参阅 词汇表

属性:
estimator_object

使用 RANSAC 采样期间找到的“最佳”模型预测的内点拟合的最终模型(estimator 对象的副本)。

n_trials_int

直到满足其中一个停止准则的随机选择尝试次数。它总是 <= max_trials

inlier_mask_bool array of shape [n_samples]

被分类为 True 的内点的布尔掩码。

n_skips_no_inliers_int

由于找到零内点而跳过的迭代次数。

Added in version 0.19.

n_skips_invalid_data_int

由于由 is_data_valid 定义的无效数据而跳过的迭代次数。

Added in version 0.19.

n_skips_invalid_model_int

由于由 is_model_valid 定义的无效模型而跳过的迭代次数。

Added in version 0.19.

n_features_in_int

拟合 期间看到的特征数。

0.24 版本新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

fit 期间看到的特征名称。仅当 X 具有全部为字符串的特征名称时才定义。

1.0 版本新增。

另请参阅

HuberRegressor

Linear regression model that is robust to outliers.

TheilSenRegressor

Theil-Sen Estimator robust multivariate regression model.

SGDRegressor

通过最小化正则化经验损失与 SGD 拟合。

References

示例

>>> from sklearn.linear_model import RANSACRegressor
>>> from sklearn.datasets import make_regression
>>> X, y = make_regression(
...     n_samples=200, n_features=2, noise=4.0, random_state=0)
>>> reg = RANSACRegressor(random_state=0).fit(X, y)
>>> reg.score(X, y)
0.9885
>>> reg.predict(X[:1,])
array([-31.9417])

有关更详细的示例,请参阅 使用 RANSAC 进行鲁棒线性模型估计

fit(X, y, sample_weight=None, **fit_params)[source]#

使用 RANSAC 算法拟合估计器。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

训练数据。

yshape 为 (n_samples,) 或 (n_samples, n_targets) 的 array-like

目标值。

sample_weightshape 为 (n_samples,) 的 array-like, default=None

如果传递了 sample_weight 且估计器拟合方法不支持它,则每个样本的个体权重会引发错误。

版本 0.18 新增。

**fit_paramsdict

通过元数据路由 API 路由到子估计器的 fit 方法的参数。

版本 1.5 新增: 仅当设置了 sklearn.set_config(enable_metadata_routing=True) 时可用。有关详细信息,请参阅 元数据路由用户指南

返回:
selfobject

拟合的 RANSACRegressor 估计器。

Raises:
ValueError

如果找不到有效的共识集。当 is_data_validis_model_valid 对所有 max_trials 随机选择的子样本返回 False 时,会发生这种情况。

get_metadata_routing()[source]#

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

请查阅 用户指南,了解路由机制如何工作。

1.5 版本新增。

返回:
routingMetadataRouter

封装路由信息的 MetadataRouter

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。

返回:
paramsdict

参数名称映射到其值。

predict(X, **params)[source]#

使用估计的模型进行预测。

这是 estimator_.predict(X) 的包装器。

参数:
X{array-like or sparse matrix} of shape (n_samples, n_features)

Input data.

**paramsdict

通过元数据路由 API 路由到子估计器的 predict 方法的参数。

版本 1.5 新增: 仅当设置了 sklearn.set_config(enable_metadata_routing=True) 时可用。有关详细信息,请参阅 元数据路由用户指南

返回:
yarray, shape = [n_samples] or [n_samples, n_targets]

返回预测值。

score(X, y, **params)[source]#

返回预测的分数。

这是 estimator_.score(X, y) 的包装器。

参数:
X(array-like or sparse matrix} of shape (n_samples, n_features)

训练数据。

yshape 为 (n_samples,) 或 (n_samples, n_targets) 的 array-like

目标值。

**paramsdict

通过元数据路由 API 路由到子估计器的 score 方法的参数。

版本 1.5 新增: 仅当设置了 sklearn.set_config(enable_metadata_routing=True) 时可用。有关详细信息,请参阅 元数据路由用户指南

返回:
zfloat

预测的分数。

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

配置是否应请求元数据以传递给 fit 方法。

请注意,此方法仅在以下情况下相关:此估计器用作 元估计器 中的子估计器,并且通过 enable_metadata_routing=True 启用了元数据路由(请参阅 sklearn.set_config)。请查看 用户指南 以了解路由机制的工作原理。

每个参数的选项如下:

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

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

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

  • str:应将元数据以给定别名而不是原始名称传递给元估计器。

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

在版本 1.3 中新增。

参数:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

fit 方法中 sample_weight 参数的元数据路由。

返回:
selfobject

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。