數據缺失的坑,無監督學習這樣幫你補了
無監督學習(UL)有很多沒開發的潛力。它是一門從“未標記”數據中推導一個函數來描述其隱藏結構的藝術。但首先,從數據中找到其結構是什麼意思呢? 讓我們來看以下兩個例子:
氣泡狀分布:這個簡單。任何人看到這張圖都會認為它是由三個不同的簇組成的。如果你對統計學非常熟悉,你可能還會猜想它由三個隱藏的高斯分布構成。對一個新的數據樣本,查看它的位置,人們就能推斷出它屬於哪一簇。
波浪分布:這個就有難度了。它有明確的結構,但我怎麼教計算機提取出這一結構呢?為了讓你更好地理解這個問題,想象一下我找來1000人,問他們在這張圖中看到了幾個簇。結果很可能是這樣,回答2的人最多,也有人回答3、4,甚至1!
所以說對數據的結構,連人都無法達成共識,那怎麼可能教計算機學會呢?這裏的症結在於,對於什麼是簇,或者廣義地說什麼是“結構”,沒有統一的定義。人們可以研究一下日常生活的某個方麵,看它有沒有結構,但這也會根據環境或其中涉及的人的變化而變化。
很多著名的無監督學習算法,比如層次聚類,K-Means,混合高斯模型或隱馬爾可夫模型,對同一問題可能得到不同的答案,依我拙見,對於找結構問題,沒有所謂更好的或更正確的普適方法(真的嗎?又是沒有免費的午餐定理?)
那麼讓我們動手探索吧——
聚類方法
- K-Means(scikit learn)
- 模煳K-Means(scikit fuzzy)
- 混合高斯模型(scikit learn)
用K-Means算法產生簇通常被稱為“硬劃分”,因為對一個樣本和一個簇,隻有屬於和不屬於兩種關係。K-Means的改進版模煳K-Means算法是“軟劃分”或“模煳”,因為一個樣本對每個簇都有隸屬度。基於這些隸屬度來更新簇的質心。
混合高斯模型https://github.com/abriosi/gmm-mml
這個包是論文Unsupervised learning of finite mixture models(有限混合模型的無監督學習)中提出的方法,用一個算法實現估計和模型選擇。
數據集
1. 占有率檢測:
這是一個沒有缺失值的時間序列數據集,因此要人為刻意地進行空缺數據補全。
這一數據集相對較小,有20560個樣本和7個特征,其中一個模型預測變量為是否占有。(二元分類問題)。
2. Sberbank俄羅斯房價市場數據集:
這也是一個時序數據集,來自數月前結束的Kaggle競賽。
將訓練數據與俄羅斯宏觀經濟和金融部門的數據合並後,得到30471個樣本,389個特征,其中一個是要預測的價格(回歸問題)。
它有93列有缺失數據,有些NaNs(非指定類型數據)占比很大(> 90%)。
3.子宮頸癌(危險因素)數據集:
這一數據集有858個樣本和32個特征,4個目標變量(不同醫學測試指標的二元輸出)取眾數轉化成1個目標變量。
它有26個特征有空缺值,有些NaNs(非指定類型數據)占比很大(> 90%)。
數據缺失值補全過程
先刪去訓練集和測試集中所有含有缺失數據的特征。利用留下的特征,對訓練集應用聚類算法,並預測兩組中每個樣本的簇。加上刪去的列,計算按照簇分組後每個特征的平均值(或均值,如果是定性的話)。所以現在我們有了每個簇未補全時的特征的平均值。
“普通”和加權補全方法:
這裏“普通補全”指的是每個樣本都用以計算其所屬簇的平均值/眾數。
加權方法則用樣本對每個簇的“歸屬度”。比如,在混合高斯模型(GMM)中,歸屬度是樣本屬於各個簇的可能性,在K-Means方法中,歸屬度基於樣本與各個簇的質心的距離。
評分方法
除標準化之外,幾乎沒對數據集做任何處理。
對於時間序列數據集,從第一個樣本算起對時間標記排序,在占有率檢測數據集中轉化成按秒計數,同理在俄羅斯房價市場數據集中按天計數。
完成插補後,用XGBoost在測試集進行評分。用負對數損失和均方誤差作為評分度量。
得到簇的數目
最初考慮了“肘”或者說“膝”方法。當簇的數量取值在一定範圍內時,畫出不同聚簇方法的得分並從圖中尋找肘部。
比如,上圖的肘部在8到12之間。缺點是這種方法需要人的參與來選擇肘部,而實際應用上應該自動。但自動選擇肘部效果並不理想,因此可以考慮一種新方法。
通過交叉驗證,得到了一種比較有效但計算成本昂貴的方法。它是怎麼工作的呢?首先選擇一個分類器,然後對於一係列質心數目,進行無監督插補,並用該分類器進行K-fold交叉驗證。最後選擇在交叉驗證中表現更好的質心數目。
結果
在條形圖中,用紅線標記平均值插補的分數,以便進行比較。
占有率檢測數據集:
誠如之前提到的,這個數據集並沒有缺失數據,所以隻能模擬補缺行為。
對將要補缺的數據特征和樣本應當謹慎挑選。不僅特別選擇了數據特征,而且對是否選擇樣本設定了概率。如果概率為0.5,有50%的機會該樣本將被丟棄。由於每次填補缺失值的樣本選擇都不同,我們將每三輪不同樣本補缺的評分結果取均值,最後再對所有結果取均值。
房產市場數據集:
由於該數據集的數據量過大,怎樣在有限的內存中完成聚類分析值得研究一番。我們放棄了使用全量數據做歸類計算的打算,隨機抽取了適合電腦內存的樣本數據量(本次測試我選用了5000條記錄)。
在原始數據集中使用隨機抽樣的方法抽取樣本,也盡量保持了數據的時間結構。樣本的數據量越大,反映的時間結構越準確。
結果分析
根據結果,在數據分群的基礎上選擇補缺方式的表現比一般方法要好。
對於占有率檢測數據集,表現最優的是GMM_MML分類算法,而對於房產市場數據和宮頸癌數據集,K_Means聚類算法更好。我們並沒有對房產市場數據使用GMM_MML算法,因為它包含太多特征,而協方差的計算對於多特征數據比多樣本量數據更加困難。
在增加占有率檢測數據集的缺失數據後,整體上可以觀測到,無監督的補缺方法比均值補缺表現要好。因此, 當數據集有缺失值占比較高時,先探索數據結構再補缺方法反而形成一種優勢。
大家會注意到,當使用檢測數據集的缺失數據特征從2個增加到4個,且用於聚類的特征數量減少時,無監督補缺方法比均值補缺表現稍好。這種反常的現象可能是由於特定的數據集和選擇的特征造成的。
同時,自然的,當缺失數據占比增加時,評分與基線分數的差距越來越大。
在三種K_Means算法中,普通型表現優於其他兩種。這種算法每次迭代的計算量也最小,是最佳選擇。
基於GMM方法的表現優於K-Means算法,這一現象十分合理,因為K-Means算法是GMM算法在歐式距離計算上的啟發式算法。歐式距離能有效測量低維數據,但在高維空間上,其含義開始失真。如想了解更多信息,請看這裏(https://stats.stackexchange.com/questions/99171/why-is-euclidean-distance-not-a-good-metric-in-high-dimensions/)。GMM算法是基於樣本所屬概率密度函數的可能性,能更好的衡量高維空間距離。
結論
盡管基於聚類的缺失值補充算法沒有明顯高過其他算法的優勝者,我們還是建議選擇基於GMM的算法。
想找到模型混合的最佳數量,使用交叉驗證法會更好。盡管AIC準則和BIC準則需要大量計算,他們可以用於檢測模型混合數量的範圍。最佳數量會令準則值達到最小。
計算協方差矩陣有很多方法。這裏介紹兩種最常使用的:
對角協方差:每個部分都有自己的對角矩陣。
全協方差:這種協方差用於統計檢測。每個部分有自己的廣義協方差矩陣。
數據集中如果特征維度太多,使用GMM算法計算協方差矩陣,可能因為樣本量不足計算錯誤,也可能因為使用全量數據耗時太久。因此建議使用對角協方差,更加平衡模型大小和計算質量。
如果數據量大大超過內存容量,應當從訓練集中生成隨機樣本做聚類分析。
均值補缺的表現沒有比基於聚類補缺方法差很多,因此也可以考慮使用。
後續工作
數據整理也可以嚐試新方法:不再丟棄有缺失數據的特征,可以用均值或中位數填補缺失值,對修改後的數據集使用聚類分析。補缺可以在每個樣本被標記後完成。
Finite Mixture Models (McLachlan和Peel著)這本書中提到NEC和ICL都是很好的方法。
也有更多無監督方法值得研究檢測,例如,不同距離度量方法下的分級聚類。當然,普適的方法可能並不存在,畢竟沒有免費的午餐。
原文發布時間為:2017-11-7
本文作者:文摘菌
本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“大數據文摘”微信公眾號
最後更新:2017-11-07 14:04:31