【特徵工程】數值變數的處理技術
做過機器學習的人應該都聽過這句話:數據和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。
由此可見,數據和特徵是機器學習最重要的兩個部分。而能拿到的數據範圍一般是確定,所以特徵就成了最重要的決定因素。
網上講特徵工程的文章,參差零散。一直想買本專講特徵工程的書,但查過才發現,這種書基本沒有。
最近看到有本叫《精通特徵工程》,還是OReilly 的動物書,果斷下單。收到後發現,好薄。讀了下,還是有好多收穫,做個筆記。
特徵,即原始數據某個方面的數值表示。或者說,特徵是模型輸入中的X。
特徵工程就是從原始數據中提取有用因子,並轉換為適合機器學習模型的特徵的過程。
原始數據有很多格式,其中最常見的就是數值格式。數值數據容易被模型所用,但是仍然需要進行特徵工程。
首先要對數據進行基本的觀察,看看量級、正負、最大最小值。根據觀察情況,決定對數據進行哪些處理,常見的處理有以下幾種。
一.二值化
有時候我們只關心『是不是『,但拿到的數據是數量值。書中的例子是據用戶收聽次數,推測對歌的喜歡程度。可能說聽得多肯定更喜歡,但是實際情況並非如此。收聽次數和用戶收聽習慣有關,並非標識用戶喜好的強指標。而且,這個次數多數較小,也有少數用戶達到了幾千次。如果直接使用次數,模型會被這些異常值帶偏。
處理方式很簡單,把所有收聽次數非0的設為1,這就是二值化。0代表用戶沒聽過歌,認為不喜歡這首歌;1代表用戶至少聽過一次,認為喜歡這首歌。二值變數是一個簡單又強壯的用戶偏好衡量指標。二.區間量化(分箱)
如果一個數據跨越多個數量級,那麼較大數據的實際影響可能會遠超過其實際應該產生的影響,這會造成相似度度量問題。對此,可以使用區間量化對數據進行處理。
區間量化,就是將數據跨度分為很多區間,給每個區間編號,然後使用區間編號代替原始數值。相當於將數據裝到很多箱子中,所以也叫分箱。分箱可以將連續性數值映射為離散型數值。可以看出,分箱的主要過程在於劃分區間。常見的有兩種方法:固定寬度分箱和分位數分箱。固定寬度分箱,每個區間的寬度是一定的。固定寬度並非寬度相同,常說的等距分箱,就是固定寬度分箱的一種。
寬度可以自動或人工劃分,可以是線性也可以是指數級。比如,年齡數據,寬度可以設為10年;指數級增長的數據,寬度可以設為10的n次冪。
自適應分箱,是根據數據的分佈特點,去劃分區間。分位數分箱是常見的自適應分箱。這種方法將一些分位數設為區間端點,可以解決在固定寬度分箱中,有些箱子可能為空的問題。
三.對數變換
對數變換是將變數映射為其對數的變換。前面講了指數級分箱,如果將分箱寬度設置為無限小,就成了對數變換。
對數變換的一個性質是能對大數值進行壓縮,對小數值進行擴展。所以,重尾分佈在經過對數變換後,會變得更均勻一些。這會給線性模型特徵空間低端值爭取『呼吸空間』,使模型不必在輸入變化很小的情況下去擬合變化非常大的目標值。