0
本文作者: AI研習(xí)社 | 2017-11-07 18:54 |
雷鋒網(wǎng)按:本文原作者阿薩姆,本文整理自作者在知乎《如何有效處理特征范圍差異大且類型不一的數(shù)據(jù)?》問題下的回答。雷鋒網(wǎng)已獲得轉(zhuǎn)載授權(quán)。
1. 特征類型混雜: 連續(xù)變量,離散變量,描述變量共存
2. 不同變量之間取值差異大: 例如有些變量取值在 0~1 但有些取值為 10000-50000
以 KDD99 網(wǎng)絡(luò)入侵?jǐn)?shù)據(jù)集為例:
總共 41 個特征,其中 3 個 categorical,5 個 binary,剩下 33 個均為連續(xù)型特征。
下圖為訓(xùn)練集 downsample 了 5W 條數(shù)據(jù)后針對連續(xù)型特征的統(tǒng)計:
可見,不同特征的取值范圍差異極大,特征本身分布也是很散(似乎有點(diǎn)長尾)。
面對這樣混合的特征類型,而且特征取值范圍差異極大的情況,如何進(jìn)行有效而 reasonable 的特征選擇?
這個問題是典型的特征工程(Feature Engineering)的范疇,這個領(lǐng)域的奇淫巧技實(shí)在太多,只能粗略的說一下對這種數(shù)據(jù)類型的基本處理流程。我反對直接進(jìn)行簡單粗暴的歸一化或標(biāo)準(zhǔn)化,往往其風(fēng)險大于收益。
首先我們假設(shè),做數(shù)據(jù)處理的前提是我們不知道什么分類模型效果最好,且大部分分類器無法直接處理 “描述變量”(categorical variable)。當(dāng)然,我們知道以決策樹為原型的模型可以處理不同的數(shù)據(jù)類型,且對于變量取值范圍比較不敏感,還自帶特征選擇 (如計算節(jié)點(diǎn)分裂的基尼指數(shù))。因此很多時候在進(jìn)行復(fù)雜操作前,不妨先使用隨機(jī)森林 (Random Forest) 或其他集成學(xué)習(xí)的樹模型暴力做一下。有類似良好的特性 (能自動選擇有效特征) 的分類器還包括:
特定種類的深度網(wǎng)絡(luò)。
L1 范數(shù)正則化后的線性模型等。
從本質(zhì)上看,上面提到的這幾種做法其實(shí)就是嵌入式特征選擇 (Embedding Feature Selection),屬于偷懶的一站式操作:) 而這個答案的重心在于將數(shù)據(jù)處理成可被一般分類器所使用的形態(tài),因?yàn)樵诤芏嗲闆r下我們無法使用這種偷懶的做法。
回答的結(jié)構(gòu)如下:
移除不必要的數(shù)據(jù),降低變量的維度。
對描述變量進(jìn)行轉(zhuǎn)化,使其適用于大部分的分類器。
分析數(shù)據(jù)之間的相關(guān)性,如共線性。如果有必要,進(jìn)行特征選擇。
歸一化和標(biāo)準(zhǔn)化。
* 懶人選項(xiàng):選用適當(dāng)?shù)?(對高方差數(shù)據(jù)魯棒性好) 的分類模型。
上面這個順序的邏輯是 1. 初步降低數(shù)據(jù)維度 2. 再將描述變量轉(zhuǎn)化為其他算法可以分析的格式 3. 分析是否需要特征選擇 4. 進(jìn)行歸一化和標(biāo)準(zhǔn)化。一般而言,我們可能會根據(jù)情況選擇其中的一部分處理方法,比較靈活。
如果 1-4 對你來說太復(fù)雜,不妨先試試捷徑方法 5。
既然答主提到這個 99 年 KDD 的數(shù)據(jù),那么我就以這個數(shù)據(jù)集為例來回答。
在進(jìn)行各種維度變換和復(fù)雜的處理前,一般我們希望去掉無用和低貢獻(xiàn)度的變量,這會大大降低后續(xù)的處理難度。
單一值變量:整個數(shù)據(jù)中該值取值恒定,因此對于模型無貢獻(xiàn)。
如下圖所示,在除了預(yù)測值 (Target) 以外的 41 個值中,有兩個變量 num_outbound_cmds 和 is_host_login 在整個數(shù)據(jù)集中取值唯一,應(yīng)該被移除。于是我們成功的去掉了兩個無用變量,此時也就不用思考這兩個變量對于整體取值范圍的影響。
1.2. 移除低方差 (low variance) 的變量
和單一取值的變量相似,低方差的變量雖然取值不唯一,但整體的變化很小。我們可以通過人為設(shè)定閾值 (threshold) 來去除這種變量。以一個變量只有兩個取值為例,我們可以設(shè)定閾值來去掉低方差的變量。
如上圖所示,此處所調(diào)用的 Sklearn 的 API 還有一個作用就是自動移除單一取值的數(shù)據(jù),一舉兩得。
更多資料請移步 Sklearn 官方文檔: 1.13. Feature selection
2. 轉(zhuǎn)化描述變量 (convert categorical var to numeric)
如上文描述的,我們在不假設(shè)分類器的前提下,必須對描述變量轉(zhuǎn)化為數(shù)字類型變量,因?yàn)榇蟛糠炙惴o法直接處理描述變量。
描述變量一般分兩種,其轉(zhuǎn)換方法不同:
1. 有序變量。比如小學(xué),初中,高中,大學(xué)。又比如非常滿意,滿意,不滿意,極不滿意。這類變量中的可取值之間都有一種順序關(guān)系,因此不能單純的用獨(dú)熱編碼 (One-hot Encoding) 來轉(zhuǎn)化,因?yàn)樵谵D(zhuǎn)化過程中會失去順序信息。在這種情況下可以由來轉(zhuǎn)換, N 代表該變量可取的值得總數(shù)。此處也要注意,不是每種順序?qū)γ總€問題都是有意義的。比如假設(shè)一個變量可以取三個值:“頭等艙”,“商務(wù)艙”,“經(jīng)濟(jì)艙”,對于票價而言是有順序的,但對于到達(dá)時間,這三者是無序的。
2. 無序變量。比如一個公司有三個部門: 研發(fā),測試,HR。
在分類問題中我們可以簡單的使用獨(dú)熱編碼進(jìn)行轉(zhuǎn)化。
若在聚類問題中,我們一般希望度量其差異性,比較常見的是 Value Difference Metrics (VDM) 這一類。說白了就是直接看兩個點(diǎn)的這個維度是否相同,若有 N 個無序變量,我們一般構(gòu)建一個的矩陣來描述差異度(Degree of Difference)。
3. 變量相關(guān)性分析及特征選擇
在進(jìn)行建模前,可以快速的查看變量之間的相關(guān)性,這對下一步的是否進(jìn)行特征選擇有比較重要的意義。我們假設(shè)在這一步的時候,已經(jīng)去除了多余變量且所有描述變量都轉(zhuǎn)化為了數(shù)字型變量。
計算變量之間的相關(guān)性可以得到一個矩陣,用于描述每兩個變量這件的相關(guān)性 (-1 代表負(fù)相關(guān),0 代表無關(guān),1 代表正相關(guān))。在可視化后 KDD99 數(shù)據(jù)的相關(guān)性圖譜后可得到下圖。
做相關(guān)性圖譜的原因是為了看一下是否存在大量的共線性 (colinearity)。 最極端的特例就是雖然特征很多,但事實(shí)上之間互相關(guān)聯(lián)性很強(qiáng),存在強(qiáng)線性關(guān)系,對于模型幫助不大。
以 KDD 的數(shù)據(jù)為例,我們可以看出變量間存在一些共線性,但并不算是極端嚴(yán)重。這告訴我們可以兩個可以嘗試的方法來處理這些變量:
特征選擇 (feature selection)
維度壓縮 (dimensionality reduction), 例如主成分分析 (PCA)
如果我們足夠幸運(yùn),看到了零共線性 (現(xiàn)實(shí)情況是不會發(fā)生的) 或者低共線性,我們大可以暫時跳過特征選擇。當(dāng)然,略過特征選擇的風(fēng)險是某個變量可能和我們要去預(yù)測的事情完全無關(guān)。
特征選擇是一個很大的話題,簡單說就是從多個變量中選擇出一部分對于分類比較重要的特征,拋棄冗余變量 (redundant variables)。
統(tǒng)計學(xué)習(xí)中一般用子集搜索 (subset),包括全搜索 (exhaustive search),貪心算法類搜索 (正向搜索,逆向搜索,和從兩邊同時搜索)。
機(jī)器學(xué)習(xí)中一般有三種特征選擇:
過濾式 (filter): 其實(shí)我們剛才查看相關(guān)性圖譜就是一種過濾式搜索的思路。在這種方法中,我們僅通過評價不同變量之間的統(tǒng)計相關(guān)性來進(jìn)行特征選擇,如 Chi Squared 和 Pearson。
包裹式 (wrapper): 和過濾式不同,包裹式特征選擇引入了分類器,通過評估不同的變量在相同分類器下的表現(xiàn)來選擇最優(yōu)的變量。注意,選擇出的 "最優(yōu)變量" 可能僅僅在當(dāng)前分類器下表現(xiàn)好,后續(xù)使用其他分類器效果很難保證。
嵌入式 (embedding): 思路是建立分類器的同時選擇有效的變量,文章開頭處提到的 L1 正則化和很多決策樹模型都有這個特質(zhì)。
以本題中的 KDD 數(shù)據(jù)為例,或許降維是一個比特征選擇更加劃算的做法。主成分分析即將高維數(shù)據(jù)投射到一個低維空間中來壓縮和合并。
在非線性降維領(lǐng)域,流形學(xué)習(xí) (manifold learning) 現(xiàn)在正大行其道,有興趣的朋友可以關(guān)注一下。
此處必須提醒大家 PCA 和大部分流形學(xué)習(xí)都要求數(shù)據(jù)的歸一化,我們稍后會簡單介紹。
4. 歸一化 (Normalization) 和標(biāo)準(zhǔn)化 (Standardization)
歸一化和標(biāo)準(zhǔn)化是兩種常見的數(shù)據(jù)轉(zhuǎn)換方法,但這兩種方法有一定的風(fēng)險,我并不推薦一上來就先進(jìn)行歸一化或者標(biāo)準(zhǔn)化。這類數(shù)據(jù)轉(zhuǎn)化方法存在的意義有很多,比較常見的應(yīng)用是統(tǒng)距離度量 (distance estimation) 時的范圍。簡單來說,以 KNN 為例,我們計算兩個數(shù)據(jù)點(diǎn)的相似度為其幾何距離,那么如果不同變量的可取值區(qū)間不同甚至相差巨大,那么可能會有部分變量有過大的影響力。
歸一化和標(biāo)準(zhǔn)化的目標(biāo)都是將元數(shù)據(jù)投射到一個規(guī)范區(qū)間中,如 [0,1] 。給出一個最簡單的標(biāo)準(zhǔn)化例子,假設(shè)原數(shù)據(jù) [1,2,3,4,5]通過一種最簡單的轉(zhuǎn)化為 [0,0.25,0.5,0.75,1] 。由此可見我們可以人為的控制數(shù)據(jù)的投射范圍,但不可避免的數(shù)據(jù)中的一部分信息可能會遺失。
相關(guān)的算法還有很多且資料很多,不在此贅述,如主成分分析中使用的 z-score 規(guī)范化:
5. 什么模型對于高方差且變量類型復(fù)合比較友善?
像我在答案開頭提到的,比較穩(wěn)定的是以決策樹為基學(xué)習(xí)器的集成學(xué)習(xí):
在分類問題中,不妨先試試隨機(jī)森林 (Random Forests)。
回歸問題中可以試試 Gradient Boosted Tree Regression。
這一類模型都可以很好的做到降低高方差、處理非線性關(guān)系、選擇有效特征。對于 KDD99 的比賽,如果那個時候已經(jīng)有了隨機(jī)森林 (2001 年的論文) 的話,可能冠軍會是 Breiman 吧:)
祝大家煉丹愉快 (?????)
不靈叔@雷鋒網(wǎng)
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。