关于sklearn中StandardScaler的使用方式

文章目录

  • 背景
  • 标准化过程
  • 例子
  • [fit_transform和fit + transform的区别和使用场景](#fit_transform和fit + transform的区别和使用场景)

背景

在机器学习中经常会使用StandardScaler 进行数据归一化,注意一旦调整好StandardScaler以后就保存下来,后面如果进行测试单个时,可以进行加载并对其进行标准化

StandardScaler 是一种常用的数据标准化 方法,用于将数据转换为均值为 0 ,标准差为 1 的标准正态分布。

标准化过程

  1. 计算原始数据的均值 mean 和标准差 std。

  2. 对原始数据进行标准化处理,即对每个数据点减去均值 ,再除以标准差

  3. 在 StandardScaler 中,均值和标准差的计算分别基于训练数据的样本 ,可以使用 fit 方法计算均值和标准差。然后,使用 transform 方法将数据标准化为标准正态分布。

PS: StandardScaler 在计算过程中用的是 "总体标准差",而不是"样本标准差"

总体标准差:
σ = ∑ i = 1 n ( x i − x ˉ ) 2 n \sigma = \sqrt{\frac{\sum_{i = 1}^{n}(x_{i} - \textcolor{myblue}{\bar{x}})^{2}}{n}} σ=n∑i=1n(xi−xˉ)2

x x x 为某个样本, x ˉ \textcolor{myblue}{\bar{x}} xˉ 为总体样本的均值, n n n 为总体样本的数量。

样本标准差:

S = ∑ i = 1 n ( x i − x ˉ ) 2 n − 1 S = \sqrt{\frac{\sum_{i = 1}^{n}(x_{i} - \textcolor{myblue}{\bar{x}})^{2}}{n - 1}} S=n−1∑i=1n(xi−xˉ)2

x x x 为某个抽样样本, x ˉ \textcolor{myblue}{\bar{x}} xˉ 为抽样样本的均值, n n n 为抽样样本的数量。

例子

python 复制代码
from sklearn.preprocessing import StandardScaler
import numpy as np
import pickle
import os

# 创建一个 3 x 2 的矩阵
X = np.array([[1, 2], [3, 4], [5, 6]])

# 创建 StandardScaler 对象
scaler = StandardScaler()

# 计算均值和标准差
scaler.fit(X)

# 将数据标准化为标准正态分布
X_scaled = scaler.transform(X)

# 打印结果
print("原始数据:\n", X)
print("均值:", scaler.mean_)
print("标准差:", scaler.scale_)
print("标准化后的数据:\n", X_scaled)

scaler_filename = 'standard_scaler.pkl'
with open(scaler_filename, 'wb') as file:
    pickle.dump(scaler, file)
print(f"\nStandardScaler 对象已保存到文件: {scaler_filename}")

输出结果:

python 复制代码
原始数据:
 [[1 2]
  [3 4]
  [5 6]]
均值: [3. 4.]
标准差: [1.63299316 1.63299316]
标准化后的数据:
 [[-1.22474487 -1.22474487]
  [ 0.          0.        ]
  [ 1.22474487  1.22474487]]
StandardScaler 对象已保存到文件: standard_scaler.pkl

在上面的代码中,我们首先创建了一个 3 x 2 的矩阵 X,然后创建了一个 StandardScaler 对象 scaler。通过调用 fit 方法计算了均值和标准差,并通过调用 transform 方法将原始数据标准化为标准正态分布。最后,我们打印了原始数据、均值、标准差和标准化后的数据。

使用 Python 内置的 pickle 模块保存 StandardScaler 对象

fit_transform和fit + transform的区别和使用场景

要注意fit_transform 和 fit + transform 的区别在于

  • fit_transform 是一个组合方法,它将拟合数据和转换数据这两个步骤合并到一个方法中。它首先拟合数据,然后应用相同的拟合参数转换数据。在使用 fit_transform 方法时,你只需在训练集上调用一次,就可以同时进行拟合和转换,这样能够节省时间和代码。
  • fit 和 transform 是单独的方法。fit 方法用于从数据中学习模型参数,例如,对于 StandardScaler,它计算并保存数据集的均值和标准差 。transform 方法用于使用已学习的模型参数来转换数据。通常,你会在训练集上调用 fit 方法来拟合模型 ,并在训练集和测试集上分别调用 transform 方法来转换数据。

在使用机器学习算法时,通常将数据集分成训练集和测试集。通常情况下,我们只使用训练集拟合模型并保存模型,然后使用已保存的模型在测试集上转换数据。因此,在训练集 上使用 fit_transform 方法,而在测试集 上使用 transform 方法。

python 复制代码
from sklearn.preprocessing import StandardScaler
import numpy as np

# 创建一个 3 x 2 的矩阵
X = np.array([[1, 2], [3, 4], [5, 6]])

# 使用 fit_transform 方法标准化数据
scaler = StandardScaler()
X_scaled1 = scaler.fit_transform(X)

# 使用 fit 和 transform 方法标准化数据
scaler = StandardScaler()
scaler.fit(X)
X_scaled2 = scaler.transform(X)

# 打印结果
print("使用 fit_transform 方法标准化的结果:\n", X_scaled1)
print("使用 fit 和 transform 方法标准化的结果:\n", X_scaled2)

输出结果:

python 复制代码
使用 fit_transform 方法标准化的结果:
 [[-1.22474487 -1.22474487]
  [ 0.          0.        ]
  [ 1.22474487  1.22474487]]
使用 fit 和 transform 方法标准化的结果:
 [[-1.22474487 -1.22474487]
  [ 0.          0.        ]
  [ 1.22474487  1.22474487]]

参考: https://www.cnblogs.com/chentiao/p/17203643.html

相关推荐
CCblandy4 分钟前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
建筑工程企业管理系统16 分钟前
工程进度统计管理系统自动化汇总数据,解决施工企业手工对账误差难题
大数据·人工智能·自动化
唠点键盘之外的19 分钟前
27 存量系统接大模型:旁挂一个 AI 微服务,老架构一行不改
人工智能·微服务·架构
kaixin_啊啊1 小时前
【用于更准确 G×E 基因组预测的大规模作物数据集与基于深度学习的多模态融合框架】论文学习
人工智能·深度学习·学习
GOWIN革文品牌咨询1 小时前
工业测量品牌系统化搭建指南:从内容架构到长期治理的全流程
大数据·人工智能·架构
Cc.Y1 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python
拿本唠嗑AI研究1 小时前
本体工程实战指南:从建模到可维护的完整落地路径
java·人工智能·python·jena·ontology
deepseek231 小时前
AI 模型隐藏任意能力拆解:把加密神经网络塞进宿主权重,能力评估为什么在密码学上抓不到
人工智能·深度学习·神经网络·密码学·模型安全
揽秀亭长1 小时前
从音频到五线谱,自动扒谱的完整技术流程
人工智能
Smoothcloud润云1 小时前
PyTorch推理服务模型热切换与失败回滚实战:降低版本更新中断
服务器·人工智能·pytorch·python·深度学习·gpu