使用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系列之数据处理编程实例(一)
May 22 Python
Python中用format函数格式化字符串的用法
Apr 08 Python
Python使用QRCode模块生成二维码实例详解
Jun 14 Python
解决python大批量读写.doc文件的问题
May 08 Python
python list转矩阵的实例讲解
Aug 04 Python
Django如何自定义分页
Sep 25 Python
详解Python 正则表达式模块
Nov 05 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
python 3.6.7实现端口扫描器
Sep 04 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
Python post请求实现代码实例
Feb 28 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 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 不使用js实现页面跳转
2014/02/11 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
js实现列表按字母排序
2020/08/11 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
python异常和文件处理机制详解
2016/07/19 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
Python中pass的作用与使用教程
2020/11/13 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
给校长的建议书
2014/03/12 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
留学推荐信范文
2014/05/10 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
cf战队宣传语
2015/07/13 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers