天天看點

資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆

資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆

導 讀

“應用機器學習像是把你當一個偉大的工程師,而非偉大的機器學習專家。”

這是我在一份谷歌内部檔案中讀到的如何應用機器學習的第一句話。的确如此。以我作為伺服器工程師/資料分析師的有限經驗,資料(以及如何存儲/處理)一直都是所有問題的核心,在整體中舉足輕重。去問問任何一位kaggle的獲勝者,他們都會說,最大的收獲總是來源于聰明地表示資料,而不是使用某些複雜的算法。即使crisp資料挖掘處理也使用了不是一個,而是兩個階段,專門用來了解和準備資料。

特征工程

那麼,什麼是特征工程?

簡而言之,就是用最好的方法來表示資料的藝術/科學。

為什麼說是藝術/科學?因為好的特征工程是專業知識,直覺和基礎的數學能力的優雅組合。呃,最有效的資料表示法基本不包含任何數學計算(下文我會解釋)。“最好的”是什麼意思?大體上,提供給算法的資料的方式,應該以最有效的方式表示潛在資訊的相關結構/屬性。當你進行特征工程時,你是在把你的資料屬性轉化為資料特征。

屬性基本上是資料的所有次元,但是所有這些以原始形态存在的屬性是否以最佳的表示方式表示了你想學習的潛在趨勢?也許不是。是以特征工程是對資料進行預處理,在此基礎上進行模組化/建立學習算法,進而可以花最小的力氣處理噪聲資料。在此“噪音”的含義是,任何與學習/預測你的最終目标無關的資訊。實際上,由于你已經自己完成了一部分“思考”的工作,使用好的特征甚至可以讓你使用簡單得多的模型。

但是就像任何機器學習中的技術一樣,一定要通過驗證確定你引入的新特征确實能夠改進預測,而不是增加不必要的複雜性。如果機器學習是發型:模型—華麗的,裝飾的,不易打理的,特征工程—接地氣的,即興的,直接的。

如同之前提到的,好的特征工程包含直覺,專業知識(個人經驗)和基本的數學技巧。以下是幾個非常簡單的技巧,你可以應用在你的下一個資料科學解決方案中。

1.表示時間戳

時間戳屬性經常是用epoch時間來定義,或者分離到多個次元裡,比如(年,月,日,時,分,秒)。但是在很多場合下,很多資訊是不必要的。比如,在一個監督學習系統裡,預測一個城市關于地點+時間的交通流量,如果以秒來發現其趨勢,很有可能得到錯誤的結論。以年為機關對這個模型來說沒有太多價值;小時,天和月可能是你需要用到的次元。是以,當表示時間時,試着去确認一下你的模型是否需要你所提供的所有數字。

别忘了時區。如果你的資料源自不同的地域,務必記得在需要的時候用時區做标準化。

2.分解分類型屬性

有的屬性是種類而非數字。一個簡單的例子是“顔色”屬性,比如{紅,綠,藍}之一。最常見的表示方法是将種類轉化為二進制屬性,從{0,1}中二取一。于是你得到了一系列增加的屬性,數目與種類的個數相等,而且在每個資料點的這一系列屬性中,隻有一個的值是1(其餘的都是0)。這是一種獨熱編碼形式。

如果你第一次接觸到這個概念,你可能會認為分解屬性是平添了不必要的麻煩(本質上我們擴大了資料集的次元)。相反,你可能更願意将種類屬性轉變為一個标量值,比如,顔色特征可能用{1,2,3}代表{紅,綠,藍}。這會帶來兩個問題。第一,對于一個數學模型,這個可能表示“紅色”比“藍色”更接近“綠色”(因為|1-3|>|1-2|)。除非你的種類的确包含自然順序(natural ordering)(比如一條火車線路上的車站),否則的話這種表示法可能會誤導你的模型。第二,它可能導緻統計學參數(比如平均值)失去意義。甚者,造成誤導。再次考慮顔色的例子,如果你的資料集包含同樣多的紅色和藍色值,而沒有綠色值,取平均值仍會得到“2”——代表着綠色!

将種類屬性轉化為标量值最安全的情況是當你隻有兩個種類時。這樣你就有了{0,1}對應{種類1,種類2}。這種情況下,“次序”不是必要的,并且你可以将屬性值解讀為屬于種類2抑或種類1的機率值。

3.數字分組 

有時候,将數字屬性表示成分類屬性也是一種有效的分析方法。這種方法通過将數字分段劃組,來減少噪聲對機器學習算法的幹擾。比如說,如果我們要預測一個人是否擁有某一件特定的衣服。顯然年齡是一個影響因素。實際上年齡組可能更加恰當一些。是以我們可以給年齡分段,比如1-10歲,11-18歲,19-25歲,26-40歲等。對于這樣的分類,我們便沒有必要像第2點所說的那樣再去做類别内的分解,直接用标量值劃分組别就可以了,因為相近的年齡組确實是有相似之處的。

屬性域能被清楚歸類的資料,其同一區間的數字能夠代表相同的特征,分組這種方法就比較适用于這樣的資料。如果你不想讓你的模型區分太相近的數值,這種方法可以減少一些應用中的過拟合問題。比如說,如果你的關注點是一整個城市,你就可以把該城市所有的緯度歸到一起。分組這個方法通過将數值”化整”到離它最近的典型數值,來減少微小錯誤帶來的影響。不過,如果分組數量與你的可能值數量相當,或者你要求很高的精度,那麼資料分組就沒有什麼意義了。

4.特征交叉

特征交叉也許是這些方法中最為重要和有用的一種了。這種獨特的方法可以将兩個或兩個以上的類别屬性組合成一種。這個方法非常有用,尤其如果相對于單個屬性本身,與其他屬性的結合能更好地表示某些特性。從數學上講,是把所有這些屬性的可能值做了叉乘。

若某特征a的值域為{a1,a2},特征b的值域為{b1, b2}。a和b之間的交叉特征(我們稱之為ab)則是以下這些值中的一個:{(a1, b1),(a1, b2), (a2, b1), (a2, b2)}。你可以自由命名這些“組合”,任何一個組合都代表了a或b特征中的某些資訊的合成。

比如以下圖表:

資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆

所有藍點屬于一類,而紅點屬于另一類。我們暫且不用知道這個模型的真實意義。首先,你需要把x的值域劃分為{x < 0, x >= 0},把y的值域劃分為{y < 0, y >= 0},并把它們分别表示為{xn, xp} 和 {yn, yp}。顯然,第一和第三象限屬于紅色,而第二和第四象限屬于藍色。如果我們把x和y做特征交叉,并把結果歸類為”象限”這個統一的特征,我們就有了{i, ii, iii, iv}四個值,分别等同于之前提到的{(xp, yp), (xn, yp), (xn, yn), (xp, yn)}。

另一個更加具體也更加相關的好例子是經緯度。一個常見的緯度值與世界上很多地方都有關聯,經度也是這樣。但是如果你将經緯度相結合,并劃分到不同的“區塊”,它們就可以代表地理上的“地區”,各個地區内部有着相似的特性。

有時候,多個資料屬性可以通過簡單的數學計算被“組合”成一個新的特征。在上一個例子中,假設你把特征重定義為

資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆

資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆

資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆
資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆

那麼現在你可以定義一個全新的特征

資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆
資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆

就這麼簡單,如果

資料科學中的非數學特征工程技術◆ ◆ ◆◆ ◆ ◆

,則是紅色,反之則是藍色。

作為補充,我接下來将簡單介紹幾個數學上比較複雜的特征工程技巧,并附帶了連結以便大家更好地了解。

5.特征選取

運用某些算法來自動選擇原始資料特征中的一個子集,以建立最終模型。你不需要建立/修改現有的資料特征,而是對它們進行删減,來降低幹擾,減少資料備援。

6.特征縮放(資料标準化)

有時候,你可能會注意到有些屬性的數量級比别的屬性更大,比如一個人的收入,相對于他的年齡而言。在類似的情況下,有些模型(比如嶺回歸)就要求你把所有的屬性都縮放到一個可比較的、同等的範圍内。這可以防止某些屬性被給予過多的權重。

7.特征提取

特征提取包含了許多算法,它們能夠從原始資料屬性中自動生成新的特征集合。資料降維是這類方法裡的一種。

  原文釋出時間為:2016-09-12

本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号

繼續閱讀