使用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中if __name__ == "__main__"详细解释
Oct 21 Python
python实现的简单FTP上传下载文件实例
Jun 30 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
【python】matplotlib动态显示详解
Apr 11 Python
Python3之手动创建迭代器的实例代码
May 22 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
Jun 21 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
通过代码实例了解Python sys模块
Sep 14 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 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
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
新手入门常用代码集锦
2007/01/11 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
Python交换变量
2008/09/06 Python
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
python持久性管理pickle模块详细介绍
2015/02/18 Python
python僵尸进程产生的原因
2017/07/21 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
python获取代理IP的实例分享
2018/05/07 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
成品库仓管员岗位职责
2014/04/06 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
2015年体育教师个人工作总结
2015/05/12 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers