You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证sklearn中StandardScaler的transform输出正确性?

sklearn StandardScaler 核心问题解答

一、转换的具体数学公式

StandardScaler 实现的是Z-score标准化,用sc.fit计算得到的sc.mean_(各特征的均值)和sc.scale_(各特征的总体标准差,即除以样本数N而非N-1),对每个样本的每个特征执行以下计算:

标准化值 = (原始特征值 - 对应特征的均值) / 对应特征的总体标准差

对应到代码逻辑,假设处理第i个特征,单个样本值为x,则计算式为 (x - sc.mean_[i]) / sc.scale_[i]。

二、验证转换输出的正确性

可以通过两种简单方式验证结果是否符合预期:

  • 手动计算对比:
    1. 提取原始数据中某一列特征,手动计算其均值和总体标准差(注意要和sklearn一致,用ddof=0计算标准差)
    2. 对该列每个元素执行标准化公式计算
    3. 将手动计算结果和sc.transform/sc.fit_transform的输出对应列对比,允许微小的浮点数精度误差
  • 检查标准化后的数据统计特性:
    标准化完成后,每个特征的均值应接近0,标准差应接近1。可以用numpy的mean和std函数对标准化后的数据按列计算,结果误差通常在1e-10量级以内。

实操代码示例

import numpy as np
from sklearn.preprocessing import StandardScaler

# 构造测试数据集
X = np.array([[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]])
scaler = StandardScaler()
scaled_X = scaler.fit_transform(X)

# 手动验证第一列特征的标准化结果
col_0 = X[:, 0]
manual_mean = col_0.mean()
manual_std = col_0.std(ddof=0)  # 总体标准差,和sklearn逻辑一致
manual_scaled = (col_0 - manual_mean) / manual_std

# 对比结果
print("sklearn 输出的第一列标准化值:", scaled_X[:, 0])
print("手动计算的第一列标准化值:", manual_scaled)
print("结果是否一致:", np.allclose(scaled_X[:, 0], manual_scaled))

# 检查标准化后的数据统计特征
print("\n标准化后各特征均值:", np.round(np.mean(scaled_X, axis=0), 10))
print("标准化后各特征标准差:", np.round(np.std(scaled_X, axis=0), 10))

内容的提问来源于stack exchange,提问作者jhchandler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:25:21