dataframe数据标准化处理_数据处理中的标准化、归一化究竟是什么?

关注上方“Python数据科学”,选择星标,

精彩文章不会错过!

ea71063108a8682eeabe023ddf9fee57.png

今天说一个比较重要的内容,无论是在算法建模还是在数据分析都比较常见:数据归一化和标准化。

开始之前,请你先把网上看到的所有相关的博客、帖子都忘掉。不说全部,能讲清楚这个概念的文章真寥寥无几,首先是中英文名称翻译的问题,其次是概念理解的不全面,也就造成了网上的说法不一,看了之后各种被误导。

当然,如果你在阅读文章的时候,发现存在问题欢迎留言批评指正

但是我觉得你可能没有批评指正的机会581d00b28891bc04e6706b88168aa048.png

先来说下概念

数据归一化和标准化都属于数据特征无量纲的一种方式。无量纲指的是将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,称之为数据“无量纲化”。

在模型训练过程中,经过无量纲化之后的数据特征对于模型的求解有加速作用,特别是对于需要计算梯度和矩阵的模型(例如逻辑回归中通过梯度下降求解损失函数)。

另外,在k近邻、聚类等算法中需要计算距离,使用无量纲化可以提升模型精度,避免异常值对整体的计算造成影响,这个在后面会细说。

数据的无量纲化可以是线性的,也可以是非线性的。非线性的无量纲不太常用,例如百分位数转换、应用特征功率转换等,基本很少用到;而常用的线性无量纲化主要包括 中心化处理和缩放处理,在特征工程中比较常见。

中心化的本质是 让所有记录减去一个固定值,即让数据样本平移到某个位置

缩放的本质是 通过除以一个固定值,将数据固定在某个范围之中

下面来细说

数据归一化

重要!! 数据归一化的英文翻译有两种:Normalization 和 Min-Max Scaling

数据归一化是当数据 x 按照最小值中心化后再按极差(最大值-最小值)进行缩放。最终的数据移动了最小值个单位,并且会被收敛到 [0,1] 之间。

归一化的公式如下:

这里一定要注意的是:Normalization 是归一化的意思,并不是正则化,而正则化的英文翻译应该是:Regularization,但是正则化并不是数据处理的一种手段。

代码实现

常用的特征无量纲化方法都已经在 sklearn 中实现,可以直接调用,一般都是在基于 sklearn 下的 preprocessing 模块。

归一化的实现可以调用 MinMaxScaler 函数,当然你也可以自己实现,公式也都在上面列出来了。

MinMaxScaler 有一个重要参数:feature_range,默认值 [0,1] 表示将数据收敛到 [0,1] 之间。

MinMaxScaler 可以手动设置,但是一般情况都是选择默认值

具体的,进行特征归一化的代码实现如下:

import numpy as np
from sklearn.preprocessing import MinMaxScaler

# 创建数组
data_rn = np.random.randint(-10, 10, 10).reshape(5, 2)
print(data_rn)
# 进行标准归一化
scaler_mms = MinMaxScaler()
result_mms = scaler_mms.fit_transform(data_rn)
print(result_mms)
# 手动设置收敛区间[1,3]
scaler_mms_parm = MinMaxScaler(feature_range=(1, 3))
result_mms_parm = scaler_mms_parm.fit_transform(data_rn)
print(result_mms_parm)

"""输出"""
[[-10   7]
 [  1   9]
 [ -3  -5]
 [ -9  -6]
 [ -8   5]]

[[0.         0.86666667]
 [1.         1.        ]
 [0.63636364 0.06666667]
 [0.09090909 0.        ]
 [0.18181818 0.73333333]]

[[1.         2.73333333]
 [3.         3.        ]
 [2.27272727 1.13333333]
 [1.18181818 1.        ]
 [1.36363636 2.46666667]]

可以看到,手动设置的收敛范围其实就是在 [0,1] 的基础上进行了相应的平移和缩放。

就比如上面手动设置的 [1,3] 就是在 [0,1] 的基础上先缩放 2 变成 [0,2] 再平移 1 变成 [1,3]。

所以,要想归一化的结果收敛至任意一组值 [a,b] 之间,则归一化的公式变成:

对应的,在 MinMaxScaler 函数调用中只需要设置 feature_range 的取值为 (a,b) 即可。

数据标准化

数据标准化的英文翻译:Standardization,又称 Z-score normalization。

数据标准化是指当数据 x 按均值 μ 中心化后,再按标准差 σ 缩放,数据就会服从均值为 0,方差为 1 的标准正态分布,这个过程就叫做数据标准化。

数据标准化的公式如下:

有一点需要注意:标准化并不会改变数据的分布。之所以会说标准化之后数据变成标准正态分布,是因为原始的数据就是符合正态分布的,只不过并不是标准正态分布。

另外大家会把标准化和正态分布联系起来,是因为实际中大多数数据都是正态分布的,或者近似正态分布。所以在标准化之后数据就会变成标准正态分布。

不是说原本未知分布在标准化之后就可以凭空变成正态分布的。

代码实现

具体的,进行特征标准化的代码实现如下:

import numpy as np
from sklearn.preprocessing import StandardScaler

# 创建数组
data_rn = np.random.randint(-10, 10, 10).reshape(5, 2)
# 进行标准化
print(data_rn)
scaler_ss = StandardScaler()
result_ss = scaler_ss.fit_transform(data_rn)
print(result_ss)

"""输出"""
[[-10   7]
 [  1   9]
 [ -3  -5]
 [ -9  -6]
 [ -8   5]]

[[-1.00803226  0.79859571]
 [ 1.63205223  1.11803399]
 [ 0.67202151 -1.11803399]
 [-0.76802458 -1.27775313]
 [-0.5280169   0.47915742]]

另外,也可以通过 inverse_transform 函数将标准化后的数据进行逆转

# 标准化后的数据逆转
data_inverse = scaler_ss.inverse_transform(result_ss)

对于 StandardScaler 和 MinMaxScaler 来说,空值 NAN 会被当作是缺失值,在 fit_transform 的时候继续保持缺失状态。

标准化和归一化的区别与联系?

首先,需要明确很重要的一点:归一化和标准化都不会改变数据的分布。

它们都是对于数据的线性无量纲化,通过相应的缩放和平移使得数据发生改变的过程,但是并没有改变原始数据的排列顺序。

其中归一化 Normalization 会严格的限定数据变化后的范围,默认的是将数据控制在 [0,1] 之间。

而标准化 Standardization 之后的数据没有严格的区间,变化之后的数据没有范围,只是数据整体的均值为 0,标准差为 1

另外,归一化缩放的比例仅仅和极值有关,而标准化缩放的比例和整体数据集有关。所以对于存在异常数据的样本来说,用归一化并不是一个聪明的决定

比如有一批样本取值是 0~10,突然加入异常值 99 再进行归一化之后,正确样本的数值将会变得很小,这个时候,使用标准化的效果会优于归一化。

数据处理的时候选哪个?

只能说,针对情况选择。

在大多数机器学习算法中,因为 MinMaxScaler 对异常值的敏感,所以都会选择 StandardScaler 进行特征缩放。例如聚类、逻辑回归、支持向量机、PCA 等算法。

但是如果在缩放的时候不涉及距离、梯度等的计算,并且对数据的范围有严格要求,就可以使用归一化进行缩放。

并不是所有模型的数据都需要标准化和归一化的。

类似决策树模型,在节点分裂的时候计算的是信息增益,标准化后并不能大幅提高模型的计算速度【可能会有很小的提升】

类似概率模型,并不关心变量的值,只关心变量的分布和变量之间的条件概率。

综上,一般在特征无量纲化的时候,如果没有硬性规定【缩放范围、距离计算等】,可以先使用标准化,效果不好再试试归一化。

a6d61d73290f8bb08629ff69df3765b7.gif

我是东哥,最后给大家分享《100本Python电子书》,包括Python编程技巧、数据分析、爬虫、Web开发、机器学习、深度学习。

现在免费分享出来,有需要的读者可以下载学习,在下面的公众号GitHuboy」里回复关键字:Python,就行。

f3d39e57f5d68a8d1452d1d16b2264e9.png

推荐阅读

像Excel一样使用SQL进行数据分析吹爆了这个可视化神器,上手后直接开大~再见,360安全卫士!别去送死了!Selenium 能被网站探测的几十个特征Pandas用了一年,这3个函数是我最爱…逻辑回归 + GBDT模型融合实战!
爱点赞的人运气都不会太差

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

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

相关文章

java输出不同颜色_Java设计模式-策略模式、状态模式

推荐阅读:一只Tom猫:都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”!java喵:6大面试技能树:JAVA基础JVM算法数据库计算机网络操作系统前言当代码中出现多重if-else语句或者switch语…

abap 添加alv上的工具栏的按钮_神器必会!“世界上最好的编辑器Source Insight”...

前言“Source Insight(以下简称SI)是世界上最好的编辑器”,说这句话不知道会不会出门被打呢?-_- 中国古话说得好,“文无第一,武无第二”,所以不敢说SI是最好的,但是说是“最好的之一”绝对是妥妥的。它以丰…

同一个容器实例可以同时运行在多个宿主机_从零开始学K8s: 3.什么是容器

Kubernetes使用Linux容器技术来实现应用的隔离。因此在深入学习k8s之前,我们需要先学习容器的基础知识以便更好地去理解k8s的原理机制。揭开容器的神秘面纱当一个应用只由较少数量的大组件构成时,完全可以给每个组件分配一个专用的虚拟机,以及…

SpringBoot集成RabbitMq消息队列【附源码】

1. 项目背景 要啥项目背景,就是干!!! SpringBoot版本:2.7.12 2. Rabbit MQ安装 这里讲解使用docker安装RabbitMQ,如果在windows下面安装RabbitMQ,参考下文 【笑小枫的按步照搬系列】Window…

【云栖直播】精彩推荐第3期:个性化推荐系统搭建实践

热门推荐 (1)即将直播持续集成与交付:分层自动化之UI自动化体系建设直播简介:本系列直播由阿里旗下一站式研发提效平台云效策划推出,主要为大家详细介绍阿里巴巴在持续集成和持续交付的最佳实践。 直播讲师&#xff1a…

ensp路由器无法启动_品胜云路由器Breed刷入详细教程,技巧和注意事项,功能大增...

前面发文,介绍过品胜净音云路由器WFR101N功能,硬件配置参数,高清拆解图。主要硬件参数:闪存型号是W25Q128FVSG,容量大小是16M;内存是华邦的W9751G6KB-25,DDR2 SDRAM内存,大小64M&…

wps计算机打印双面输出,在wps中双面打印的方法步骤详解

我们在打印word文档的时候往往都会使用到双面打印,那么今天小编教你怎么在wps中双面打印。希望对你有帮助!WPS双面打印的步骤首先点击wps上的文字选项。找到打印按钮。点击打开之后,会跳出这样一个页面。PS双面打印的步骤图1页面内&#xff0…

判断五个分数等级划分_压力表精度等级怎么算?压力表精度等级划分及检验项目...

压力表是一种典型的轴向精密压力表,是用来测量介质压力的仪表,在工业生产也是常用的仪表,对生产起到了非常重要的作用,压力表的所显示压力的精度,就成了我们非常重要的一个参数。今天小编就来为大家说说压力表精度等级…

cad安装日志文件发生错误_苹果电脑Mac os系统重装时出现“准备安装时发生错误”解决方案...

题外话:自己是个电脑小白,因为自己的MacBook Air 不那么流畅了,就按照其他知乎大佬们说的步骤进行重装电脑。(2017款 MacBook Air 以下就用Air代替) 自己先把电脑重新启动,按照步骤按住commandR&#xff0c…

sass使用相关报错

1. 移动端一像素边框的缩放,我创建了三个文件:mixin.scss , base.scss,index.scss 在index.scss里面引入全局样式文件, 在base.scss文件中编写 根据媒体查询设置不同的缩放比例,报错如下: media…

client netty 主动发数据_netty案例,netty4.1基础入门篇十一《netty udp通信方式案例Demo》...

小傅哥 | https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获。专注于原创专题案例编写,目前已完成的专题有;Netty4.x实战专题案例、用Java实现JVM、基于JavaAgent的全链路监控、手写RPC框架、架构设计专题案例、源码分析等。你…

php-对银行卡号做掩码处理

1.实现代码如下/*** 对银行卡号进行掩码处理* param string $bankCardNo 银行卡号* return string 掩码后的银行卡号*/function formatBankCardNo($bankCardNo){//截取银行卡号前4位$prefix substr($bankCardNo,0,4);//截取银行卡号后4位$suffix substr($bankCa…

echarts 柱状图不显示y坐标轴_Python+matplotlib自定义坐标轴位置、颜色、箭头

图书推荐:《Python程序设计基础与应用》(ISBN:9787111606178),董付国,机械工业出版社图书详情:用书教师可以联系董老师获取教学大纲、课件、源码、教案、考试系统等配套教学资源。使用Pythonnumpymatplotlib这样的组合…

css3浏览,css3支持哪些浏览器?

CSS3 带来众多全新的设计体验,但有一个问题值得考虑:浏览器对 CSS3 特性的兼容情况如何?因为页面最终离不开用浏览器来渲染,并不是所有浏览器都完全支持 CSS3 的特性。有时花时间写的效果只能在特定的浏览器下有效,这意…

移动游戏加载性能和内存管理全解析 学习

https://v.qq.com/iframe/player.html?vido0512etq2vm&tiny0&auto0 转载于:https://www.cnblogs.com/revoid/p/7039232.html

++代码实现 模糊综合算法_干货 | 十大经典排序算法最强总结(内含代码实现)...

一、算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序&#…

如何恢复osd的auth表中的权限

2019独角兽企业重金招聘Python工程师标准>>> 原因:当你一不小心删掉了osd的auth信息时,重启osd服务,此时ceph -s查看发现osd down 如: [rootceph ~]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIM…

PS打开PSD文档服务器未响应,ps打不开psd文件的解决方法

很多人用ps做作品的时候,经常遇到psd文件打不开的问题,最常见的有三种原因,有两种可以设置解决,另一种是文件损坏,不可恢复。下面是学习小编给大家整理的有关介绍ps打不开psd文件的解决方法,希望对大家有帮…

ajax实现两个aspx跳转,请问ajax执行成功后可以跳转到另一个页面吗?

一只名叫tom的猫通过ajax读取到写好的jsp,另一个jsp可以放framse或者层都可以,显示就行了123456789$.ajax({ type: "POST", //用post方式传输 dataType: "html", //数据格式:json…

Android横竖屏切换View设置不同尺寸或等比例缩放的自定义View的onMeasure解决方案(2)...

Android横竖屏切换View设置不同尺寸或等比例缩放的自定义View的onMeasure解决方案(2)附录文章1以xml布局文件方式实现了一个view在横竖屏切换时候的大小尺寸缩放,实现这种需求,也可以使用自定义View的onMeasure方法实现。比如&…