1. 歸一化定義與作用
歸一化就是要把需要處理的數據經過處理后(通過某種算法)限制在你需要的一定范圍內。首先歸一化是為了后面數據處理的方便,其次是保證程序運行時收斂加快。歸一化的具體作用是歸納統一樣本的統計分布性。歸一化在0-1之間是統計的概率分布,歸一化在某個區間上是統計的坐標分布。歸一化有同一、統一和合一的意思。
歸一化的目的簡而言之,是使得沒有可比性的數據變得具有可比性,同時又保持相比較的兩個數據之間的相對關系,如大小關系;或是為了作圖,原來很難在一張圖上作出來,歸一化后就可以很方便的給出圖上的相對位置等。
在使用機器學習算法的數據預處理階段,歸一化也是非常重要的一個步驟。例如在應用SVM之前,縮放是非常重要的。Sarle的神經網絡FAQ的第二部分(1997)闡述了縮放的重要性,大多數注意事項也適用於SVM。縮放的最主要優點是能夠避免大數值區間的屬性過分支配了小數值區間的屬性。另一個優點能避免計算過程中數值復雜度。因為關鍵值通常依賴特征向量的內積(inner products),例如,線性核和多項式核,屬性的大數值可能會導致數值問題。我們推薦將每個屬性線性縮放到區間[-1,+1]或者[0, 1]。
當然,我們必須使用同樣的方法縮放訓練數據和測試數據。例如,假設我們把訓練數據的第一個屬性從[-10,+10]縮放到[-1, +1],那么如果測試數據的第一個屬性屬於區間[-11, +8],我們必須將測試數據轉變成[-1.1, +0.8]。
2. normalize 函數介紹
函數原型:
void normalize(InputArray src,OutputArraydst, double alpha = 1, double beta = 0, intnorm_type = NORM_L2, int dtype = -1, InputArray mask = noArray() )
該函數歸一化輸入數組使它的范數或者數值范圍在一定的范圍內。
Parameters:
src : 輸入數組
dst : 輸出數組,支持原地運算
alpha : range normalization模式的最小值
beta : range normalization模式的最大值,不用於norm normalization(范數歸一化)模式。
normType : 歸一化的類型,可以有以下的取值:
NORM_MINMAX: 數組的數值被平移或縮放到一個指定的范圍,線性歸一化,一般較常用。
NORM_INF: 此類型的定義沒有查到,根據OpenCV 1的對應項,可能是歸一化數組的C-范數(絕對值的最大值)
NORM_L1 : 歸一化數組的L1-范數(絕對值的和)
NORM_L2 : 歸一化數組的(歐幾里德)L2-范數
dtype : dtype為負數時,輸出數組的type與輸入數組的type相同;
否則,輸出數組與輸入數組只是通道數相同,而tpye=CV_MAT_DEPTH(dtype).
mask : 操作掩膜,用於指示函數是否僅僅對指定的元素進行操作
3.歸一化公式:
1、線性函數轉換,表達式如下:(對應NORM_MINMAX)
if mask(i,j)!=0
dst(i,j) = (src(i,j) - min(src)) * (b' - a') / (max(src) - min(src)) + a'
else
dst(i,j) = src(i,j)
其中b' = MAX(alpha,beta ) , a' = MIN(alpha,beta );
2. 當norm_type!=NORM_MINMAX:
if mask(i,j) != 0
dst(i,j) = src(i,j) *alpha / norm (src,norm_type,mask)
else
dst(i,j) = src(i,j)
其中,函數norm的功能是計算norm(范數)的絕對值
Thefunctions norm calculate an absolute norm of src1 (when there is no src2 ):