sklearn進(jìn)行對(duì)數(shù)據(jù)標(biāo)準(zhǔn)化、歸一化以及將數(shù)據(jù)還原的方法

的方法

標(biāo)準(zhǔn)化和歸一化的區(qū)別

歸一化其實(shí)就是標(biāo)準(zhǔn)化的一種方式,只不過歸一化是將數(shù)據(jù)映射到了[0,1]這個(gè)區(qū)間中。
標(biāo)準(zhǔn)化則是將數(shù)據(jù)按照比例縮放,使之放到一個(gè)特定區(qū)間中。標(biāo)準(zhǔn)化后的數(shù)據(jù)的均值=0,標(biāo)準(zhǔn)差=1,因而標(biāo)準(zhǔn)化的數(shù)據(jù)可正可負(fù)。

使用sklearn進(jìn)行標(biāo)準(zhǔn)化和標(biāo)準(zhǔn)化還原

原理:


即先求出全部數(shù)據(jù)的均值和方差,再進(jìn)行計(jì)算。

最后的結(jié)果均值為0,方差是1,從公式就可以看出。

但是當(dāng)原始數(shù)據(jù)并不符合高斯分布的話,標(biāo)準(zhǔn)化后的數(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

通過生成隨機(jī)點(diǎn)可以對(duì)比出標(biāo)準(zhǔn)化前后的數(shù)據(jù)分布形狀并沒有發(fā)生變化,只是尺度上縮小了

num = np.random.random_integers(0, 100, (100, 2))
ss = StandardScaler()
std_num = ss.fit_transform(num)
pct = gridspec.GridSpec(5,5)
fig = plt.figure()
ax1 = fig.add_subplot(pct[0:2, 1:4])
ax2 = fig.add_subplot(pct[3:5, 1:4])
ax1.scatter(num[:, 0], num[:, 1])
ax2.scatter(std_num[:, 0], std_num[:, 1])
plt.show()

sklearn.preprocess.StandardScaler的使用:
先是創(chuàng)建對(duì)象,然后調(diào)用fit_transform()方法,需要傳入一個(gè)如下格式的參數(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ù)的標(biāo)準(zhǔn)差是1,均值接近0。

data is [[49.29873359]
[95.20967969]
[52.44950495]
[58.71172726]
[54.12316912]
[27.41708406]
[ 3.34966679]
[32.30408764]
[48.87353974]
[78.09835421]]
after standard [[-0.028114 ]
[ 1.85667083]
[ 0.1012348 ]
[ 0.35831819]
[ 0.16994384]
[-0.92642268]
[-1.91446381]
[-0.72579623]
[-0.04556951]
[ 1.15419856]]
after inverse [[49.29873359]
[95.20967969]
[52.44950495]
[58.71172726]
[54.12316912]
[27.41708406]
[ 3.34966679]
[32.30408764]
[48.87353974]
[78.09835421]]
after standard mean and std is 1.9984014443252818e-16 1.0

使用sklearn進(jìn)行數(shù)據(jù)的歸一化和歸一化還原

原理:


從上式可以看出歸一化的結(jié)果跟數(shù)據(jù)的最大值最小值有關(guān)。

使用時(shí)類似上面的標(biāo)準(zhǔ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é)果:

data is [[75.21242767]
[11.53297082]
[64.09893246]
[13.03550181]
[55.77251929]
[95.0521677 ]
[74.2959111 ]
[13.00827797]
[68.85133421]
[46.41799224]]
after Min Max [[0.76245294]
[0. ]
[0.62938778]
[0.01799025]
[0.52969317]
[1. ]
[0.75147921]
[0.01766429]
[0.68628969]
[0.41768866]]
origin data is [[75.21242767]
[11.53297082]
[64.09893246]
[13.03550181]
[55.77251929]
[95.0521677 ]
[74.2959111 ]
[13.00827797]
[68.85133421]
[46.41799224]]

其他標(biāo)準(zhǔn)化的方法:

上面的標(biāo)準(zhǔn)化和歸一化都有一個(gè)缺點(diǎn)就是每當(dāng)來一個(gè)新的數(shù)據(jù)的時(shí)候就要重新計(jì)算所有的點(diǎn)。

因而當(dāng)數(shù)據(jù)是動(dòng)態(tài)的時(shí)候可以使用下面的幾種計(jì)算方法:

1、arctan反正切函數(shù)標(biāo)準(zhǔn)化:

2、ln函數(shù)標(biāo)準(zhǔn)化:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容