Sklearn 中的 StandardScaler

2024 年 8 月 29 日 | 4 分钟阅读

何时以及如何使用 StandardScaler?

当给定数据集的特征在其范围内波动很大或以各种测量单位记录时,StandardScaler 就派上用场了。

通过 StandardScaler 将均值减小到 0 后,数据会被缩放到方差为 1。但是,在确定数据的经验均值和标准差时,数据中的异常值会产生重大影响,从而减小特征值的频谱。

许多机器学习算法可能会由于起始特征的这些变化而遇到问题。例如,对于计算距离的算法,如果数据集的任何特征具有较大或完全不同范围的值,那么该特定数据集特征将控制距离计算。

sklearn 的 StandardScaler 函数基于以下理论:数据集中值在不同范围内的变量对模型的拟合参数和训练函数贡献不均,甚至可能导致该模型预测的偏差。

因此,在将特征包含在机器学习模型中之前,我们必须对数据进行标准化(µ = 0,σ = 1)。在特征工程中,通常采用标准化来解决这个潜在问题。

使用 Sklearn 进行标准化

通过从特征中去除均值并将其缩放到单位方差,使用此函数对特征进行标准化。

计算特征标准分数的公式为 z = (x - u) / s,其中 u 是训练特征的均值(如果 with_mean = False 则为零),s 是样本的标准差(如果 with_std = False 则为一)。

通过计算训练集特征的相关统计量,对每个特征独立应用中心化和缩放。然后,为了在稍后使用 transform() 处理样本,fit() 方法会存储均值和标准差。

参数

  1. copy (bool, default = True):- 如果此参数设置为 True,则尝试避免复制,而是就地缩放样本。这不一定能保证就地执行;例如,如果输入不是 NumPy 数组或 scipy.sparse CSR 矩阵的形式,函数仍可能返回副本。
  2. with_mean (bool, default = True):- 如果参数设置为 True,则在中心化数据后进行缩放。应用于稀疏矩阵时,这会失败(并引发异常),因为中心化稀疏矩阵需要构建一个密集矩阵,在大多数使用情况下,该矩阵预计过大而无法放入内存。
  3. with_std (bool, default = True):- 如果此参数设置为 true,则此参数将输入数据缩放到单位方差(或者我们可以说它使标准偏差为单位)。

属性

  1. scale_ (形状为 (n_features,) 的 ndarray 或 None):- 数据相对于每个特征具有零均值和单位方差进行缩放。
  2. mean_ (形状为 (n_features,) 的 ndarray 或 None):- 它是训练数据集中每个特征的平均值。当参数 with_mean 设置为 False 时,此值为 None。
  3. var_ (形状为 (n_features,) 的 ndarray 或 None):- 它是训练数据集中每个特征的方差值。它用于确定特征的尺度。当参数 with_std 设置为 False 时,此值为 None。
  4. n_features_in_ (int 类型):- 此属性提供在拟合过程中检测到的特征数量。
  5. feature_names_in_ (形状为 (n_features_in_,) 的 ndarray):- 此属性是在拟合过程中通过名称标识的特征。仅当 X 的所有特征名称均为字符串数据类型时,才定义 X。
  6. n_samples_seen_ (int 类型或形状为 (n_features,) 的 ndarray):- 这给出了估计器为每个特征检查的样本数量。

StandardScaler 类的方法

fit(X[, y, sample_weight])此方法计算均值和标准差,以便稍后用于缩放数据。
fit_transform(X[, y])此方法拟合数据的参数,然后对其进行转换。
get_feature_names_out([input_features])此方法获取转换的特征名称。
get_params([deep])此方法提供特定估计器的参数。
inverse_transform(X[, copy])它将数据的大小还原为其原始形式。
partial_fit(X[, y, sample_weight])在线计算 X 上的均值和标准差,以便稍后进行缩放。
set_params(**params)此方法用于设置估计器参数的值。
transform(X[, copy])此方法使用类中已存储的参数转换数据。

StandardScaler 示例

首先,我们将导入所需的库。要使用 StandardScaler 函数,我们需要导入 Sklearn 库。

然后我们将加载 iris 数据集。我们可以从 sklearn.datasets 库导入 IRIS 数据集。

我们将创建一个 StandardScaler 类的对象。

分离自变量和目标变量。

我们将使用 fit transform() 方法将转换应用于数据集。

语法

我们首先按照上述语法构建 StandardScaler() 方法的实例。此外,我们通过使用 fit_transform() 和提供的对象来标准化数据。

代码

输出

[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]]
[[-0.90068117  1.01900435 -1.34022653 -1.3154443 ]
 [-1.14301691 -0.13197948 -1.34022653 -1.3154443 ]
 [-1.38535265  0.32841405 -1.39706395 -1.3154443 ]]
[5.84333333 3.05733333 3.758      1.19933333]