python归一化sklearn_用sklearn进行对数据标准化、归一化以及将数据还原详解
如何用sklearn進行對數(shù)據(jù)標準化、歸一化以及將數(shù)據(jù)還原
在對模型訓(xùn)練時,為了讓模型盡快收斂,一件常做的事情就是對數(shù)據(jù)進行預(yù)處理。
這里通過使用sklearn.preprocess模塊進行處理。
一、標準化和歸一化的區(qū)別
歸一化其實就是標準化的一種方式,只不過歸一化是將數(shù)據(jù)映射到了[0,1]這個區(qū)間中。
標準化則是將數(shù)據(jù)按照比例縮放,使之放到一個特定區(qū)間中。標準化后的數(shù)據(jù)的均值=0,標準差=1,因而標準化的數(shù)據(jù)可正可負。
二、使用sklearn進行標準化和標準化還原
原理:
即先求出全部數(shù)據(jù)的均值和方差,再進行計算。
最后的結(jié)果均值為0,方差是1,從公式就可以看出。
但是當原始數(shù)據(jù)并不符合高斯分布的話,標準化后的數(shù)據(jù)效果并不好。
導(dǎo)入模塊
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from matplotlib import gridspec
import numpy as np
import matplotlib.pyplot as plt
通過生成隨機點可以對比出標準化前后的數(shù)據(jù)分布形狀并沒有發(fā)生變化,只是尺度上縮小了。
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.preprocess.StandardScaler的使用:
先是創(chuàng)建對象,然后調(diào)用fit_transform()方法,需要傳入一個如下格式的參數(shù)作為訓(xùn)練集。
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()方法就可以得到原來的數(shù)據(jù)。
打印結(jié)果如下:
可以看到生成的數(shù)據(jù)的標準差是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進行數(shù)據(jù)的歸一化和歸一化還原
原理:
從上式可以看出歸一化的結(jié)果跟數(shù)據(jù)的最大值最小值有關(guān)。
使用時類似上面的標準化
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)
結(jié)果:
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
其他標準化的方法:
上面的標準化和歸一化都有一個缺點就是每當來一個新的數(shù)據(jù)的時候就要重新計算所有的點。
因而當數(shù)據(jù)是動態(tài)的時候可以使用下面的幾種計算方法:
1、arctan反正切函數(shù)標準化:
2、ln函數(shù)標準化
以上這篇使用sklearn進行對數(shù)據(jù)標準化、歸一化以及將數(shù)據(jù)還原的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持碼農(nóng)之家。
以上就是本次給大家分享的關(guān)于java的全部知識點內(nèi)容總結(jié),大家還可以在下方相關(guān)文章里找到相關(guān)文章進一步學(xué)習(xí),感謝大家的閱讀和支持。
總結(jié)
以上是生活随笔為你收集整理的python归一化sklearn_用sklearn进行对数据标准化、归一化以及将数据还原详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 男宝霸气外号-男宝外号大全2020-男宝
- 下一篇: 云电脑真的能取代传统电脑吗云电脑会取代传