标准化缩放器#
- class sklearn.preprocessing.StandardScaler(*, copy=True, with_mean=True, with_std=True)[source]#
通过移除均值并缩放至单位方差来标准化特征。
样本
x
的标准分数计算如下:z = (x - u) / s
其中
u
是训练样本的均值,如果with_mean=False
则为零;s
是训练样本的标准差,如果with_std=False
则为一。中心化和缩放操作针对每个特征独立进行,方法是在训练集样本上计算相关统计量。然后存储均值和标准差,以便稍后使用
transform
方法处理后续数据。数据集的标准化是许多机器学习估计器的常见要求:如果各个特征看起来不太像标准正态分布数据(例如,均值为 0、方差为 1 的高斯分布),它们的行为可能会很糟糕。
例如,学习算法目标函数中使用的许多元素(例如支持向量机的 RBF 核或线性模型的 L1 和 L2 正则化项)都假设所有特征都以 0 为中心,并且方差处于相同的数量级。如果一个特征的方差比其他特征大几个数量级,它可能会支配目标函数,并使估计器无法像预期的那样正确地从其他特征中学习。
StandardScaler
对异常值敏感,在存在异常值的情况下,特征的缩放比例可能彼此不同。有关示例可视化,请参阅 比较 StandardScaler 与其他缩放器。通过传递
with_mean=False
,此缩放器也可以应用于稀疏 CSR 或 CSC 矩阵,以避免破坏数据的稀疏结构。在 用户指南 中了解更多信息。
- 参数:
- copy布尔值,默认为 True
如果为 False,则尝试避免复制并改为就地缩放。但这不能保证总是能够就地执行;例如,如果数据不是 NumPy 数组或 scipy.sparse CSR 矩阵,则可能仍然会返回副本。
- with_mean布尔值,默认为 True
如果为 True,则在缩放之前对数据进行中心化。尝试对稀疏矩阵进行中心化操作时,此操作无效(并将引发异常),因为中心化它们需要构建一个密集矩阵,在常用情况下,该矩阵可能太大而无法放入内存。
- with_std布尔值,默认为 True
如果为 True,则将数据缩放为单位方差(或等效地,单位标准差)。
- 属性:
- scale_形状为 (n_features,) 的 ndarray 或 None
为了实现零均值和单位方差,数据的每个特征的相对缩放比例。通常情况下,这是使用
np.sqrt(var_)
计算的。如果方差为零,则无法实现单位方差,数据将保持不变,缩放因子为 1。scale_
当with_std=False
时等于None
。版本 0.17 中新增: scale_
- mean_形状为 (n_features,) 的 ndarray 或 None
训练集中每个特征的平均值。当
with_mean=False
和with_std=False
时等于None
。- var_形状为 (n_features,) 的 ndarray 或 None
训练集中每个特征的方差。用于计算
scale_
。当with_mean=False
和with_std=False
时等于None
。- n_features_in_整数
在 拟合 过程中看到的特征数量。
版本 0.24 中新增。
- feature_names_in_形状为 (
n_features_in_
,) 的 ndarray 在 拟合 过程中看到的特征名称。仅当
X
的特征名称全部为字符串时才定义。版本 1.0 中新增。
- n_samples_seen_整数或形状为 (n_features,) 的 ndarray
估计器为每个特征处理的样本数。如果没有缺失样本,则
n_samples_seen
将为整数,否则它将为 dtype 为 int 的数组。如果使用了sample_weights
,则它将是一个浮点数(如果没有缺失数据),或者是一个 dtype 为 float 的数组,其总和为到目前为止看到的权重。在新调用 fit 时将重置,但在partial_fit
调用中会递增。
备注
NaN 被视为缺失值:在拟合中被忽略,在转换中被保留。
我们使用标准差的有偏估计器,等效于
numpy.std(x, ddof=0)
。请注意,ddof
的选择不太可能影响模型性能。示例
>>> from sklearn.preprocessing import StandardScaler >>> data = [[0, 0], [0, 0], [1, 1], [1, 1]] >>> scaler = StandardScaler() >>> print(scaler.fit(data)) StandardScaler() >>> print(scaler.mean_) [0.5 0.5] >>> print(scaler.transform(data)) [[-1. -1.] [-1. -1.] [ 1. 1.] [ 1. 1.]] >>> print(scaler.transform([[2, 2]])) [[3. 3.]]
- fit(X, y=None, sample_weight=None)[source]#
计算均值和标准差,以便稍后进行缩放。
- 参数:
- X形状为 (n_samples, n_features) 的 {数组、稀疏矩阵}
用于计算稍后沿特征轴缩放时使用的均值和标准差的数据。
- yNone
忽略。
- sample_weight形状为 (n_samples,) 的类数组,默认为 None
每个样本的个体权重。
版本 0.24 中新增: 参数 sample_weight 对 StandardScaler 的支持。
- 返回:
- self对象
已拟合的缩放器。
- 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_params字典
附加拟合参数。
- 返回:
- 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]#
获取此估计器的参数。
- 参数:
- deep布尔值,默认为 True
如果为 True,将返回此估计器和包含的作为估计器的子对象的参数。
- 返回:
- params字典
参数名称与其值的映射。
- inverse_transform(X, copy=None)[source]#
将数据缩放回原始表示。
- 参数:
- X形状为 (n_samples, n_features) 的 {数组、稀疏矩阵}
用于沿特征轴缩放的数据。
- copy布尔值,默认为 None
是否复制输入 X。
- 返回:
- X_tr形状为 (n_samples, n_features) 的 {ndarray,稀疏矩阵}
转换后的数组。
- partial_fit(X, y=None, sample_weight=None)[source]#
在线计算 X 的均值和标准差,以便以后进行缩放。
所有 X 都作为单个批次处理。这适用于由于
n_samples
数量非常大或 X 从连续流中读取而无法使用fit
的情况。增量均值和标准差的算法在 Chan, Tony F., Gene H. Golub, 和 Randall J. LeVeque 的论文“Algorithms for computing the sample variance: Analysis and recommendations.” The American Statistician 37.3 (1983): 242-247 中的公式 1.5a,b 中给出。
- 参数:
- X形状为 (n_samples, n_features) 的 {数组、稀疏矩阵}
用于计算稍后沿特征轴缩放时使用的均值和标准差的数据。
- yNone
忽略。
- sample_weight形状为 (n_samples,) 的类数组,默认为 None
每个样本的个体权重。
版本 0.24 中新增: 参数 sample_weight 对 StandardScaler 的支持。
- 返回:
- self对象
已拟合的缩放器。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') StandardScaler [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对象
更新后的对象。
- set_inverse_transform_request(*, copy: bool | None | str = '$UNCHANGED$') StandardScaler [source]#
向
inverse_transform
方法请求传递的元数据。请注意,只有在
enable_metadata_routing=True
时,此方法才相关(参见sklearn.set_config
)。请参阅用户指南了解路由机制的工作原理。每个参数的选项如下:
True
:请求元数据,如果提供则传递给inverse_transform
。如果未提供元数据,则忽略请求。False
:不请求元数据,元估计器不会将其传递给inverse_transform
。None
:不请求元数据,如果用户提供元数据,元估计器将引发错误。str
:元数据应使用此给定的别名而不是原始名称传递给元估计器。
默认值(
sklearn.utils.metadata_routing.UNCHANGED
)保留现有的请求。这允许您更改某些参数的请求,而无需更改其他参数。版本1.3中新增。
注意
仅当将此估计器用作元估计器的子估计器时(例如,在
Pipeline
中使用)此方法才相关。否则,它没有任何作用。- 参数:
- copystr, True, False 或 None,默认为 sklearn.utils.metadata_routing.UNCHANGED
inverse_transform
中的copy
参数的元数据路由。
- 返回:
- self对象
更新后的对象。
- set_output(*, transform=None)[source]#
设置输出容器。
参见介绍 set_output API,了解如何使用该 API 的示例。
- 参数:
- transform{"default", "pandas", "polars"},默认为 None
配置
transform
和fit_transform
的输出。"default"
:转换器的默认输出格式"pandas"
:DataFrame 输出"polars"
:Polars 输出None
:转换配置保持不变
版本 1.4 中新增:
"polars"
选项已添加。
- 返回:
- self估计器实例
估计器实例。
- set_params(**params)[source]#
设置此估计器的参数。
此方法适用于简单的估计器以及嵌套对象(例如
Pipeline
)。后者具有<component>__<parameter>
形式的参数,因此可以更新嵌套对象的每个组件。- 参数:
- **params**字典
估计器参数。
- 返回:
- self估计器实例
估计器实例。
- set_partial_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') StandardScaler [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_fit
方法中sample_weight
参数的元数据路由。
- 返回:
- self对象
更新后的对象。
- set_transform_request(*, copy: bool | None | str = '$UNCHANGED$') StandardScaler [source]#
请求传递给
transform
方法的元数据。请注意,只有在
enable_metadata_routing=True
时,此方法才相关(参见sklearn.set_config
)。请参阅用户指南了解路由机制的工作原理。每个参数的选项如下:
True
:请求元数据,如果提供则传递给transform
。如果未提供元数据,则忽略请求。False
:不请求元数据,元估计器不会将其传递给transform
。None
:不请求元数据,如果用户提供元数据,元估计器将引发错误。str
:元数据应使用此给定的别名而不是原始名称传递给元估计器。
默认值(
sklearn.utils.metadata_routing.UNCHANGED
)保留现有的请求。这允许您更改某些参数的请求,而无需更改其他参数。版本1.3中新增。
注意
仅当将此估计器用作元估计器的子估计器时(例如,在
Pipeline
中使用)此方法才相关。否则,它没有任何作用。- 参数:
- copystr, True, False 或 None,默认为 sklearn.utils.metadata_routing.UNCHANGED
transform
方法中copy
参数的元数据路由。
- 返回:
- self对象
更新后的对象。