标准化缩放器#

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=Falsewith_std=False 时等于 None

var_形状为 (n_features,) 的 ndarray 或 None

训练集中每个特征的方差。用于计算 scale_。当 with_mean=Falsewith_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 调用中会递增。

另请参阅

缩放

没有估计器 API 的等效函数。

PCA

使用 ‘whiten=True’ 进一步去除特征间的线性相关性。

备注

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将转换器拟合到Xy,并返回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_featuresNone,则使用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

配置transformfit_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对象

更新后的对象。

transform(X, copy=None)[source]#

通过居中和缩放执行标准化。

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

用于沿特征轴缩放的数据。

copy布尔值,默认为 None

是否复制输入 X。

返回:
X_tr形状为 (n_samples, n_features) 的 {ndarray,稀疏矩阵}

转换后的数组。