使用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使用正则搜索字符串或文件中的浮点数代码实例
Jul 11 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
Python3中类、模块、错误与异常、文件的简易教程
Nov 20 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
对tensorflow 的模型保存和调用实例讲解
Jul 28 Python
Django中使用Celery的教程详解
Aug 24 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
python 循环数据赋值实例
Dec 02 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
js left,right,mid函数
2008/06/10 Javascript
javascript Object与Function使用
2010/01/11 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
Jquery的Ajax技术使用方法
2019/01/21 jQuery
vue-test-utils初使用详解
2019/05/23 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
用python 制作图片转pdf工具
2015/01/30 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
迷你西餐厅创业计划书范文
2013/12/31 职场文书
不假外出检讨书
2014/01/27 职场文书
员工安全承诺书
2014/05/22 职场文书
司考复习计划
2015/01/19 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python