RANSAC回归器#

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 是一种迭代算法,用于从完整数据集中内点的子集稳健地估计参数。

更多详情请参阅用户指南

参数:
estimator对象,默认为None

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

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

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

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

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

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

min_samples整数(>= 1)或浮点数([0, 1]),默认为None

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

residual_threshold浮点数,默认为None

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

is_data_valid可调用对象,默认为None

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

is_model_valid可调用对象,默认为None

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

max_trials整数,默认为100

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

max_skips整数,默认为np.inf

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

0.19版本新增。

stop_n_inliers整数,默认为np.inf

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

stop_score浮点数,默认为np.inf

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

stop_probability[0, 1]范围内的浮点数,默认为0.99

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

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

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

loss字符串、可调用对象,默认为’absolute_error’

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

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

如果样本上的损失大于residual_threshold,则将此样本分类为异常值。

0.18版本新增。

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

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

属性:
estimator_对象

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

n_trials_整数

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

inlier_mask_形状为[n_samples]的布尔数组

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

n_skips_no_inliers_整数

由于发现零内点而跳过的迭代次数。

0.19版本新增。

n_skips_invalid_data_整数

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

0.19版本新增。

n_skips_invalid_model_整数

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

0.19版本新增。

n_features_in_整数

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

版本 0.24 中新增。

feature_names_in_形状为 (n_features_in_,) 的ndarray

拟合过程中看到的特征名称。仅当 X 的特征名称全部为字符串时定义。

版本 1.0 中新增。

另请参见

HuberRegressor

对异常值具有鲁棒性的线性回归模型。

TheilSenRegressor

Theil-Sen 估计器鲁棒多元回归模型。

SGDRegressor

通过使用 SGD 最小化正则化经验损失来拟合。

参考文献

示例

>>> 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 算法拟合估计器。

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

训练数据。

y形状为 (n_samples,) 或 (n_samples, n_targets) 的数组

目标值。

sample_weight形状为 (n_samples,) 的数组,默认为 None

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

0.18版本新增。

**fit_params字典

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

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

返回
self对象

拟合的 RANSACRegressor 估计器。

引发
ValueError

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

get_metadata_routing()[source]#

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

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

版本 1.5 中新增。

返回
routingMetadataRouter

一个 MetadataRouter 封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

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

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

返回
params字典

参数名称与其值的映射。

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

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

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

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

输入数据。

**params字典

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

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

返回
y数组,形状 = [n_samples] 或 [n_samples, n_targets]

返回预测值。

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

返回预测的分数。

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

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

训练数据。

y形状为 (n_samples,) 或 (n_samples, n_targets) 的数组

目标值。

**params字典

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

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

返回
z浮点数

预测的分数。

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版本中新增。

注意

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

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

fitsample_weight参数的元数据路由。

返回
self对象

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回
self估计器实例

估计器实例。