使用sklearn进行对数据标准化、归一化以及将数据还原的方法


Posted in Python onJuly 11, 2018

在对模型训练时,为了让模型尽快收敛,一件常做的事情就是对数据进行预处理。

这里通过使用sklearn.preprocess模块进行处理。

一、标准化和归一化的区别

归一化其实就是标准化的一种方式,只不过归一化是将数据映射到了[0,1]这个区间中。

标准化则是将数据按照比例缩放,使之放到一个特定区间中。标准化后的数据的均值=0,标准差=1,因而标准化的数据可正可负。

二、使用sklearn进行标准化和标准化还原

原理:

使用sklearn进行对数据标准化、归一化以及将数据还原的方法

即先求出全部数据的均值和方差,再进行计算。

最后的结果均值为0,方差是1,从公式就可以看出。

但是当原始数据并不符合高斯分布的话,标准化后的数据效果并不好。

导入模块

from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from matplotlib import gridspec
import numpy as np
import matplotlib.pyplot as plt

通过生成随机点可以对比出标准化前后的数据分布形状并没有发生变化,只是尺度上缩小了。

cps = np.random.random_integers(0, 100, (100, 2))
 
ss = StandardScaler()
std_cps = ss.fit_transform(cps)
 
gs = gridspec.GridSpec(5,5)
fig = plt.figure()
ax1 = fig.add_subplot(gs[0:2, 1:4])
ax2 = fig.add_subplot(gs[3:5, 1:4])
 
ax1.scatter(cps[:, 0], cps[:, 1])
ax2.scatter(std_cps[:, 0], std_cps[:, 1])
 
plt.show()

使用sklearn进行对数据标准化、归一化以及将数据还原的方法

sklearn.preprocess.StandardScaler的使用:

先是创建对象,然后调用fit_transform()方法,需要传入一个如下格式的参数作为训练集。

X : numpy array of shape [n_samples,n_features]Training set.
data = np.random.uniform(0, 100, 10)[:, np.newaxis]
ss = StandardScaler()
std_data = ss.fit_transform(data)
origin_data = ss.inverse_transform(std_data)
print('data is ',data)
print('after standard ',std_data)
print('after inverse ',origin_data)
print('after standard mean and std is ',np.mean(std_data), np.std(std_data))

通过invers_tainsform()方法就可以得到原来的数据。

打印结果如下:

可以看到生成的数据的标准差是1,均值接近0。

data is [[15.72836992]
 [62.0709697 ]
 [94.85738359]
 [98.37108557]
 [ 0.16131774]
 [23.85445883]
 [26.40359246]
 [95.68204855]
 [77.69245742]
 [62.4002485 ]]
after standard [[-1.15085842]
 [ 0.18269178]
 [ 1.12615048]
 [ 1.22726043]
 [-1.59881442]
 [-0.91702287]
 [-0.84366924]
 [ 1.14988096]
 [ 0.63221421]
 [ 0.19216708]]
after inverse [[15.72836992]
 [62.0709697 ]
 [94.85738359]
 [98.37108557]
 [ 0.16131774]
 [23.85445883]
 [26.40359246]
 [95.68204855]
 [77.69245742]
 [62.4002485 ]]
after standard mean and std is -1.8041124150158794e-16 1.0

三、使用sklearn进行数据的归一化和归一化还原

原理:

使用sklearn进行对数据标准化、归一化以及将数据还原的方法

从上式可以看出归一化的结果跟数据的最大值最小值有关。

使用时类似上面的标准化

data = np.random.uniform(0, 100, 10)[:, np.newaxis]
mm = MinMaxScaler()
mm_data = mm.fit_transform(data)
origin_data = mm.inverse_transform(mm_data)
print('data is ',data)
print('after Min Max ',mm_data)
print('origin data is ',origin_data)

结果:

G:\Anaconda\python.exe G:/python/DRL/DRL_test/DRL_ALL/Grammar.py
data is [[12.19502214]
 [86.49880021]
 [53.10501326]
 [82.30089405]
 [44.46306969]
 [14.51448347]
 [54.59806596]
 [87.87501465]
 [64.35007178]
 [ 4.96199642]]
after Min Max [[0.08723631]
 [0.98340171]
 [0.58064485]
 [0.93277147]
 [0.47641582]
 [0.11521094]
 [0.59865231]
 [1.  ]
 [0.71626961]
 [0.  ]]
origin data is [[12.19502214]
 [86.49880021]
 [53.10501326]
 [82.30089405]
 [44.46306969]
 [14.51448347]
 [54.59806596]
 [87.87501465]
 [64.35007178]
 [ 4.96199642]]
 
Process finished with exit code 0

其他标准化的方法:

上面的标准化和归一化都有一个缺点就是每当来一个新的数据的时候就要重新计算所有的点。

因而当数据是动态的时候可以使用下面的几种计算方法:

1、arctan反正切函数标准化:

使用sklearn进行对数据标准化、归一化以及将数据还原的方法

2、ln函数标准化

使用sklearn进行对数据标准化、归一化以及将数据还原的方法

以上这篇使用sklearn进行对数据标准化、归一化以及将数据还原的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python求crc32值的方法
Oct 05 Python
Python爬虫模拟登录带验证码网站
Jan 22 Python
Python单链表简单实现代码
Apr 27 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
Feb 05 Python
手把手教你使用TensorFlow2实现RNN
Jul 15 Python
 Python 中 logging 模块使用详情
Mar 03 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 #Python
Python实现识别图片内容的方法分析
Jul 11 #Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 #Python
python对离散变量的one-hot编码方法
Jul 11 #Python
Python基于多线程操作数据库相关问题分析
Jul 11 #Python
pandas 按照特定顺序输出的实现代码
Jul 10 #Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 #Python
You might like
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
php db类库进行数据库操作
2009/03/19 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
Node.js事件驱动
2015/06/18 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
python批量提交沙箱问题实例
2014/10/08 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
法务专员岗位职责
2014/01/02 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python