使用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中扩展包的安装方法详解
Jun 14 Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 Python
Python3中函数参数传递方式实例详解
May 05 Python
Python实现打砖块小游戏代码实例
May 18 Python
Python flask框架post接口调用示例
Jul 03 Python
Python 用三行代码提取PDF表格数据
Oct 13 Python
python实现根据文件格式分类
Oct 31 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
利用Python的folium包绘制城市道路图的实现示例
Aug 24 Python
Numpy ndarray 多维数组对象的使用
Feb 10 Python
pytorch实现线性回归以及多元回归
Apr 11 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
php数据结构与算法(PHP描述) 查找与二分法查找
2012/06/21 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
微信access_token的获取开发示例
2015/04/16 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
javascript this用法小结
2008/12/19 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
python之import机制详解
2014/07/03 Python
python开发之str.format()用法实例分析
2016/02/22 Python
python线程、进程和协程详解
2016/07/19 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
美国在线工具商店:Acme Tools
2018/06/26 全球购物
企业优秀员工事迹材料
2014/05/28 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP