目測(cè)是autonorm.py中l(wèi)in 17 normdataset=zeros(shape(dataset)) 這一句 shape(dataset)返回的是元組,但是zeros( args )需要的是整形參數(shù),做個(gè)類型轉(zhuǎn)換就ok了
站在用戶的角度思考問題,與客戶深入溝通,找到定興網(wǎng)站設(shè)計(jì)與定興網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋定興地區(qū)。
1)線性歸一化
這種歸一化比較適用在數(shù)值比較集中的情況,缺陷就是如果max和min不穩(wěn)定,很容易使得歸一化結(jié)果不穩(wěn)定,使得后續(xù)的效果不穩(wěn)定,實(shí)際使用中可以用經(jīng)驗(yàn)常量來代替max和min。
2)標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化
經(jīng)過處理的數(shù)據(jù)符合標(biāo)準(zhǔn)正態(tài)分布,即均值為0,標(biāo)準(zhǔn)差為1。
3)非線性歸一化
經(jīng)常用在數(shù)據(jù)分化較大的場(chǎng)景,有些數(shù)值大,有些很小。通過一些數(shù)學(xué)函數(shù),將原始值進(jìn)行映射。該方法包括log、指數(shù)、反正切等。需要根據(jù)數(shù)據(jù)分布的情況,決定非線性函數(shù)的曲線。
log函數(shù):x = lg(x)/lg(max)
反正切函數(shù):x = atan(x)*2/pi
Python實(shí)現(xiàn)
線性歸一化
定義數(shù)組:x = numpy.array(x)
獲取二維數(shù)組列方向的最大值:x.max(axis = 0)
獲取二維數(shù)組列方向的最小值:x.min(axis = 0)
對(duì)二維數(shù)組進(jìn)行線性歸一化:
def max_min_normalization(data_value, data_col_max_values, data_col_min_values):
""" Data normalization using max value and min value
Args:
data_value: The data to be normalized
data_col_max_values: The maximum value of data's columns
data_col_min_values: The minimum value of data's columns
"""
data_shape = data_value.shape
data_rows = data_shape[0]
data_cols = data_shape[1]
for i in xrange(0, data_rows, 1):
for j in xrange(0, data_cols, 1):
data_value[i][j] = \
(data_value[i][j] - data_col_min_values[j]) / \
(data_col_max_values[j] - data_col_min_values[j])
標(biāo)準(zhǔn)差歸一化
定義數(shù)組:x = numpy.array(x)
獲取二維數(shù)組列方向的均值:x.mean(axis = 0)
獲取二維數(shù)組列方向的標(biāo)準(zhǔn)差:x.std(axis = 0)
對(duì)二維數(shù)組進(jìn)行標(biāo)準(zhǔn)差歸一化:
def standard_deviation_normalization(data_value, data_col_means,
data_col_standard_deviation):
""" Data normalization using standard deviation
Args:
data_value: The data to be normalized
data_col_means: The means of data's columns
data_col_standard_deviation: The variance of data's columns
"""
data_shape = data_value.shape
data_rows = data_shape[0]
data_cols = data_shape[1]
for i in xrange(0, data_rows, 1):
for j in xrange(0, data_cols, 1):
data_value[i][j] = \
(data_value[i][j] - data_col_means[j]) / \
data_col_standard_deviation[j]
非線性歸一化(以lg為例)
定義數(shù)組:x = numpy.array(x)
獲取二維數(shù)組列方向的最大值:x.max(axis=0)
獲取二維數(shù)組每個(gè)元素的lg值:numpy.log10(x)
獲取二維數(shù)組列方向的最大值的lg值:numpy.log10(x.max(axis=0))
對(duì)二維數(shù)組使用lg進(jìn)行非線性歸一化:
def nonlinearity_normalization_lg(data_value_after_lg,
data_col_max_values_after_lg):
""" Data normalization using lg
Args:
data_value_after_lg: The data to be normalized
data_col_max_values_after_lg: The maximum value of data's columns
"""
data_shape = data_value_after_lg.shape
data_rows = data_shape[0]
data_cols = data_shape[1]
for i in xrange(0, data_rows, 1):
for j in xrange(0, data_cols, 1):
data_value_after_lg[i][j] = \
data_value_after_lg[i][j] / data_col_max_values_after_lg[j]
可以使用sklearn庫中的MinMaxScaler函數(shù):
```
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data[['col1', 'col2']] = scaler.fit_transform(data[['col1', 'col2']])
```
數(shù)據(jù)的標(biāo)準(zhǔn)化(normalization)是將數(shù)據(jù)按比例縮放,使之落入一個(gè)小的特定區(qū)間。在某些比較和評(píng)價(jià)的指標(biāo)處理中經(jīng)常會(huì)用到,去除數(shù)據(jù)的單位限制,將其轉(zhuǎn)化為無量綱的純數(shù)值,便于不同單位或量級(jí)的指標(biāo)能夠進(jìn)行比較和加權(quán)。最典型的就是數(shù)據(jù)的歸一化處理,即將數(shù)據(jù)統(tǒng)一映射到(0,1]區(qū)間上
(1)0-1標(biāo)準(zhǔn)化
將數(shù)據(jù)的最大最小值記錄下來,并通過max-min作為基數(shù)(即min=0,max=1)進(jìn)行數(shù)據(jù)的歸一化處理
x=(x - min) / (max - min)
(2)Z-score標(biāo)準(zhǔn)化
Z分?jǐn)?shù)(z-score),是一個(gè)分?jǐn)?shù)與平均數(shù)的差再除以標(biāo)準(zhǔn)差的過程 → z=(x-μ)/σ,其中x為某一具體分?jǐn)?shù),μ為平均數(shù),σ為標(biāo)準(zhǔn)差
Z值的量代表著原始分?jǐn)?shù)和母體平均值之間的距離,是以標(biāo)準(zhǔn)差為單位計(jì)算。在原始分?jǐn)?shù)低于平均值時(shí)Z則為負(fù)數(shù),反之則為正數(shù)
數(shù)學(xué)意義:一個(gè)給定分?jǐn)?shù)距離平均數(shù)多少個(gè)標(biāo)準(zhǔn)差?
看到各位大佬們都會(huì)把原始數(shù)據(jù)進(jìn)行歸一化,再處理??墒嵌紱]有人講怎樣把歸一化的數(shù)據(jù)還原回來。
目前可找到的方法就只有matlab上的這個(gè)函數(shù):
xtt = mapminmax('reverse',y1,ps)
在python上,就看到許多人推薦用sklearn進(jìn)行歸一化,但沒有還原的方法呀。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
你要問我為什么 要還原?
把日期和氣溫的數(shù)據(jù)放到模型里跑半天,想看看下一天的氣溫,結(jié)果出來一個(gè)0.837之類東西。
sklearn中transform用來歸一化后,可以用inverse_transform還原。
將數(shù)組歸一化
歸一化:將一組數(shù)據(jù)變化到某個(gè)固定區(qū)間中,通常,這個(gè)區(qū)間是[0,1],廣義的講,可以是各種區(qū)間,比如映射到[0,1]一樣可以繼續(xù)映射到其他范圍,圖像中可能會(huì)映射到[0,255],其他情況可能映射到[-1,1]。