StandardScaler#
- 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、单位方差的高斯分布),它们可能会表现不佳。
例如,学习算法目标函数中使用的许多元素(如支持向量机(Support Vector Machines)的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。with_std=False
时,scale_
等于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_整型
在 fit 期间看到的特征数量。
0.24 版新增。
- feature_names_in_形状为 (
n_features_in_
,) 的 ndarray 在 fit 期间看到的特征名称。仅当
X
的所有特征名称都是字符串时才定义。1.0 版新增。
- n_samples_seen_整型 或 形状为 (n_features,) 的 ndarray
估计器为每个特征处理的样本数量。如果没有缺失样本,
n_samples_seen
将是整数;否则,它将是 dtype 为 int 的数组。如果使用了sample_weights
,它将是浮点数(如果没有缺失数据)或 dtype 为 float 的数组,其中包含到目前为止看到的权重总和。在每次调用 fit 时会被重置,但在partial_fit
调用之间会递增。
备注
NaNs 被视为缺失值:在 fit 中被忽略,在 transform 中被保留。
我们使用标准差的有偏估计器,等同于
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 版新增: StandardScaler 支持参数 sample_weight。
- 返回:
- 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_original形状为 (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 版新增: StandardScaler 支持参数 sample_weight。
- 返回:
- 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_weight字符串, 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
内部使用时。否则无效。- 参数:
- copy字符串, True, False, 或 None, 默认为 sklearn.utils.metadata_routing.UNCHANGED
inverse_transform
方法中copy
参数的元数据路由。
- 返回:
- self对象
更新后的对象。
- set_output(*, transform=None)[source]#
设置输出容器。
请参阅 Introducing the set_output API(介绍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_weight字符串, True, False, 或 None, 默认为 sklearn.utils.metadata_routing.UNCHANGED
sample_weight字符串, True, False, 或 None, 默认为 sklearn.utils.metadata_routing.UNCHANGED
- 返回:
- self对象
更新后的对象。
-
partial_fit
方法中sample_weight
参数的元数据路由。 请求传递给
transform
方法的元数据。请注意,此方法仅在
enable_metadata_routing=True
时才相关(参见sklearn.set_config
)。请参阅 用户指南 了解路由机制的工作原理。每个参数的选项有
True
:请求元数据,如果提供则传递给transform
。如果未提供元数据,则忽略该请求。False
:不请求元数据,并且元估计器不会将其传递给transform
。None
:不请求元数据,如果用户提供,元估计器将引发错误。str
:元数据应使用此给定别名而不是原始名称传递给元估计器。
默认值(
sklearn.utils.metadata_routing.UNCHANGED
)保留现有请求。这允许您更改某些参数的请求而不更改其他参数。1.3 版新增。
注意
此方法仅在将此估计器用作元估计器的子估计器时才相关,例如在
Pipeline
内部使用时。否则无效。- 参数:
- copy字符串, True, False, 或 None, 默认为 sklearn.utils.metadata_routing.UNCHANGED
copy字符串, True, False, 或 None, 默认为 sklearn.utils.metadata_routing.UNCHANGED
- 返回:
- self对象
更新后的对象。
-
transform
方法中copy
参数的元数据路由。 通过中心化和缩放执行标准化。
- 参数:
- X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}
用于沿特征轴进行缩放的数据。
- copy布尔值, 默认为 None
是否复制输入 X。
- 返回:
- X_tr形状为 (n_samples, n_features) 的 {ndarray, 稀疏矩阵}
转换后的数组。