maxframe.learn.preprocessing.StandardScaler#

class maxframe.learn.preprocessing.StandardScaler(*, copy=True, with_mean=True, with_std=True, validate=True)[源代码]#

通过去除均值并将方差缩放到单位值来标准化特征。

样本 x 的标准分数计算为:

z = (x - u) / s

其中 u 是训练样本的均值,如果 with_mean=False 则为零;s 是训练样本的标准差,如果 with_std=False 则为一。

通过计算训练集中样本的相关统计量,对每个特征分别进行中心化和缩放。然后将均值和标准差存储起来,以便后续数据使用 transform() 处理。

标准化是许多机器学习算法的常见要求:如果各个特征不近似于标准的正态分布(例如均值为 0 且方差为 1 的高斯分布),这些算法的表现可能会很差。

例如,许多用于学习算法目标函数的元素(如支持向量机的 RBF 核,或线性模型的 L1 和 L2 正则化项)都假设所有特征都围绕 0 中心化,并且方差处于同一量级。如果某个特征的方差远大于其他特征,它可能会主导目标函数,使得估计器无法如预期那样从其他特征中正确学习。

StandardScaler 对异常值敏感,在存在异常值的情况下,特征之间的缩放方式可能不同。示例可视化请参见 Compare StandardScaler with other scalers

此缩放器也可以应用于稀疏的 CSR 或 CSC 矩阵,只需传入 with_mean=False,以避免破坏数据的稀疏结构。

更多内容请参阅 用户指南

参数:
  • copy (bool, default=True) -- 如果为 False,则尝试避免复制数据,而是就地缩放。但这并不能保证总是就地执行;例如,如果数据不是 NumPy 数组或 scipy.sparse CSR 矩阵,仍可能返回副本。

  • with_mean (bool, default=True) -- 如果为 True,在缩放前对数据进行中心化处理。在稀疏矩阵上此操作无效(并会引发异常),因为中心化需要构建一个密集矩阵,这在常见使用情况下可能太大而无法放入内存。

  • with_std (bool, default=True) -- 如果为 True,将数据缩放到单位方差(等价于单位标准差)。

scale_#

按特征对数据进行相对缩放,使其具有零均值和单位方差。通常使用 np.sqrt(var_) 计算。如果某个方差为零,则无法实现单位方差,数据将保持不变,缩放因子为 1。当 with_std=False 时,scale_ 等于 None

类型:

形状为 (n_features,) 的 ndarray 或 None

mean_#

训练集中每个特征的均值。当 with_mean=Falsewith_std=False 时为 None

类型:

形状为 (n_features,) 的 ndarray 或 None

var_#

训练集中每个特征的方差。用于计算 scale_。当 with_mean=Falsewith_std=False 时为 None

类型:

形状为 (n_features,) 的 ndarray 或 None

n_features_in_#

fit 过程中看到的特征数。

类型:

int

feature_names_in_#

fit 过程中看到的特征名称。仅在 X 的特征名称均为字符串时定义。

类型:

形状为 (n_features_in_,) 的 ndarray

n_samples_seen_#

每个特征由估计器处理的样本数。如果没有缺失样本,n_samples_seen 将是一个整数,否则是一个 dtype 为 int 的数组。如果使用了 sample_weights,它将是一个浮点数(如果没有缺失数据)或一个 dtype 为 float 的数组,汇总到目前为止看到的权重。在新的 fit 调用时将重置,但在 partial_fit 调用之间会递增。

类型:

int 或形状为 (n_features,) 的 ndarray

参见

scale

不使用估计器 API 的等效函数。

PCA

使用 'whiten=True' 进一步消除特征之间的线性相关性。

备注

NaN 被视为缺失值:在拟合时被忽略,在变换时保留。

我们使用有偏估计量计算标准差,等价于 numpy.std(x, ddof=0)。注意 ddof 的选择不太可能影响模型性能。

示例

>>> from maxframe.learn.preprocessing import StandardScaler
>>> data = [[0, 0], [0, 0], [1, 1], [1, 1]]
>>> scaler = StandardScaler()
>>> print(scaler.fit(data))
StandardScaler()
>>> print(scaler.mean_.execute())
[0.5 0.5]
>>> print(scaler.transform(data).execute())
[[-1. -1.]
 [-1. -1.]
 [ 1.  1.]
 [ 1.  1.]]
>>> print(scaler.transform([[2, 2]]).execute())
[[3. 3.]]
__init__(*, copy=True, with_mean=True, with_std=True, validate=True)[源代码]#

方法

__init__(*[, copy, with_mean, with_std, ...])

execute([session, run_kwargs, extra_tileables])

fetch([session, run_kwargs])

fit(X[, y, sample_weight, execute, session, ...])

计算用于后续缩放的均值和标准差。

fit_transform(X[, y])

拟合数据,然后进行变换。

inverse_transform(X[, copy, execute, ...])

将数据缩放回原始表示形式。

partial_fit(X[, y, sample_weight, execute, ...])

在线计算 X 的均值和标准差以供后续缩放使用。

transform(X[, copy, execute, session, ...])

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