閱讀666 返回首頁    go 阿裏雲 go 技術社區[雲棲]


數據缺失的坑,無監督學習這樣幫你補了


9


無監督學習(UL)有很多沒開發的潛力。它是一門從“未標記”數據中推導一個函數來描述其隱藏結構的藝術。但首先,從數據中找到其結構是什麼意思呢? 讓我們來看以下兩個例子:


8

氣泡狀分布:這個簡單。任何人看到這張圖都會認為它是由三個不同的簇組成的。如果你對統計學非常熟悉,你可能還會猜想它由三個隱藏的高斯分布構成。對一個新的數據樣本,查看它的位置,人們就能推斷出它屬於哪一簇。


7

波浪分布:這個就有難度了。它有明確的結構,但我怎麼教計算機提取出這一結構呢?為了讓你更好地理解這個問題,想象一下我找來1000人,問他們在這張圖中看到了幾個簇。結果很可能是這樣,回答2的人最多,也有人回答3、4,甚至1!

所以說對數據的結構,連人都無法達成共識,那怎麼可能教計算機學會呢?這裏的症結在於,對於什麼是簇,或者廣義地說什麼是“結構”,沒有統一的定義。人們可以研究一下日常生活的某個方麵,看它有沒有結構,但這也會根據環境或其中涉及的人的變化而變化。

很多著名的無監督學習算法,比如層次聚類,K-Means,混合高斯模型或隱馬爾可夫模型,對同一問題可能得到不同的答案,依我拙見,對於找結構問題,沒有所謂更好的或更正確的普適方法(真的嗎?又是沒有免費的午餐定理?)

那麼讓我們動手探索吧——


聚類方法

  1. K-Means(scikit learn)
  2. 模煳K-Means(scikit fuzzy)
  3. 混合高斯模型(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%)。


數據缺失值補全過程

先刪去訓練集和測試集中所有含有缺失數據的特征。利用留下的特征,對訓練集應用聚類算法,並預測兩組中每個樣本的簇。加上刪去的列,計算按照簇分組後每個特征的平均值(或均值,如果是定性的話)。所以現在我們有了每個簇未補全時的特征的平均值。


6

“普通”和加權補全方法:

這裏“普通補全”指的是每個樣本都用以計算其所屬簇的平均值/眾數。

加權方法則用樣本對每個簇的“歸屬度”。比如,在混合高斯模型(GMM)中,歸屬度是樣本屬於各個簇的可能性,在K-Means方法中,歸屬度基於樣本與各個簇的質心的距離。


評分方法

除標準化之外,幾乎沒對數據集做任何處理。

對於時間序列數據集,從第一個樣本算起對時間標記排序,在占有率檢測數據集中轉化成按秒計數,同理在俄羅斯房價市場數據集中按天計數。

完成插補後,用XGBoost在測試集進行評分。用負對數損失和均方誤差作為評分度量。


得到簇的數目

最初考慮了“肘”或者說“膝”方法。當簇的數量取值在一定範圍內時,畫出不同聚簇方法的得分並從圖中尋找肘部。

5

比如,上圖的肘部在8到12之間。缺點是這種方法需要人的參與來選擇肘部,而實際應用上應該自動。但自動選擇肘部效果並不理想,因此可以考慮一種新方法。

通過交叉驗證,得到了一種比較有效但計算成本昂貴的方法。它是怎麼工作的呢?首先選擇一個分類器,然後對於一係列質心數目,進行無監督插補,並用該分類器進行K-fold交叉驗證。最後選擇在交叉驗證中表現更好的質心數目。


結果

在條形圖中,用紅線標記平均值插補的分數,以便進行比較。

占有率檢測數據集:

誠如之前提到的,這個數據集並沒有缺失數據,所以隻能模擬補缺行為。

對將要補缺的數據特征和樣本應當謹慎挑選。不僅特別選擇了數據特征,而且對是否選擇樣本設定了概率。如果概率為0.5,有50%的機會該樣本將被丟棄。由於每次填補缺失值的樣本選擇都不同,我們將每三輪不同樣本補缺的評分結果取均值,最後再對所有結果取均值。

4

房產市場數據集:

由於該數據集的數據量過大,怎樣在有限的內存中完成聚類分析值得研究一番。我們放棄了使用全量數據做歸類計算的打算,隨機抽取了適合電腦內存的樣本數據量(本次測試我選用了5000條記錄)。

在原始數據集中使用隨機抽樣的方法抽取樣本,也盡量保持了數據的時間結構。樣本的數據量越大,反映的時間結構越準確。


3

子宮頸癌數據集:

2


結果分析

根據結果,在數據分群的基礎上選擇補缺方式的表現比一般方法要好。

對於占有率檢測數據集,表現最優的是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準則需要大量計算,他們可以用於檢測模型混合數量的範圍。最佳數量會令準則值達到最小。

計算協方差矩陣有很多方法。這裏介紹兩種最常使用的:


1


對角協方差:每個部分都有自己的對角矩陣。
全協方差:這種協方差用於統計檢測。每個部分有自己的廣義協方差矩陣。

數據集中如果特征維度太多,使用GMM算法計算協方差矩陣,可能因為樣本量不足計算錯誤,也可能因為使用全量數據耗時太久。因此建議使用對角協方差,更加平衡模型大小和計算質量。

如果數據量大大超過內存容量,應當從訓練集中生成隨機樣本做聚類分析。

均值補缺的表現沒有比基於聚類補缺方法差很多,因此也可以考慮使用。

後續工作

數據整理也可以嚐試新方法:不再丟棄有缺失數據的特征,可以用均值或中位數填補缺失值,對修改後的數據集使用聚類分析。補缺可以在每個樣本被標記後完成。

Finite Mixture Models (McLachlan和Peel著)這本書中提到NEC和ICL都是很好的方法。

也有更多無監督方法值得研究檢測,例如,不同距離度量方法下的分級聚類。當然,普適的方法可能並不存在,畢竟沒有免費的午餐。

原文發布時間為:2017-11-7
本文作者:文摘菌
本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“大數據文摘”微信公眾號

最後更新:2017-11-07 14:04:31

  上一篇:go  《Linux From Scratch》第二部分:準備構建 第二章:準備新分區- 2.1. 介紹
  下一篇:go  《Linux From Scratch》第一部分:介紹 第一章:介紹- 1.5. 幫助