做過機器學習的人應該都聽過這句話:數據和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。

由此可見,數據和特徵是機器學習最重要的兩個部分。而能拿到的數據範圍一般是確定,所以特徵就成了最重要的決定因素。

網上講特徵工程的文章,參差零散。一直想買本專講特徵工程的書,但查過才發現,這種書基本沒有。

最近看到有本叫《精通特徵工程》,還是OReilly 的動物書,果斷下單。收到後發現,好薄。讀了下,還是有好多收穫,做個筆記。

特徵,即原始數據某個方面的數值表示。或者說,特徵是模型輸入中的X。

特徵工程就是從原始數據中提取有用因子,並轉換為適合機器學習模型的特徵的過程。

原始數據有很多格式,其中最常見的就是數值格式。數值數據容易被模型所用,但是仍然需要進行特徵工程。

首先要對數據進行基本的觀察,看看量級、正負、最大最小值。根據觀察情況,決定對數據進行哪些處理,常見的處理有以下幾種。

一.二值化

有時候我們只關心『是不是『,但拿到的數據是數量值。書中的例子是據用戶收聽次數,推測對歌的喜歡程度。可能說聽得多肯定更喜歡,但是實際情況並非如此。收聽次數和用戶收聽習慣有關,並非標識用戶喜好的強指標。而且,這個次數多數較小,也有少數用戶達到了幾千次。如果直接使用次數,模型會被這些異常值帶偏。

處理方式很簡單,把所有收聽次數非0的設為1,這就是二值化。0代表用戶沒聽過歌,認為不喜歡這首歌;1代表用戶至少聽過一次,認為喜歡這首歌。二值變數是一個簡單又強壯的用戶偏好衡量指標。

二.區間量化(分箱)

如果一個數據跨越多個數量級,那麼較大數據的實際影響可能會遠超過其實際應該產生的影響,這會造成相似度度量問題。對此,可以使用區間量化對數據進行處理。

區間量化,就是將數據跨度分為很多區間,給每個區間編號,然後使用區間編號代替原始數值。相當於將數據裝到很多箱子中,所以也叫分箱。分箱可以將連續性數值映射為離散型數值。可以看出,分箱的主要過程在於劃分區間。常見的有兩種方法:固定寬度分箱和分位數分箱。

固定寬度分箱,每個區間的寬度是一定的。固定寬度並非寬度相同,常說的等距分箱,就是固定寬度分箱的一種。

寬度可以自動或人工劃分,可以是線性也可以是指數級。比如,年齡數據,寬度可以設為10年;指數級增長的數據,寬度可以設為10的n次冪。

自適應分箱,是根據數據的分佈特點,去劃分區間。分位數分箱是常見的自適應分箱。這種方法將一些分位數設為區間端點,可以解決在固定寬度分箱中,有些箱子可能為空的問題。

三.對數變換

對數變換是將變數映射為其對數的變換。前面講了指數級分箱,如果將分箱寬度設置為無限小,就成了對數變換。

對數變換的一個性質是能對大數值進行壓縮,對小數值進行擴展。所以,重尾分佈在經過對數變換後,會變得更均勻一些。這會給線性模型特徵空間低端值爭取『呼吸空間』,使模型不必在輸入變化很小的情況下去擬合變化非常大的目標值。

一種重尾分佈的圖形

四.指數變換

指數變換是一個變化族,是方差穩定變換,對數變換是其中的一種。這些變換可以推廣為Box-Cox變換:

。Box-Cox變換的作用是基於極大似然法的冪轉換,其所用是讓分佈在不丟失信息的前提下,具有更好的性質(獨立性、方差齊性、正態性等),以便得到更好的模型。λ無需計算,Scipy的boxcox函數,會找到最優λ,使變換後最近正態分佈。

五.歸一化(特徵縮放)

有的特徵取值有限,有的則沒有。對於回歸模型或包含矩陣的模型,輸出是輸入的平滑函數,對輸入尺度敏感,基於數的模型,則不受影響。如果模型是輸入尺度敏感的,則需要進行特徵歸一化。

min-max縮放將特徵映射到[0,1];特徵標準化(方差縮放)將特徵映射為均值為0方差為1的分佈;範數歸一化將特徵映射為範數為1的變數。特徵縮放不改變分佈的形狀。

六.交互特徵

將原始特徵進行一定的運算就產生的特徵為交互特徵,如將兩個特徵做差、做積。這些特徵捕獲了特徵間的交互作用。

交互特徵可能是影響目標變數的關鍵因子,但是模型不一定能夠捕獲,所以我們要提前產生一些交互特徵並輸入模型。

交互特徵構造簡單,使用卻需要付出很大的代價,因為增加了輸入變數個數。因此交互特徵不能亂用。

可以看出,數值變數的處理原則,一是分佈均勻化,二是極端變數一般化。同時,也可以看出,對數據可視化也是處理數值數據的重要部分。

微信公眾號:曲曲菜

知乎專欄:AI和金融模型

原創作品,未標明作者不得轉載。


推薦閱讀:
相關文章