Sklearn标准化和归一化方法汇总(1):标准化 / 标准差归一化 / Z-Score归一化

news2024/12/23 12:50:17

Sklearn中与特征缩放有关的五个函数和类,全部位于sklearn.preprocessing包内。作为一个系列文章,我们将逐一讲解Sklearn中提供的标准化和归一化方法,以下是本系列已发布的文章列表:

  • Sklearn标准化和归一化方法汇总(1):标准化 / 标准差归一化 / Z-Score归一化
  • Sklearn标准化和归一化方法汇总(2):Min-Max归一化

以下是Sklearn中的五种与特征缩放相关的函数和类,我们的研究也是为围绕这些函数和类展开的:

名称方法名类名
标准化 / Z-Score 归一化 / 标准差归一化sklearn.preprocessing.scalesklearn.preprocessing.StandardScaler
Min-Max 归一化sklearn.preprocessing.minmax_scalesklearn.preprocessing.MinMaxScaler
范数归一化sklearn.preprocessing.normalizesklearn.preprocessing.Normalizer
Robust Scaler(无常用别名)sklearn.preprocessing.robust_scalesklearn.preprocessing.RobustScaler
Power Transformer (无常用别名)sklearn.preprocessing.power_transformsklearn.preprocessing.PowerTransformer

关于各种关于标准化和归一化的概念和分类,我们已经在此前一篇文章《标准化和归一化概念澄清与梳理》中做了详细的梳理和澄清,不清楚的读者可以先阅读一下此文。本文我们研究第二种归一化手段:标准化 / 标准差归一化 / Z-Score归一化。本文地址:https://laurence.blog.csdn.net/article/details/128713962,转载请注明出处!

1. 算法

标准化 / 标准差归一化 / Z-Score归一化的算法是:先求出数据集(通常是一列数据)的均值和标准差,然后所有元素先减去均值,再除以标准差,结果就是归一化后的数据了。经标准差归一化后,数据集整体将会平移到以0点中心的位置上,同时会被缩放到标准差为1的区间内。要注意的是数据集的标准差变为1,并不意味着所有的数据都会被缩放到[-1,1]之间,下文有示例为证。其计算公式如下(其中 μ \mu μ是均值, σ \sigma σ是标准差):

x ′ = x − μ σ x^{'}=\frac{x - \mu}{\sigma} x=σxμ

2. 示例

在下面的示例中,我们准备了一组身高数据,这组数据符合以170为均值,170*0.15为标准差的正态分布。我们会通过三种方法计算出标准差归一化后的数据,从中我们可以理解标准差归一化的计算逻辑并掌握直接进行标准差归一的工具方法和类,以下是示例将要演示的3种计算方法:

  1. 根据公式手动计算
  2. 使用sklearn.preprocessing.scale直接处理
  3. 使用sklearn.preprocessing.StandardScaler直接处理

以下是示例代码:

# 标准差归一化 / Z-Score归一化 / 标准化

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import scale
from sklearn.preprocessing import StandardScaler
# author: https://laurence.blog.csdn.net/

%matplotlib inline
np.random.seed(42)
fig, (ax1, ax2, ax3, ax4) = plt.subplots(1, 4, figsize=(12,5))

heights = np.random.normal(loc=170, scale=170*0.15, size=1000)

print("1. 原始数据")
print(f"heights (first 3 elements) = {heights[:3]}")
print(f"heights mean = {heights.mean()}")
print(f"heights standard deviation = {heights.std()}")

ax1.hist(heights, bins=50)
ax1.set_title("raw data")
ax1.annotate(f"σ = {heights.std()}", (0.5, 0.95), xycoords='axes fraction', va='center', ha='center')

print("--------------------------------------------------------------------------------------------------------------")

print("2. 根据公式手动进行标准差归一化(标准化)")
std_scaled_heights = (heights - heights.mean()) / heights.std()
print(f"std_scaled_heights (first 3 elements) = {std_scaled_heights[:3]}")
print(f"std_scaled_heights standard deviation = {std_scaled_heights.std()}")

ax2.hist(std_scaled_heights, bins=50)
ax2.set_title("manually scaled")
ax2.annotate(f"σ = {std_scaled_heights.std()}", (0.5, 0.95), xycoords='axes fraction', va='center', ha='center')

print("--------------------------------------------------------------------------------------------------------------")

print("3. 使用scale函数进行标准差归一化(标准化)")
std_scaled_heights = scale(heights)
print(f"std_scaled_heights (first 3 elements) = {std_scaled_heights[:3]}")
print(f"std_scaled_heights standard deviation = {std_scaled_heights.std()}")

ax3.hist(std_scaled_heights, bins=50)
ax3.set_title("scale()")
ax3.annotate(f"σ = {std_scaled_heights.std()}", (0.5, 0.95), xycoords='axes fraction', va='center', ha='center')

print("--------------------------------------------------------------------------------------------------------------")

print("4. 使用StandardScaler函数进行标准差归一化(标准化)")

# 在交付给Scaler前,需将一维数据转置为二维单列数组,以便适配Scaler接受的二维数组结构和轴向,即:按列进行缩放(axis=0)
# 受上层Transformer接口的约束,所有Scaler均不接受axis参数,默认按列计算,如要不想或不便转换,可以使用scale(axis=)函数进行缩放
heights = heights.reshape(-1,1)

std_scaled_heights = StandardScaler().fit_transform(heights)
print(f"std_scaled_heights (first 3 elements) = {std_scaled_heights[:3].tolist()}")
print(f"std_scaled_heights standard deviation = {std_scaled_heights.std()}")

ax4.hist(std_scaled_heights, bins=50)
ax4.set_title("StandardScaler")
ax4.annotate(f"σ = {std_scaled_heights.std()}", (0.5, 0.95), xycoords='axes fraction', va='center', ha='center')

plt.show()

输出数据:

1. 原始数据
heights (first 3 elements) = [182.6662109  166.47426032 186.51605772]
heights mean = 170.49296742346928
heights standard deviation = 24.957518297557534
--------------------------------------------------------------------------------------------------------------
2. 根据公式手动进行标准差归一化(标准化)
std_scaled_heights (first 3 elements) = [ 0.48775857 -0.1610219   0.64201457]
std_scaled_heights standard deviation = 1.0
--------------------------------------------------------------------------------------------------------------
3. 使用scale函数进行标准差归一化(标准化)
std_scaled_heights (first 3 elements) = [ 0.48775857 -0.1610219   0.64201457]
std_scaled_heights standard deviation = 1.0
--------------------------------------------------------------------------------------------------------------
4. 使用StandardScaler函数进行标准差归一化(标准化)
std_scaled_heights (first 3 elements) = [[0.48775857171297676], [-0.16102190351705692], [0.6420145667955481]]
std_scaled_heights standard deviation = 1.0

输出图表:

在这里插入图片描述

3. 解读

从输出的直方图可以看到:经过标准差归一化后,数据集被平移到了0点为中心的位置上,数据的方差从原来的24.96归置为1,数据分布(直方图形状)不变。关于标准差归一化提醒两个容易无解的地方:

  • 经标准差归一化处理后,数据集的总体标准差变为1,而不是所有数据都会被收缩到[-1,1]之间,上图即是一个证明
  • 标准差归一化处理不会改变数据分布,这一点很多文章的说法都是错误的,如果原来的数据就不符合正态分布,缩放后的数据依然不会符合(当然,严格的说均值和标准差改变的话,分布也会变,但是分布类型是不会被改变的,原来是什么类型,缩放后还是什么类型)

最后,提醒一下StandardScaler的使用方法:sklearn.preprocessing包内的Scaler类均不接受一维数组,在将一维数组传给Scaler前,需将其转置为(只有一列的)二维数组;此外,受上层Transformer接口的约束,所有Scaler均不接受axis参数,默认按列计算,如要不想或不便转换,可以使用对应函数进行按行缩放(此类场景并不常见),对应函数有axis参数。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32 (WIFI)-AP、STA模式(13)

提示:本博客作为学习笔记,有错误的地方希望指正 文章目录一、ESP32 WIFI模式概述二、ESP32 WIFI-AP初始化流程三、WIFI-AP示例四、ESP32 WIFI-STA初始化流程五、WIFI-STA示例一、ESP32 WIFI模式概述 参考资料:ESP IDF编程手册V4.4   WIFI主…

【GD32F427开发板试用】Systick系统定时器的使用

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:HonestQiao 基于Arm Cortex-M系列内核的MCU,都包含了SysTick定时器。 所谓SysTick即为系统定时器,又称嘀嗒定时器&am…

Docker Swarm

Swarm 是什么? Docker Swarm 是Docker官方的跨节点的容器编排工具。用户只需要在单一的管理节点上操作,即可管理集群下的所有节点和容器。 主要解决什么问题 1. 解决docker server的集群化管理和部署。 2. Swarm通过对Docker宿主机上添加的标签信息来…

分享60个PHP源码,总有一款适合您

PHP源码 分享60个PHP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 60个PHP源码下载链接:https://pan.baidu.com/s/1SvjbzolwuMrQyhVb_byG5Q?pwdx831 提取码&#xff…

生物素点击标记试剂:DBCO-SS-PEG3-biotin,1430408-09-5,生物素PEG3二硫键DBCO

1、理论分析:中文名:生物素-三聚乙二醇-二硫-二苯并环辛炔,生物素-PEG3-二硫-DBCO ,生物素PEG3-二硫二苯并环辛炔英文名:DBCO-S-S-PEG3-biotin,Biotin-PEG3-SS-DBCOCAS号:1430408-09-5化学式&am…

如何使用ArcGIS进行点抽稀

01 概述对于制图工作者而言,遇到大量的点要素(POI、村名等)标注的时候往往非常的麻烦,因为这些点往往都是十分的密集,直接标注很影响制图的美观。如果直接去处理原始的数据,会导致后续的数据更新维护麻烦&a…

pdf合并在线,大家都在用的工具

工作和生活当中都有很多场景需要我们提交PDF文档,而且有时候要求仅能提交一份,如果这时候刚好你的文档分成了几份,就得先合并之后才能提交。要在线合并PDF并不麻烦,关键是用对工具。下面就来给大家介绍几款热门的软件,…

Spring Boot(五十五):基于redis防止接口恶意刷新和暴力请求

下面的教程,通过intercept和redis针对urlip在一定时间内访问的次数来将ip禁用,可以根据自己的需求进行相应的修改,来达到自己的目的 下面只讲解大致步骤,不详细讲解,需要完整代码的可以自行下载。 https://download.c…

数据结构之查找详解

一、什么是查找表? 1.1 定义 查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。 1.2 查找表的几种操作: 1)在查找表中查找某个具体的数据元素; 2)在查找表中插入数据元素&am…

win10环境使用nvm安装多版本nodejs并配置环境变量

win10环境使用nvm安装多版本nodejs并配置环境变量nvm安装环境变量配置测试安装全局模块对于旧版本的node,手动安装npm最近使用node工程,需要多版本,并且进行切换,来回安装卸载不同版本的node比较麻烦,后面自己就简单捯…

MySQL 5.5版本的两个执行引擎

目录执行引擎引入MySQL执行引擎生成的文件MyIsamInnoDB聚簇索引与非聚簇索引稀疏索引回表覆盖索引执行引擎引入 我们真正的索引结构要去落地的时候呢,也就是MySQL底层BTree数据结构要去落地的话,那么一定要和我们的存储引擎相结合。接下来我们会说MySQL…

【游戏逆向】老飞飞怀恋魅力爱玩等老飞飞瞬移分析代码

【游戏逆向】老飞飞怀恋魅力爱玩等老飞飞瞬移分析代码 在游戏中,每个人物都有一个坐标。x坐标和y坐标。老飞飞也一样,可能有些朋友用ce找到当前的人物坐标。然后修改坐标就能达到瞬移到效果。不过有些老飞飞是无法实现的。只要瞬移就会掉客户端。今天就…

3>2,看看U.3升级了啥

关注企业级NVMe SSD的小伙伴对U.2接口一定不会感到陌生。然而,在U.2之外,还存在一种名为“U.3”的硬盘接口,二者外观完全相同,接口性能也都一样,甚至不少客户直接将U.3的NVMe SSD部署在U.2服务器上使用。但既然3&#…

分布式应用解决方案之一致性Hash

什么是一致性Hash 一致性Hash就是将整个hash值空间按照顺时针方向形成一个虚拟的环,整个环状结构就称之为Hash环。那为什么叫做一致性Hash环?一致性是由于Hash环应用场景一般在分布式应用服务中,各个服务提供者分布在hash环中,当某…

【Qt】一文总结新工程的创建

文章目录一、导读二、浅谈开发方式(2-1)C开发方式(2-2)QtQuick qml开发方式(2-3)python开发方式三、新工程创建向导下的Library四、其他项目五、其他工程项目六、Import Project选项七、总结一、导读 在使…

Linux-Find命令

目录 Find 命令格式: 常用查找条件 案例展示: Find find 命令根据预设的条件递归查找文件或目录所在位置 命令格式: 命令格式:find 查找路径 查找条件1 查找条件2 .. [-exec 处理命令 {} \; ] –exec 可接额外的命令来处理查…

【Kubernetes 企业项目实战】03、基于 Alertmanager 发送报警到多个接收方(下)

目录 一、promethues 采集 tomcat 监控数据 1.1 制作 tomcat 镜像 1.2 基于上面的镜像创建一个 tomcat 实例 1.3 采集数据 二、promethues 采集 redis 监控数据 2.1 配置一个 Redis 的 exporter 2.2 查看 Prometheus 2.3 grafana 导入模板 三、Prometheus 监控 mysql …

【微服务】Nacos 前端设计

目录 一、背景 二、选型 React 1、Vue vs React vs Angular 1.1、npm trends 2、GitHub Stats 3、根据自身情况选型 4、现状 5、小结 6、React/Vue ⽣态 三、方案 💖微服务实战 💖 Spring家族及微服务系列文章 一、背景 我们需要提供⼀个简单…

Xilinx关于Aurora IP核仿真和使用

平台:vivado2017.4芯片:xc7k325tfbg676-2 (active)关于Aurora的开发学习。使用xilinx官方提供的IP核。官方资料,pg046-aurora-8b10b.pdf和pg074-aurora-64b66b-en-us-12.0.pdf。IP核的生成步骤首先在IP Catalog中搜索Aurora IP核关于此IP有两…

SpringBoot指标监控

目录 一、SpringBoot Actuator 1、简介 2、1.x与2.x的不同 3、如何使用 二、Actuator Endpoint 1、最常使用的端点 2、Health Endpoint 3、Metrics Endpoint 4、管理Endpoints 1、开启与禁用Endpoints 2、暴露Endpoints 三、定制 Endpoint 1、定制 Health 信息 2…