使用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中的相对导入和绝对导入
Jan 06 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
django 外键model的互相读取方法
Dec 15 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
Python3实现的简单工资管理系统示例
Mar 12 Python
python字典改变value值方法总结
Jun 21 Python
快速解决jupyter启动卡死的问题
Apr 10 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
基于Python pyecharts实现多种图例代码解析
Aug 10 Python
python3中编码获取网页的实例方法
Nov 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
yii框架源码分析之创建controller代码
2011/06/28 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
浅谈HTTP 缓存的那些事儿
2018/10/17 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
python魔法方法-自定义序列详解
2016/07/21 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
python中open函数的基本用法示例
2019/09/07 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
2015新学期校长寄语(3篇)
2015/03/25 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python