機器學習的歸一化和標準化

2021-09-27 01:20:59 字數 1788 閱讀 8994

一般做機器學習應用的時候大部分時間是花費在特徵處理上,其中很關鍵的一步就是對特徵資料進行歸一化,為什麼要歸一化呢?

很多同學並未搞清楚,維基百科給出的解釋:

1)歸一化後加快了梯度下降求最優解的速度, 主要是加快梯度下降法收斂速度。

2)歸一化有可能提高精度。下面我簡單擴充套件解釋下這兩點。

有兩種實現方法:

(1)常用的方法是通過對原始資料進行線性變換把資料對映到[0,1]之間,變換函式為:

其中max為樣本資料的最大值,min為樣本資料的最小值。

缺點:這種方法有個缺陷就是當有新資料加入時,可能導致max和min的變化,需要重新定義。

另外,最大值與最小值非常容易受異常點影響,

所以這種方法魯棒性較差,只適合傳統精確小資料場景

常用的方法是z-score標準化,經過處理後的資料均值為0,標準差為1,處理方法是:

其中,其中μ是樣本的均值, σ是樣本的標準差。

特點: 該種歸一化方式要求原始資料的分布可以近似為高斯分布,否則標準化的效果會變得很糟糕。它們可以通過現有樣本進行估計。

在已有樣本足夠多的情況下比較穩定,適合現代大資料場景。

以上為兩種比較普通但是常用的歸一化技術,那這兩種歸一化的應用場景是怎麼樣的呢?下面做乙個簡要的分析概括:

1、在分類、聚類演算法中,需要使用距離來度量相似性的時候、或者使用pca技術進行降維的時候,第二種方法(z-score standardization)表現更好。

2、在不涉及距離度量、協方差計算、資料不符合正太分布的時候,可以使用第一種方法或其他歸一化方法。比如影象處理中,將rgb影象轉換為灰度影象後將其值限定在[0 255]的範圍。

import numpy as np

import pandas as pd

def standardize(x):

m, n = x.shape

for j in range(n):

features = x[:,j]

meanval = features.mean(axis=0)

std = features.std(axis=0)

if std != 0:

x[:, j] = (features-meanval)/std

else:

x[:, j] = 0

return x

def normalize(x):

m, n = x.shape

for j in range(n):

features = x[:,j]

minval = features.min(axis=0)

maxval = features.max(axis=0)

diff = maxval - minval

if diff != 0:

x[:,j] = (features-minval)/diff

else:

x[:,j] = 0

return x

result = pd.read_table(r'e:\python\resource\house.txt',sep='\s+')

x=result.as_matrix()

normresult = normalize(x)

standardresult = standardize(x)

print(normresult)

print(standardresult)

標準化與歸一化 機器學習

歸一化和標準化經常被搞混,程度還比較嚴重,非常干擾大家的理解。為了方便後續的討論,必須先明確二者的定義。如果要把輸入資料轉換到 0,1 的範圍,可以用如下公式進行計算 按以上方式進行歸一化以後,輸入資料轉換到 0,1 的範圍。有時候我們希望將輸入轉換到 1,1 的範圍,可以使用以下的公式 以上兩種方...

機器學習中的標準化和歸一化

這個真的是讓人困惑,分別解釋一下,首先說一下方差和均值 e x d x begin mu e x sigma sqrt end e x d x 1.歸一化 為什麼叫歸一化,歸一化顧名思義就是將資料轉換到0 1之間 x x xm inxm ax x min xxma x xm in x minx ma...

歸一化和標準化

主要是讀了這篇文章才深入理解這兩個的區別 歸一化 對原始資料進行線性轉換到 0,1 區間,如下 最小值和最大值特別容易受異常值影響,因此魯棒性不好,比較適合傳統的小資料場景 標準化 最常用的方法是z score標準化,即將資料轉化成均值為0,標準差為1,處理方法如下 其中理論解釋 歸一化的依據非常簡...