特徵工程
歸一化
歸一化就是將資料經過某種演算法限制在一定範圍內,一是為了處理資料的方便,二也可以保證程式執行時收斂速度加快(比如梯度下降演算法),精度加高,本質上似乎為了使得各個特徵維度對目標函式的影響權重是一致的
標準化
和歸一化看上去十分地類似,不過其實和歸一化也沒有必要區分地特別清楚,標準化是對特徵維度大小的伸縮,使得特徵之間具備可比性,其實沒有必要和歸一化劃分地過於清晰
特徵離散化
一些特徵是分類的特徵,這部分特徵我們要進行離散化處理,這種我們比較好理解。對於另外一些特徵,雖然是數值型的,但是這些特徵的取值相加減是沒有實際意義的,那麼該數值新特徵也要看成離散特徵,採用離散化的技術:比如年齡20歲和年齡30歲往往對一個廣告的興趣差距不會那麼大,這種時候我們也要進行特徵離散化。
特徵交叉
交叉從理論上而言是為了引入特徵之間的互動,即為了引入非線性,這也便是特徵交叉的意義。知乎上有一個最簡單的例子,性別和年齡,可以組成性別_年齡的一個新特徵,即可以得到新的特徵屬性,然後再對這個特徵做one-hot編碼,即可以得到新的特徵屬性值。
不同特徵型別的不同處理方式
- 連續特徵,除了歸一化(去中心,方差歸一),不用做太多特殊處理,可以直接把連續特徵扔到模型裡使用。
- 無序特徵,可以使用one-hot的方法把每個無序特徵轉化為一個資料向量。實際上這種方法在NLP中用的很多,就是所謂的詞向量模型。變換後的向量長度對於詞典長度,每個詞對應於向量中的一個元素。
- 無序特徵,有些特徵雖然也像無序特徵那樣只取限定的幾個值,但是這些值之間有順序的含義,比如狀態有三種取值,bad、normal、good,顯然我們有關係bad< normal< good。這時最簡單的處理方式就是忽略其中的順序關係,把它看做是無序的,這樣我們就可以使用處理無序特徵的方式來處理它,這樣的處理方式也使用得很多,而又寫問題裡面有序可能會很重要,這個時候就不應該把其中的順序關係丟掉,這個時候可能我們就不會簡單的使用one-hot,而是簡單地改一下,