【Deep Learning】数据预处理(z-score标准化)
z-score 标准化
z-score 标准化(zero-mean normalization):将数据按期属性(按列进行)减去其均值,并除以其标准差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1,其公式:
其中 x ˉ \bar{x} xˉ 为 原 始 数 据 的 均 值 \color{#FF0000}{为原始数据的均值} 为原始数据的均值, σ 为 原 始 数 据 的 标 准 差 \color{#FF0000}{为原始数据的标准差} 为原始数据的标准差,是当前用得最多的数据标准化方式。标准差分数可以回答这样一个问题:"给定数据距离其均值多少个标准差"的问题,在均值之上的数据会得到一个正的标准化分数,反之会得到一个负的标准化分数。经过处理的数据符合标准正态分布。
附标准差公式
代码实现
import numpy as np
from sklearn import preprocessing
X = np.array([[1., -1., 2.], #创建一个原始数据:3x3[2., 0., 0.],[0., 1., -1.]])
scaler = preprocessing.StandardScaler().fit(X)
print(scaler.mean_) # 计算每一列的均值
print(scaler.var_) # 计算每一列的方差
newX = scaler.transform(X) # 将特征值减去均值,除以标准差。
print(newX)
其中:scaler = preprocessing.StandardScaler().fit(X)
scaler对象中保存了训练集中的参数(均值、方差),它直接使用其对象转换测试集数据。
这里,打印scaler对象中保存的均值,如下图。其中[1. 0. 0.33333333]是每一列的均值,1是原数据中第一列1,2,0三个数的均值,0是第二列-1,0,1三个数的均值,0.333333是第三列2,0,-1三个数的均值。
再打印scaler对象中保存的方差,如下图。其中[0.66666667 0.66666667 1.55555556]
是每一列的方差。其实这里的三个方差被约等于化了,原始的方差为[2/3,2/3,14/9]
利用上两步求出的均值和标准差就可以进行最后的操作:
newX = scaler.transform(X)
特征值(原始值)减去均值,除以标准差 ,最后我们再打印newX:
不相信代码计算出来的结果???好,那我手动计算一下!
最后一行的计算出的结果和代码一致!从上面图片结果可以看到,生成的新的数据每列数据均值都聚集在0附近,方差为1。
z-score 标准化意义
z分数能够真实的反应一个分数距离平均数的相对标准距离。如果我们把每一个分数都转换成z分数,那么每一个z分数会以标准差为单位表示一个具体分数到平均数的距离或离差。将成正态分布的数据中的原始分数转换为z分数,我们就可以通过查阅z分数在正态曲线下面积的表格来得知平均数与z分数之间的面积,进而得知原始分数在数据集合中的百分等级。一个数列的各z分数的平方和等于该数列数据的个数,并且z分数的标准差和方差都为1.平均数为0.
听 不 懂 ? 再 简 单 点 说 吧 ! \color{#FF0000}{听不懂?再简单点说吧!} 听不懂?再简单点说吧!Z-Score的主要目的就是将不同量级的数据统一转化为同一个量级,统一用计算出的Z-Score值衡量,以保证数据之间的可比性。z-score值只是一个临界值,它是标准化的结果,本身没有意义,只能用于比较。注意,一般来说z-score不是归一化,而是标准化,归一化只是标准化的一种。
听 完 以 后 还 是 感 觉 懵 懵 哒 ? \color{#FF0000}{听完以后还是感觉懵懵哒?} 听完以后还是感觉懵懵哒?再具体来说吧!在使用深度学习方法,如CNN对图像做分类时,会经常对图像做标准化预处理操作。
首先我们来看这样一张图:
大家看上面两只猪,对于人来说,它就是两只一样的猪,只是图片的灰度或者曝光度不一样罢了,于是我们都给它们都标注为社会人,咋一看,好像没毛病。但是,虽然我们人眼看没毛病,可是机器看的方式和我们不一样,他们看的是对应图片的像素值。由于曝光的,灰度等各种原因,他们像素值其实不一样,那么经过卷积层后,他们的特征很可能不一样。于是神经网络就尴尬了,特征都不一样,为啥标签都一样呢?这样,迷惑的神经网络就不知道怎么对权值进行训练了。
所以,在对图像进行标准化之前:
- 对于人来说,同一样的事物,一样的标签。
- 但是对于机器来说,像素值大小不同,可能是两张完全不同的图片,最后经过卷积层,又可能是不同的特征,但却是同样的标签,进而影响神经网络的权值更新。
标准化以后:
两张图片的像素值就被映射成符合正太分布,均值为0,标准差为1的数值分布:
- 这就相当于把不同的图片映射到同一个坐标系,具有相同的尺度;
- 因此上述情况就由像素值大小不同的问题转为具有相似的特征分布的问题;
- 一定程度上消除了因为过度曝光,质量不佳或者噪声各种原因对模型权重值更新的影像。
还有一种情况:
标准化以后:
图像中的RGB分量就被映射成符合正太分布,均值为0,标准差为1的数值分布:
- 相当于把不同的分量映射到同一个坐标系。具有相同的尺度;
- 上述情况就由过大像素值分量主导权值更新的问题转为RGB分量都具有相同的数值分布的问题;
- 一定程度上消除了梯度更新的收敛慢,无序等问题 。
当然,上面仅举了两个例子,还有很多情况需要进行标准化才能解决,标准化常用的是Z-Score, 记住,这是要减去自己数据的均值和除以自己的标准差(不是方差)!
参考链接:
https://blog.csdn.net/Orange_Spotty_Cat/article/details/80312154
https://www.cnblogs.com/sddai/p/8495365.html
https://blog.csdn.net/GoodShot/article/details/80373372
代码参考链接:
https://www.cnblogs.com/chaosimple/p/4153167.html
部分内容摘自知乎链接:
https://zhuanlan.zhihu.com/p/35597976
【Deep Learning】数据预处理(z-score标准化)相关推荐
- 机器学习之数据预处理——归一化,标准化
机器学习之数据预处理--归一化,标准化 基础知识 1.什么是特征预处理 2.预处理方法 : 3.预处理API: 数据的标准化(normalization)和归一化 数据的标准化 数据归一化 1 把数变 ...
- 数据预处理之归一化/标准化/正则化/零均值化
数据预处理之归一化/标准化/正则化/零均值化 一.标准化(Standardization) 二.归一化(Normalization) 三,中心化/零均值化 (Zero-centered) 四.正则化 ...
- sklearn 中的数据预处理函数,标准化
sklearn 是 python 中一个常用的机器学习与统计分析包,功能十分强大,既能做普通的统计分析,也可以做一些常用的机器学习算法. 在分析数据前,一般要对数据进行预处理,常用的数据预处理函数有: ...
- 数据预处理方式:标准化/正态分布/zscore/scale/
一.数据预处理 在实际数据分析工作中,我们会得到各种各样的数据,例如:存在缺失值,存在重复值,数据量纲单位不同等,这就要求我们在使用之前对数据进行预处理,一般为针对不同生物学特征和数据集数据的不同而选 ...
- matlab数据无量纲化_MATLAB数据预处理——归一化和标准化
输入/输出数据的预处理 尺度变换 尺度变换也称归一化或标准化,是指通过变换处理将网络的输入/输出数据限制在[0,1]或[-1,1]区间内.进行尺度变换的原因有: (1)网络的各个输入数据常常具有不同的 ...
- 数据标准化处理方法_机器学习系列-数据预处理-数据标准化(归一化)-理论
在做一个具体的机器学习项目中,拿到收集到的数据后,一般都是需要做数据预处理,而标准化(暂时不考虑标准化和归一化的主要区别)是数据预处理中一个比较重要的环节,那么为什么需要对数据进行标准化处理呢? 数据 ...
- 机器学习之为什么要数据预处理?如何预处理数据?
在现实生活问题中,我们得到的原始数据往往非常混乱.不全面,机器学习模型往往无法从中有效识别并提取信息.数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已,在采集完数据后,机器学习建模的首 ...
- Python数据预处理数据的方法总结(使用sklearn-preprocessing)
文章目录 数据预处理思路 数据预处理方法 1 标准化:去均值,方差规模化 2 规模化稀疏数据 3 规模化有异常值的数据 4 正则化Normalization 5 二值化–特征的二值化 6 类别特征编码 ...
- 泰坦尼克号python数据预处理_sklearn preprocessing 数据预处理(OneHotEncoder)
1. one hot encoder one hot encoder 不仅对 label 可以进行编码,还可对 categorical feature 进行编码: >>> from ...
- Deep Learning × ECG (3) :心律失常ECG数据的预处理
一般利用深度学习来处理数据,主要包括: 数据准备 数据预处理 搭建模型 模型训练 本篇主要介绍 心律失常数据(ECG) 的预处理过程. ECG的预处理过程包括:降噪.截取心拍.存放心拍和标签. 文章目 ...
最新文章
- 安全专家:恶意软件盯上苹果Mac机用户
- 中国大陆SCIE收录期刊分析:多少本刊?发文多少?解决了多大内卷?
- bzoj 2160: 拉拉队排练
- Java与WCF交互(一):Java客户端调用WCF服务
- python中 .sort()、 sorted()和 .reverse() 、reversed()的区别
- deque双向队列的使用
- 电脑版企业微信_企业微信教育版功能更新啦!
- FP error code老是忘记的看这里:只给出最常用的几个。
- SLAM数据集(1)
- android中的mvp模式怎么定义,详解MVP模式在Android开发中的应用
- mysql常用命令添加外键主键约束存储过程索引
- 关于Tapestry5中的配置项的说明
- 程序设计框架图和框架加载流程
- 亲戚关系关系算法java程序_亲戚关系计算器 算法实现
- 对于makefile不支持c++11的处理
- 使用java将word文档docx,doc(包含图形,文本框)完美转换成所有格式图片(pdf,png,gif,jpeg等等)
- 王牌战争文明重启服务器维修中,王牌战争:文明重启在哪下,为什么王牌战争:文明重启进不去...
- Python校实训第一天----分支语句之星座查询
- 元认知是认知的监督体系
- java 代码生成nc 格式的文件,并且读取出nc格式里面的数据(已提供代码)