使用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编程模板汇总
Feb 12 Python
Python实现字典的遍历与排序功能示例
Dec 23 Python
python中的随机函数小结
Jan 27 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
python3.4实现邮件发送功能
May 28 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
Python切图九宫格的实现方法
Oct 10 Python
Django异步任务线程池实现原理
Dec 17 Python
pyqt5中动画的使用详解
Apr 01 Python
用python对excel进行操作(读,写,修改)
Dec 25 Python
python glom模块的使用简介
Apr 13 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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
Snoopy类使用小例子
2008/04/15 PHP
php SQL防注入代码集合
2008/04/25 PHP
php 应用程序安全防范技术研究
2009/09/25 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
linux下php上传文件注意事项
2016/06/11 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
python基础 range的用法解析
2019/08/23 Python
Python如何在DataFrame增加数值
2020/02/14 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
python怎么删除缓存文件
2020/07/19 Python
Python 实现集合Set的示例
2020/12/21 Python
python常量折叠基础知识点讲解
2021/02/28 Python
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
大学生英语演讲稿
2014/04/24 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
班级活动总结格式
2014/08/30 职场文书
诚信承诺书
2015/01/19 职场文书
党员带头倡议书
2015/04/29 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书