数据集的标准化是scikit-learn中实现许多机器学习估计器的普遍要求;如果个别特征看起来或多或少不像标准正态分布数据:均值和单位方差为零的高斯分布,则它们的性能可能不好。

在实践中,我们通常会忽略分布的形状,而只是通过删除每个特征的平均值来实现特征数据中心化,然后除以非常数特征的标准差来缩放数据。

例如,学习算法的目标函数中使用的许多元素(例如支持向量机的RBF内核或线性模型的l1和l2正则化器)都假定所有特征都围绕零为中心并且具有相同阶数的方差。如果某个特征的方差比其他特征大几个数量级,则它可能会极大影响目标函数,并使估计器无法按预期从其他特征中正确学习。

sklearn 数据预处理中的数据标准化

核心思想

数据标准化(Standardization)是将特征数据转换为均值为 0、标准差为 1 的分布(即标准正态分布)。其数学公式为:z=(x−μ)/σz = (x - μ) / σz=(xμ)/σ

其中:

  • x 是原始特征值
  • μ 是该特征的均值
  • σ 是该特征的标准差
  • z 是标准化后的值

标准化适用于特征尺度差异较大或算法假设数据服从正态分布的情况(如 SVM、逻辑回归、PCA、神经网络等)。


常用函数与类

1. sklearn.preprocessing.StandardScaler

这是最常用的标准化工具类。

参数说明:
参数名类型默认值说明
copyboolTrue是否复制数据。若为 False,则尝试在原数据上进行变换(不保证一定原地修改)。
with_meanboolTrue是否中心化(减去均值)。若为 False,则不减均值。对稀疏矩阵必须设为 False
with_stdboolTrue是否缩放(除以标准差)。若为 False,则仅中心化。
属性(拟合后可用):
属性名说明
mean_每个特征的均值(形状为 (n_features,)
scale_每个特征的标准差(形状为 (n_features,)
var_每个特征的方差(形状为 (n_features,)
n_samples_seen_拟合时看到的样本数
方法:
  • .fit(X[, y]):计算均值和标准差。
  • .transform(X):使用拟合的参数对数据进行标准化。
  • .fit_transform(X[, y]):先拟合再转换。
  • .inverse_transform(X):将标准化后的数据还原为原始尺度。
  • .get_feature_names_out(input_features=None):获取输出特征名(适用于管道)。
返回值:
  • .fit():返回 self(用于链式调用)
  • .transform(X):返回 numpy.ndarrayscipy.sparse matrix,形状与输入相同,类型为 float64

简单示例代码

from sklearn.preprocessing import StandardScaler
import numpy as np# 创建示例数据
X = np.array([[1, 2],[3, 4],[5, 6],[7, 8]], dtype=float)print("原始数据:")
print(X)# 初始化标准化器
scaler = StandardScaler()# 拟合并转换数据
X_scaled = scaler.fit_transform(X)print("\n标准化后数据:")
print(X_scaled)print("\n各特征均值:", scaler.mean_)
print("各特征标准差:", scaler.scale_)# 逆变换还原数据
X_original = scaler.inverse_transform(X_scaled)
print("\n逆变换还原数据:")
print(X_original)

输出示例:

原始数据:
[[1. 2.][3. 4.][5. 6.][7. 8.]]标准化后数据:
[[-1.34164079 -1.34164079][-0.4472136  -0.4472136 ][ 0.4472136   0.4472136 ][ 1.34164079  1.34164079]]各特征均值: [4. 5.]
各特征标准差: [2.23606798 2.23606798]逆变换还原数据:
[[1. 2.][3. 4.][5. 6.][7. 8.]]

管道中使用示例:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification# 生成示例数据
X, y = make_classification(n_samples=100, n_features=4, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 构建管道:先标准化,再分类
pipeline = Pipeline([('scaler', StandardScaler()),('classifier', SVC())
])pipeline.fit(X_train, y_train)
score = pipeline.score(X_test, y_test)
print(f"测试集准确率:{score:.4f}")

sklearn 数据预处理中的均值去除(Mean Removal / Centering)

核心思想

均值去除(Mean Removal),也称为数据中心化(Centering),是指对每个特征维度减去其样本均值,使得处理后的数据在该维度上的均值为 0。

数学公式:xcentered=x−mean(x)x_{centered} = x - mean(x)xcentered=xmean(x)

  • 不改变数据的方差或分布形状
  • 仅将数据“平移”至以 0 为中心
  • 是数据标准化(Standardization)的第一步(标准化 = 均值去除 + 方差缩放)

适用场景

  • 某些算法要求输入数据均值为 0(如 PCA、SVM、神经网络)
  • 避免特征因均值偏移导致模型学习偏差
  • 作为预处理步骤,常与缩放结合使用

常用函数与类

1. sklearn.preprocessing.StandardScaler(最常用)

虽然名为“标准化器”,但通过设置 with_std=False,可仅执行均值去除。

参数说明:
参数名类型默认值说明
copyboolTrue是否复制数据。若为 False,尝试原地修改(不保证)。
with_meanboolTrue是否进行均值去除(中心化)。必须为 True 才能去均值。
with_stdboolTrue是否进行标准差缩放。设为 False 时仅做中心化。

⚠️ 对稀疏矩阵(如 scipy.sparse),with_mean=True 会报错,因为会导致稠密输出。

属性(拟合后可用):
属性名说明
mean_每个特征的均值(形状 (n_features,)
scale_with_std=True,为标准差;否则为 None
n_samples_seen_拟合时看到的样本数
方法:
  • .fit(X[, y]):计算每个特征的均值。
  • .transform(X):对数据执行中心化(减去均值)。
  • .fit_transform(X[, y]):先拟合再转换。
  • .inverse_transform(X):还原数据(加上均值)。
  • .get_feature_names_out(...):获取输出特征名(兼容管道)。
返回值:
  • .fit() → 返回 self
  • .transform(X) → 返回 numpy.ndarrayscipy.sparse matrix(若输入为稀疏且 with_mean=False),类型为 float64,形状同输入

简单示例代码

from sklearn.preprocessing import StandardScaler
import numpy as np# 创建示例数据
X = np.array([[1, 10],[2, 20],[3, 30],[4, 40]], dtype=float)print("原始数据:")
print(X)
print("原始均值:", np.mean(X, axis=0))# 初始化仅做均值去除的缩放器
scaler = StandardScaler(with_std=False)  # 关闭标准差缩放# 拟合并转换
X_centered = scaler.fit_transform(X)print("\n中心化后数据:")
print(X_centered)
print("中心化后均值:", np.mean(X_centered, axis=0))  # 应为 [0., 0.]print("\n学习到的均值:", scaler.mean_)# 逆变换还原原始数据
X_original = scaler.inverse_transform(X_centered)
print("\n逆变换还原数据:")
print(X_original)

输出示例:

原始数据:
[[ 1. 10.][ 2. 20.][ 3. 30.][ 4. 40.]]
原始均值: [ 2.5 25. ]中心化后数据:
[[-1.5 -15. ][-0.5  -5. ][ 0.5   5. ][ 1.5  15. ]]
中心化后均值: [0. 0.]学习到的均值: [ 2.5 25. ]逆变换还原数据:
[[ 1. 10.][ 2. 20.][ 3. 30.][ 4. 40.]]

sklearn 数据预处理中的方差缩放(Scaling to Unit Variance)

核心思想

方差缩放(Variance Scaling) 是指将每个特征维度的数据除以其标准差(或等效统计量),使得缩放后的特征方差为 1(即单位方差)。

数学公式:xscaled=x/σx_{scaled} = x / σxscaled=x/σ

其中:

  • x 是原始特征值
  • σ 是该特征的标准差(std(x)
  • x_scaled 是方差缩放后的值

注意:方差缩放通常不单独使用,而是与均值去除(中心化) 结合构成完整的标准化(Standardization)

z = (x - μ) / σ

为什么需要方差缩放?

  • 某些算法(如 SVM、KNN、PCA、神经网络)对特征尺度敏感
  • 若某特征方差远大于其他特征,会主导目标函数或距离计算
  • 保证所有特征在“相同量级”上,提升模型收敛速度和性能

常用函数与类

1. sklearn.preprocessing.StandardScaler(最常用)

通过设置 with_mean=False,可仅执行方差缩放(不中心化)。

参数说明:
参数名类型默认值说明
copyboolTrue是否复制数据。若为 False,尝试原地修改(不保证)。
with_meanboolTrue是否中心化。设为 False 可仅做方差缩放。
with_stdboolTrue是否进行方差缩放。必须为 True 才生效。

⚠️ 对稀疏矩阵,with_mean=True 会导致报错(因为中心化会破坏稀疏性),但 with_mean=False 是安全的。

属性(拟合后可用):
属性名说明
scale_每个特征的标准差(形状 (n_features,)
mean_with_mean=True,为均值;否则为 None
var_每个特征的方差(scale_ ** 2
n_samples_seen_拟合时看到的样本数
方法:
  • .fit(X[, y]):计算每个特征的标准差(和均值,若启用)。
  • .transform(X):对数据执行缩放(和中心化,若启用)。
  • .fit_transform(X[, y]):先拟合再转换。
  • .inverse_transform(X):还原数据(乘以标准差,加上均值)。
  • .get_feature_names_out(...):获取输出特征名(兼容管道)。
返回值:
  • .fit() → 返回 self
  • .transform(X) → 返回 numpy.ndarrayscipy.sparse matrix(若输入稀疏且 with_mean=False),类型为 float64,形状同输入

简单示例代码

from sklearn.preprocessing import StandardScaler
import numpy as np# 创建示例数据(注意:不同列方差差异大)
X = np.array([[1, 100],[2, 200],[3, 300],[4, 400]], dtype=float)print("原始数据:")
print(X)
print("原始标准差:", np.std(X, axis=0))# 初始化仅做方差缩放的缩放器(不中心化)
scaler = StandardScaler(with_mean=False, with_std=True)# 拟合并转换
X_scaled = scaler.fit_transform(X)print("\n方差缩放后数据:")
print(X_scaled)
print("缩放后标准差:", np.std(X_scaled, axis=0))  # 应为 [1., 1.]print("\n学习到的标准差(scale_):", scaler.scale_)# 逆变换还原原始数据
X_original = scaler.inverse_transform(X_scaled)
print("\n逆变换还原数据:")
print(X_original)

输出示例:

原始数据:
[[  1. 100.][  2. 200.][  3. 300.][  4. 400.]]
原始标准差: [1.11803399 111.80339887]方差缩放后数据:
[[0.89442719 0.89442719][1.78885438 1.78885438][2.68328157 2.68328157][3.57770876 3.57770876]]
缩放后标准差: [1. 1.]学习到的标准差(scale_): [  1.11803399 111.80339887]逆变换还原数据:
[[  1. 100.][  2. 200.][  3. 300.][  4. 400.]]

仅方差缩放 vs 完整标准化 对比示例

import numpy as np
from sklearn.preprocessing import StandardScalerX = np.array([[1, 100],[2, 200],[3, 300],[4, 400]], dtype=float)# 仅方差缩放
scaler_var_only = StandardScaler(with_mean=False)
X_var_scaled = scaler_var_only.fit_transform(X)# 完整标准化(去均值 + 方差缩放)
scaler_full = StandardScaler()
X_standardized = scaler_full.fit_transform(X)print("仅方差缩放:\n", X_var_scaled)
print("完整标准化:\n", X_standardized)

输出:

仅方差缩放:[[0.89442719 0.89442719][1.78885438 1.78885438][2.68328157 2.68328157][3.57770876 3.57770876]]完整标准化:[[-1.34164079 -1.34164079][-0.4472136  -0.4472136 ][ 0.4472136   0.4472136 ][ 1.34164079  1.34164079]]

在管道中使用示例:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification# 生成数据(故意制造方差差异)
np.random.seed(42)
X, y = make_classification(n_samples=100, n_features=4, random_state=42)
# 放大第二列方差
X[:, 1] *= 100X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 管道:仅方差缩放 + SVM
pipeline = Pipeline([('var_scaler', StandardScaler(with_mean=False)),  # 仅缩放方差('svm', SVC())
])pipeline.fit(X_train, y_train)
score = pipeline.score(X_test, y_test)
print(f"测试集准确率(仅方差缩放):{score:.4f}")# 对比:完整标准化
pipeline_full = Pipeline([('scaler', StandardScaler()),  # 完整标准化('svm', SVC())
])
pipeline_full.fit(X_train, y_train)
score_full = pipeline_full.score(X_test, y_test)
print(f"测试集准确率(完整标准化):{score_full:.4f}")

与其他缩放器对比

缩放器是否去均值是否单位方差是否受异常值影响适用场景
StandardScaler(with_mean=False)仅需统一方差,保留原始均值
StandardScaler() (默认)最常用标准化
MinMaxScaler❌ (映射到[0,1])需固定范围,如图像像素
RobustScaler✅ (中位数)✅ (IQR)含异常值的数据

注意事项

重要提醒:

  • 方差缩放应在训练集上拟合,然后应用于测试集/新数据。
  • 若特征标准差为 0(常数特征),StandardScaler 会将其缩放为 0(可后续删除或填充)。
  • 对稀疏数据,使用 with_mean=False 是安全的;若需中心化,考虑 RobustScaler 或手动处理。
  • 单独使用方差缩放较少见,通常建议与均值去除结合使用(完整标准化)。

总结

方差缩放是确保所有特征具有相同“能量级别”的关键步骤。在 sklearn 中,通过 StandardScaler(with_mean=False) 可实现纯方差缩放。虽然实践中更常用完整标准化(with_mean=True),但在某些特定场景(如保留原始偏移量、处理稀疏数据)下,仅缩放方差仍具有实用价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98633.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98633.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/98633.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leedcode 算法刷题第三十一天

1049. 最后一块石头的重量 II 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果…

图神经网络介绍

源自论文&#xff1a;Survey on Graph Neural Networks 图神经网络&#xff08;GNNs&#xff09;中的符号与定义详解 本文使用了图论和深度学习领域的标准符号体系&#xff0c;以确保对图结构数据的描述清晰一致。以下是核心符号和定义的详细说明&#xff1a; 一、基础图结构符…

测试报告:“问卷考试系统”项目

目录 一、报告概述 &#xff08;一&#xff09;项目背景 &#xff08;二&#xff09;项目核心模块与测试目的 1、项目核心模块 2、测试目的 &#xff08;三&#xff09;测试环境 1、硬件环境 2、软件环境 &#xff08;1&#xff09;操作系统 &#xff08;2&#xff0…

Linux笔记---网络计算器

1. 网络程序分层 我们说过&#xff0c;OSI7层模型十分完美&#xff0c;但是因特网实际上采用的是TCP/IP五层模型&#xff1a; 实际上&#xff0c;对比可以发现&#xff0c;TCP/IP模型实际上就是将OSI的前三层模型合并为了应用层。 这就提示我们&#xff0c;我们设计的应用程…

《智能网联汽车交通仿真软件可信度评估》团标启动会圆满举办

让数据真正闭环的L4级自动驾驶仿真工具链&#xff0d;杭州千岑智能科技有限公司&#xff1a;RSim 近日&#xff0c;由中国仿真学会主办、清华大学牵头的《智能网联汽车交通仿真软件可信度评估》团体标准启动会在北京成功举行。杭州千岑科技有限公司作为智能网联汽车测试验证领域…

关于 MCU 芯片外围电路的快速入门介绍

MCU&#xff08;微控制单元&#xff0c;Microcontroller Unit&#xff09;是嵌入式系统的“大脑”&#xff0c;但需通过外围电路实现供电、信号输入/ 输出、通信、存储等功能&#xff0c;才能构成完整的工作系统。外围电路的设计直接决定 MCU 的稳定性、功能扩展性和适用场景&a…

Uniapp onLoad 和 onShow 区别

一、核心区别生命周期触发时机执行次数参数获取onLoad页面首次创建时触发仅1次支持获取URL参数optionsonShow页面每次显示时触发&#xff08;包括返回&#xff09;多次无法获取URL参数二、实战数据请求场景优先使用onLoad请求数据的场景&#xff1a;初始化数据当需要根据URL参数…

大模型预训练评估指标

模型效果评测 关于 Language Modeling 的量化指标&#xff0c;较为普遍的有 [PPL]&#xff0c;[BPC]等,可以简单理解为在生成结果和目标文本之间的 Cross Entropy Loss 上做了一些处理&#xff0c;这种方式可以用来评估模型对「语言模板」的拟合程度即给定一段话&#xff0c;预…

【Matlab】-- 机器学习项目 - 基于XGBoost算法的数据回归预测

文章目录 文章目录01 内容概要02 部分代码03 代码解读04 运行结果05 基于XGBoost算法的数据回归预测源码01 内容概要 XGBoost属于集成学习中的Boosting方法&#xff0c;其基本思想是&#xff1a; 逐步构建多个弱学习器&#xff08;通常是CART决策树&#xff09;&#xff0c;每…

Memory in LLM Agent

Memory in LLM Agent 1 为什么需要“记忆” —— 背景与动机 在构建 LLM Agent&#xff08;Large Language Model Agent&#xff0c;大语言模型驱动的智能体&#xff09;的过程中&#xff0c;“记忆”&#xff08;Memory&#xff09;是一个绕不开的核心问题。没有记忆的 Agent…

三甲地市级医院数据仓湖数智化建设路径与编程工具选型研究(上)

摘要 本研究旨在探索三甲地市级医院数据仓湖数智化建设的实施路径与工具选型策略,以响应国家《"十四五"全民健康信息化规划》中2025年医疗数据平台联通全覆盖的政策要求,同时解决地市级医院面临的资源限制(年均信息化投入占总营收1.5%)、区域协同需求突出及多业…

25.9.10_CTF-reverse_RC4那些事儿

CTF-reverse_RC4那些事儿 0x00 RC4加密知识点 推荐看这位up主的视频https://www.bilibili.com/video/BV1G64y1Y7p4/?spm_id_from333.1391.0.0&p2 简单来说RC4算法包括两部分KSA(利用Key生成S盒)和PRGA(利用S盒生成密钥流): KSA: 初始化S&#xff08;一般是0-255&…

网络编程(6)

【0】复习 Modbus&#xff1a;modbus tcp modbus rtu Modbus TCP: 特点&#xff1a;主从问答&#xff08;控制 采集信息&#xff09; 应用层协议&#xff08;基于TCP通信&#xff09;、默认端口502 组成&#xff1a;报文头&#xff08;7 事物2 协议2 长度2 单元表示1&#xff…

技术文章大纲:AI绘画—动漫角色生成赛

技术文章大纲&#xff1a;AI绘画—动漫角色生成赛 背景与意义 动漫角色生成赛的兴起与发展AI绘画技术在动漫创作中的应用价值比赛对推动AI艺术创新的作用 技术核心&#xff1a;AI绘画模型 主流模型介绍&#xff08;如Stable Diffusion、MidJourney、DALLE&#xff09;针对动…

Flink-新增 Kafka source 引发状态丢失导致启动失败

背景 Flink Job 新增 kafka source 算子,从状态保留并启动后提示 org.apache.flink.util.StateMigrationException: The new state typeSerializer for operator state must not be incompatible,导致任务 Fail。 Source: task-kafka-source -> task-kafka-transform (1…

【系统架构设计(26)】系统可靠性分析与设计详解:构建高可用软件系统的核心技术

文章目录一、本文知识覆盖范围1、概述2、知识体系概览二、系统可靠性基础概念1、可靠性与可用性的本质区别2、软件可靠性与硬件可靠性的深度对比3、核心可靠性指标的业务价值三、系统架构可靠性模型1、串联系统的可靠性挑战2、并联系统的高可靠性设计3、混合系统的复杂性管理四…

4 C 语言数据结构实战:栈和队列完整实现(结构体 + 函数)+ 最小栈解决方案

栈和队列 1. 栈 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作 的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&…

Milvus基于docker主机外挂实践

一、安装docker与我之前写的原博客&#xff1a;ubuntu安装milvus向量数据库&#xff0c;获取key不同&#xff0c;原博客获取key已经过时# 更新Ubuntu软件包列表和已安装软件的版本: sudo apt update# 安装Ubuntu系统的依赖包 sudo apt-get install ca-certificates curl gnupg …

使用python test测试http接口

使用python test测试http接口获取token和控制session&#xff0c;后面大多数接口要带上这些信息 import time import requestsfrom common.aes_algorithm import AES from config.config import Config from config.log import logclass Common:username "admin"pas…

平时只会CRUD,没有高质量项目经验,我该怎么办

我没有项目经验怎么办 首先&#xff0c;不管是应届生还是社招几年工作经验的朋友&#xff0c;除非特别厉害的人&#xff0c;大家都会遇到这个问题。 我们该怎么处理&#xff0c;关注hikktn&#xff01;为你解答这个问题。 问AI世面上那个大厂程序员项目推荐 为什么这么说呢&…