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_valid
和is_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
fit
中sample_weight
参数的元数据路由。
- 返回:
- self对象
更新后的对象。