SplineTransformer#
- class sklearn.preprocessing.SplineTransformer(n_knots=5, degree=3, *, knots='uniform', extrapolation='constant', include_bias=True, order='C', sparse_output=False)[source]#
为特征生成单变量B-样条基。
为每个特征生成一个新的特征矩阵,该矩阵由多项式阶数等于
degree
的n_splines=n_knots + degree - 1
(对于extrapolation="periodic"
则为n_knots - 1
)个样条基函数(B-样条)组成。要了解更多关于SplineTransformer类的信息,请访问:时间相关特征工程
在用户指南中了解更多。
在 1.0 版本中新增。
- 参数:
- n_knotsint, 默认值=5
如果
knots
等于{'uniform', 'quantile'}之一,则为样条的结节数。必须大于或等于2。如果knots
是类数组,则忽略。- degreeint, 默认值=3
样条基的多项式阶数。必须是非负整数。
- knots{'uniform', 'quantile'} 或形状为 (n_knots, n_features) 的类数组,默认值='uniform'
设置结节位置,使得第一个结节 <= 特征 <= 最后一个结节。
如果为'uniform',则
n_knots
个结节将从特征的最小值到最大值均匀分布。如果为'quantile',则它们将沿着特征的分位数均匀分布。
如果给定类数组,则直接指定包括边界结节在内的已排序结节位置。请注意,在内部,
degree
个结节在第一个结节之前添加,同样数量的结节在最后一个结节之后添加。
- extrapolation{'error', 'constant', 'linear', 'continue', 'periodic'},默认值='constant'
如果为'error',则训练特征的最小值和最大值之外的值会引发
ValueError
。如果为'constant',则样条在特征最小值和最大值处的值用作常数外推。如果为'linear',则使用线性外推。如果为'continue',则样条按原样外推,即scipy.interpolate.BSpline
中的extrapolate=True
选项。如果为'periodic',则使用周期性样条,其周期性等于第一个和最后一个结节之间的距离。周期性样条强制在第一个和最后一个结节处具有相等函数值和导数。例如,这使得在从自然周期性“一年中的某天”输入特征派生的样条特征中,可以避免在12月31日和1月1日之间引入任意跳跃。在这种情况下,建议手动设置结节值来控制周期。- include_biasbool, 默认值=True
如果为False,则特征数据范围内的最后一个样条元素将被丢弃。由于B-样条对于每个数据点,其样条基函数之和为一,因此它们隐式包含一个偏差项,即一个全为一的列。它在线性模型中充当截距项。
- order{'C', 'F'},默认值='C'
在密集情况下输出数组的顺序。
'F'
顺序计算速度更快,但可能会减慢后续估计器的速度。- sparse_outputbool, 默认值=False
如果设置为True,将返回稀疏CSR矩阵,否则将返回一个数组。
在 1.2 版本中新增。
- 属性:
- bsplines_形状为 (n_features,) 的列表
BSplines 对象的列表,每个特征一个。
- n_features_in_int
输入特征的总数。
- feature_names_in_形状为 (
n_features_in_
,) 的ndarray 在fit期间看到的特征名称。仅当
X
的特征名称全部为字符串时才定义。在 1.0 版本中新增。
- n_features_out_int
输出特征的总数,计算公式为
n_features * n_splines
,其中n_splines
是B-样条的基元素数量,对于非周期性样条为n_knots + degree - 1
,对于周期性样条为n_knots - 1
。如果include_bias=False
,则仅为n_features * (n_splines - 1)
。
另请参见
KBinsDiscretizer
将连续数据分箱到间隔中的转换器。
PolynomialFeatures
生成多项式和交互特征的转换器。
注意
高阶和大量结节可能导致过拟合。
参见examples/linear_model/plot_polynomial_interpolation.py。
示例
>>> import numpy as np >>> from sklearn.preprocessing import SplineTransformer >>> X = np.arange(6).reshape(6, 1) >>> spline = SplineTransformer(degree=2, n_knots=3) >>> spline.fit_transform(X) array([[0.5 , 0.5 , 0. , 0. ], [0.18, 0.74, 0.08, 0. ], [0.02, 0.66, 0.32, 0. ], [0. , 0.32, 0.66, 0.02], [0. , 0.08, 0.74, 0.18], [0. , 0. , 0.5 , 0.5 ]])
- fit(X, y=None, sample_weight=None)[source]#
计算样条的结节位置。
- 参数:
- X形状为 (n_samples, n_features) 的类数组
数据。
- yNone
被忽略。
- sample_weight形状为 (n_samples,) 的类数组,默认值=None
每个样本的单独权重。如果
knots="quantile"
,则用于计算分位数。对于knots="uniform"
,在查找X
的最小值和最大值时,零权重观测值将被忽略。
- 返回:
- selfobject
已拟合的转换器。
- fit_transform(X, y=None, **fit_params)[source]#
拟合数据,然后对其进行转换。
使用可选参数
fit_params
将转换器拟合到X
和y
,并返回X
的转换版本。- 参数:
- X形状为 (n_samples, n_features) 的类数组
输入样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组,默认值=None
目标值(对于无监督转换,为None)。
- **fit_paramsdict
附加拟合参数。
- 返回:
- X_new形状为 (n_samples, n_features_new) 的ndarray 数组
转换后的数组。
- get_feature_names_out(input_features=None)[source]#
获取转换后的输出特征名称。
- 参数:
- input_features字符串或None的类数组,默认值=None
输入特征。
如果
input_features
为None
,则feature_names_in_
用作输入特征名称。如果feature_names_in_
未定义,则生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]
。如果
input_features
是类数组,则如果feature_names_in_
已定义,则input_features
必须与feature_names_in_
匹配。
- 返回:
- feature_names_out字符串对象的ndarray
转换后的特征名称。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查阅用户指南,了解路由机制的工作原理。
- 返回:
- routingMetadataRequest
封装路由信息的
MetadataRequest
。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deepbool, 默认值=True
如果为True,将返回此估计器及其包含的作为估计器的子对象的参数。
- 返回:
- paramsdict
映射到其值的参数名称。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SplineTransformer [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
参数的元数据路由。
- 返回:
- selfobject
更新后的对象。
- set_output(*, transform=None)[source]#
设置输出容器。
请参阅Introducing the set_output API以获取如何使用该 API 的示例。
- 参数:
- transform{"default", "pandas", "polars"}, 默认值=None
配置
transform
和fit_transform
的输出。"default"
:转换器的默认输出格式"pandas"
:DataFrame 输出"polars"
:Polars 输出None
:转换配置未更改
在 1.4 版本中新增: 添加了
"polars"
选项。
- 返回:
- self估计器实例
估计器实例。