內容來源於其他博客,這裏做了個彙總,侵刪。
標準化歸一化數據
數據標準化是將數據按比例縮放,使之落入一個小的特定區間。去除數據的單位限制,將其轉化爲無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權。最典型的就是數據的歸一化處理,即將數據統一映射到[0,1]區間上。
歸一化的作用:
1. 提升模型的收斂速度
如下圖,x1的取值爲0-2000,而x2的取值爲1-5,假如只有這兩個特徵,對其進行優化時,會得到一個窄長的橢圓形,導致在梯度下降時,梯度的方向爲垂直等高線的方向而走之字形路線,這樣會使迭代很慢,相比之下,右圖的迭代就會很(步長走多走少方向總是對的,不會走偏)
2.提升模型的精度
在多指標評價體系中,由於各評價指標的性質不同,通常具有不同的量綱和數量級。當各指標間的水平相差很大時,如果直接用原始指標值進行分析,就會突出數值較高的指標在綜合分析中的作用,相對削弱數值水平較低指標的作用。
歸一化常用方法:
方法一:min-max標準化(Min-max normalization)/0-1標準化(0-1 normalization)
公式如下。
其中max爲樣本數據的最大值,min爲樣本數據的最小值。
或者
其中
該方法的缺陷是當有新數據加入時,可能導致max和min的變化,需要重新定義。
方法二:log函數轉換
公式如下。
max爲樣本數據最大值,並且所有的數據都要大於等於1。
方法三:反正切函數
反正切函數圖像如下
公式如下。
使用這個方法需要注意的是如果想映射的區間爲[0,1],則數據都應該大於等於0,小於0的數據將被映射到[-1,0]區間上,而並非所有數據標準化的結果都映射到[0,1]區間上。
方法四:標準差標準化
這種方法給予原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化。
經過處理的數據符合標準正態分佈,即均值爲0,標準差爲1,其轉化函數爲:
公式如下。
其中
將特徵轉化爲一個數值向量
下面分別對無序特徵、有序特徵舉例說明
無序特徵
可以使用One-hot(也叫One-of-k)的方法把每個無序特徵轉化爲一個數值向量。比如一個無序特徵color有三種取值:red
,green
,blue
。那麼可以用一個長度爲3的向量來表示它,向量中的各個值分別對應於red
,green
,blue
。如:
這就類似於NLP中的詞向量模型
上面說的表達方式裏有一個維度是可以省略的。既然我們知道color一定是取3個值中的一個,那麼我們知道向量的前兩個元素值,就能推斷第3個值是多少。所以,其實用下面的方式就可以表達到底是哪種顏色:
這樣表達的好處是少用了一個維度,降低了轉化後特徵之間的相關性。但在實際問題中特徵基本都或多或少會有些缺失。使用第一種表達方式就可以用全0的向量來表示值缺失,而第二種表達方式是沒法表達缺失的。
有序特徵
有些特徵雖然也像無序特徵那樣只取限定的幾個值,但是這些值之間有順序的含義。例如一個人的狀態status有三種取值:bad
, normal
, good
,顯然bad < normal < good。對於這些狀態的表達式可以如下圖所示:
上面這種表達方式很巧妙地利用遞進表達了值之間的順序關係。
離散化
通常我們會將連續性特徵離散化,是把原來的值分段,轉化成一個取值爲0或1的向量。原始值落在某個段裏,向量中此段對應的元素就爲1,否則爲0。
這樣做的優勢是:
- 離散特徵的增加和減少都很容易,易於模型的快速迭代;
- 稀疏向量內積乘法運算速度快,計算結果方便存儲,容易擴展;
- 離散化後的特徵對異常數據有很強的魯棒性:比如一個特徵是年齡>30是1,否則0。如果特徵沒有離散化,一個異常數- - - 據“年齡300歲”會給模型造成很大的干擾;
- 邏輯迴歸屬於廣義線性模型,表達能力受限;單變量離散化爲N個後,每個變量有單獨的權重,相當於爲模型引入了非線- - 性,能夠提升模型表達能力,加大擬合;
- 離散化後可以進行特徵交叉,由M+N個變量變爲M*N個變量,進一步引入非線性,提升表達能力;
- 特徵離散化後,模型會更穩定,比如如果對用戶年齡離散化,20-30作爲一個區間,不會因爲一個用戶年齡長了一歲就變成一個完全不同的人。當然處於區間相鄰處的樣本會剛好相反,所以怎麼劃分區間是門學問;
特徵離散化以後,起到了簡化了邏輯迴歸模型的作用,降低了模型過擬合的風險。
下面給出一個簡單示例:
比如取離散點
離散化方法的關鍵是怎麼確定分段中的離散點。下面是常用的選取離散點的方法:
- 等距離離散:顧名思義,就是離散點選取等距點。我們上面對
x 取離散點{0.5,1.5,2.5} 就是一種等距離散,見下圖。圖中垂直的灰線代表離散點。 - 等樣本點離散:選取的離散點保證落在每段裏的樣本點數量大致相同
- 畫圖觀察趨勢:以
x 爲橫座標,y 爲縱座標,畫圖,看曲線的趨勢和拐點。通過觀察下面的圖我們發現可以利用3條直線(紅色直線)來逐段近似原來的曲線。把離散點設爲兩條直線相交的各個點,我們就可以把xx離散化爲長度爲3的向量。