使用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 相关文章推荐
使用Python3制作TCP端口扫描器
Apr 17 Python
彻底理解Python list切片原理
Oct 27 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
python破解zip加密文件的方法
May 31 Python
python十进制和二进制的转换方法(含浮点数)
Jul 07 Python
python实现大转盘抽奖效果
Jan 22 Python
django自带调试服务器的使用详解
Aug 29 Python
Python模块future用法原理详解
Jan 20 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
Python flask框架如何显示图像到web页面
Jun 03 Python
Python flask框架端口失效解决方案
Jun 04 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 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扩展编写点滴 技巧收集
2010/03/09 PHP
PHP中::、->、self、$this几种操作符的区别介绍
2013/04/24 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
python二叉树的实现实例
2013/11/21 Python
Python的高级Git库 Gittle
2014/09/22 Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
Python实现登录接口的示例代码
2017/07/21 Python
详解python编译器和解释器的区别
2019/06/24 Python
python实现翻译word表格小程序
2020/02/27 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
Python日志器使用方法及原理解析
2020/09/27 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
青年创业培训欢迎词
2014/01/10 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
班主任寄语2016
2015/12/04 职场文书
2019入党申请书格式
2019/06/25 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
Python OpenCV超详细讲解基本功能
2022/04/02 Python