數(shù)據(jù)缺失的坑,無監(jiān)督學(xué)習(xí)這樣幫你補了
無監(jiān)督學(xué)習(xí)(UL)有很多沒開發(fā)的潛力。它是一門從“未標(biāo)記”數(shù)據(jù)中推導(dǎo)一個函數(shù)來描述其隱藏結(jié)構(gòu)的藝術(shù)。但首先,從數(shù)據(jù)中找到其結(jié)構(gòu)是什么意思呢? 讓我們來看以下兩個例子:
Blobs
氣泡狀分布:這個簡單。任何人看到這張圖都會認為它是由三個不同的簇組成的。如果你對統(tǒng)計學(xué)非常熟悉,你可能還會猜想它由三個隱藏的高斯分布構(gòu)成。對一個新的數(shù)據(jù)樣本,查看它的位置,人們就能推斷出它屬于哪一簇。
Wavy hi
波浪分布:這個就有難度了。它有明確的結(jié)構(gòu),但我怎么教計算機提取出這一結(jié)構(gòu)呢?為了讓你更好地理解這個問題,想象一下我找來1000人,問他們在這張圖中看到了幾個簇。結(jié)果很可能是這樣,回答2的人最多,也有人回答3、4,甚至1!
所以說對數(shù)據(jù)的結(jié)構(gòu),連人都無法達成共識,那怎么可能教計算機學(xué)會呢?這里的癥結(jié)在于,對于什么是簇,或者廣義地說什么是“結(jié)構(gòu)”,沒有統(tǒng)一的定義。人們可以研究一下日常生活的某個方面,看它有沒有結(jié)構(gòu),但這也會根據(jù)環(huán)境或其中涉及的人的變化而變化。
很多著名的無監(jiān)督學(xué)習(xí)算法,比如層次聚類,K-Means,混合高斯模型或隱馬爾可夫模型,對同一問題可能得到不同的答案,依我拙見,對于找結(jié)構(gòu)問題,沒有所謂更好的或更正確的普適方法(真的嗎?又是沒有免費的午餐定理?)
那么讓我們動手探索吧——
聚類方法
- K-Means(scikit learn)
- 模糊K-Means(scikit fuzzy)
- 混合高斯模型(scikit learn)
用K-Means算法產(chǎn)生簇通常被稱為“硬劃分”,因為對一個樣本和一個簇,只有屬于和不屬于兩種關(guān)系。K-Means的改進版模糊K-Means算法是“軟劃分”或“模糊”,因為一個樣本對每個簇都有隸屬度。基于這些隸屬度來更新簇的質(zhì)心。
混合高斯模型https://github.com/abriosi/gmm-mml
這個包是論文Unsupervised learning of finite mixture models(有限混合模型的無監(jiān)督學(xué)習(xí))中提出的方法,用一個算法實現(xiàn)估計和模型選擇。
數(shù)據(jù)集
1. 占有率檢測:
這是一個沒有缺失值的時間序列數(shù)據(jù)集,因此要人為刻意地進行空缺數(shù)據(jù)補全。
這一數(shù)據(jù)集相對較小,有20560個樣本和7個特征,其中一個模型預(yù)測變量為是否占有。(二元分類問題)。
2. Sberbank俄羅斯房價市場數(shù)據(jù)集:
這也是一個時序數(shù)據(jù)集,來自數(shù)月前結(jié)束的Kaggle競賽。
將訓(xùn)練數(shù)據(jù)與俄羅斯宏觀經(jīng)濟和金融部門的數(shù)據(jù)合并后,得到30471個樣本,389個特征,其中一個是要預(yù)測的價格(回歸問題)。
它有93列有缺失數(shù)據(jù),有些NaNs(非指定類型數(shù)據(jù))占比很大(> 90%)。
3.子宮頸癌(危險因素)數(shù)據(jù)集:
這一數(shù)據(jù)集有858個樣本和32個特征,4個目標(biāo)變量(不同醫(yī)學(xué)測試指標(biāo)的二元輸出)取眾數(shù)轉(zhuǎn)化成1個目標(biāo)變量。
它有26個特征有空缺值,有些NaNs(非指定類型數(shù)據(jù))占比很大(> 90%)。
數(shù)據(jù)缺失值補全過程
先刪去訓(xùn)練集和測試集中所有含有缺失數(shù)據(jù)的特征。利用留下的特征,對訓(xùn)練集應(yīng)用聚類算法,并預(yù)測兩組中每個樣本的簇。加上刪去的列,計算按照簇分組后每個特征的平均值(或均值,如果是定性的話)。所以現(xiàn)在我們有了每個簇未補全時的特征的平均值。
“普通”和加權(quán)補全方法:
- 這里“普通補全”指的是每個樣本都用以計算其所屬簇的平均值/眾數(shù)。
- 加權(quán)方法則用樣本對每個簇的“歸屬度”。比如,在混合高斯模型(GMM)中,歸屬度是樣本屬于各個簇的可能性,在K-Means方法中,歸屬度基于樣本與各個簇的質(zhì)心的距離。
評分方法
- 除標(biāo)準(zhǔn)化之外,幾乎沒對數(shù)據(jù)集做任何處理。
- 對于時間序列數(shù)據(jù)集,從***個樣本算起對時間標(biāo)記排序,在占有率檢測數(shù)據(jù)集中轉(zhuǎn)化成按秒計數(shù),同理在俄羅斯房價市場數(shù)據(jù)集中按天計數(shù)。
- 完成插補后,用XGBoost在測試集進行評分。用負對數(shù)損失和均方誤差作為評分度量。
得到簇的數(shù)目
最初考慮了“肘”或者說“膝”方法。當(dāng)簇的數(shù)量取值在一定范圍內(nèi)時,畫出不同聚簇方法的得分并從圖中尋找肘部。
比如,上圖的肘部在8到12之間。缺點是這種方法需要人的參與來選擇肘部,而實際應(yīng)用上應(yīng)該自動。但自動選擇肘部效果并不理想,因此可以考慮一種新方法。
通過交叉驗證,得到了一種比較有效但計算成本昂貴的方法。它是怎么工作的呢?首先選擇一個分類器,然后對于一系列質(zhì)心數(shù)目,進行無監(jiān)督插補,并用該分類器進行K-fold交叉驗證。***選擇在交叉驗證中表現(xiàn)更好的質(zhì)心數(shù)目。
結(jié)果
在條形圖中,用紅線標(biāo)記平均值插補的分數(shù),以便進行比較。
占有率檢測數(shù)據(jù)集:
誠如之前提到的,這個數(shù)據(jù)集并沒有缺失數(shù)據(jù),所以只能模擬補缺行為。
對將要補缺的數(shù)據(jù)特征和樣本應(yīng)當(dāng)謹慎挑選。不僅特別選擇了數(shù)據(jù)特征,而且對是否選擇樣本設(shè)定了概率。如果概率為0.5,有50%的機會該樣本將被丟棄。由于每次填補缺失值的樣本選擇都不同,我們將每三輪不同樣本補缺的評分結(jié)果取均值,***再對所有結(jié)果取均值。

房產(chǎn)市場數(shù)據(jù)集:
由于該數(shù)據(jù)集的數(shù)據(jù)量過大,怎樣在有限的內(nèi)存中完成聚類分析值得研究一番。我們放棄了使用全量數(shù)據(jù)做歸類計算的打算,隨機抽取了適合電腦內(nèi)存的樣本數(shù)據(jù)量(本次測試我選用了5000條記錄)。
在原始數(shù)據(jù)集中使用隨機抽樣的方法抽取樣本,也盡量保持了數(shù)據(jù)的時間結(jié)構(gòu)。樣本的數(shù)據(jù)量越大,反映的時間結(jié)構(gòu)越準(zhǔn)確。
子宮頸癌數(shù)據(jù)集:
結(jié)果分析
根據(jù)結(jié)果,在數(shù)據(jù)分群的基礎(chǔ)上選擇補缺方式的表現(xiàn)比一般方法要好。
對于占有率檢測數(shù)據(jù)集,表現(xiàn)最優(yōu)的是GMM_MML分類算法,而對于房產(chǎn)市場數(shù)據(jù)和宮頸癌數(shù)據(jù)集,K_Means聚類算法更好。我們并沒有對房產(chǎn)市場數(shù)據(jù)使用GMM_MML算法,因為它包含太多特征,而協(xié)方差的計算對于多特征數(shù)據(jù)比多樣本量數(shù)據(jù)更加困難。
在增加占有率檢測數(shù)據(jù)集的缺失數(shù)據(jù)后,整體上可以觀測到,無監(jiān)督的補缺方法比均值補缺表現(xiàn)要好。因此,當(dāng)數(shù)據(jù)集有缺失值占比較高時,先探索數(shù)據(jù)結(jié)構(gòu)再補缺方法反而形成一種優(yōu)勢。
大家會注意到,當(dāng)使用檢測數(shù)據(jù)集的缺失數(shù)據(jù)特征從2個增加到4個,且用于聚類的特征數(shù)量減少時,無監(jiān)督補缺方法比均值補缺表現(xiàn)稍好。這種反常的現(xiàn)象可能是由于特定的數(shù)據(jù)集和選擇的特征造成的。
同時,自然的,當(dāng)缺失數(shù)據(jù)占比增加時,評分與基線分數(shù)的差距越來越大。
在三種K_Means算法中,普通型表現(xiàn)優(yōu)于其他兩種。這種算法每次迭代的計算量也最小,是較佳選擇。
基于GMM方法的表現(xiàn)優(yōu)于K-Means算法,這一現(xiàn)象十分合理,因為K-Means算法是GMM算法在歐式距離計算上的啟發(fā)式算法。歐式距離能有效測量低維數(shù)據(jù),但在高維空間上,其含義開始失真。如想了解更多信息,請看這里(https://stats.stackexchange.com/questions/99171/why-is-euclidean-distance-not-a-good-metric-in-high-dimensions/)。GMM算法是基于樣本所屬概率密度函數(shù)的可能性,能更好的衡量高維空間距離。
結(jié)論
盡管基于聚類的缺失值補充算法沒有明顯高過其他算法的優(yōu)勝者,我們還是建議選擇基于GMM的算法。
想找到模型混合的較佳數(shù)量,使用交叉驗證法會更好。盡管AIC準(zhǔn)則和BIC準(zhǔn)則需要大量計算,他們可以用于檢測模型混合數(shù)量的范圍。較佳數(shù)量會令準(zhǔn)則值達到最小。
計算協(xié)方差矩陣有很多方法。這里介紹兩種最常使用的:
- 對角協(xié)方差:每個部分都有自己的對角矩陣。
- 全協(xié)方差:這種協(xié)方差用于統(tǒng)計檢測。每個部分有自己的廣義協(xié)方差矩陣。
數(shù)據(jù)集中如果特征維度太多,使用GMM算法計算協(xié)方差矩陣,可能因為樣本量不足計算錯誤,也可能因為使用全量數(shù)據(jù)耗時太久。因此建議使用對角協(xié)方差,更加平衡模型大小和計算質(zhì)量。
如果數(shù)據(jù)量大大超過內(nèi)存容量,應(yīng)當(dāng)從訓(xùn)練集中生成隨機樣本做聚類分析。
均值補缺的表現(xiàn)沒有比基于聚類補缺方法差很多,因此也可以考慮使用。
后續(xù)工作
數(shù)據(jù)整理也可以嘗試新方法:不再丟棄有缺失數(shù)據(jù)的特征,可以用均值或中位數(shù)填補缺失值,對修改后的數(shù)據(jù)集使用聚類分析。補缺可以在每個樣本被標(biāo)記后完成。
Finite Mixture Models (McLachlan和Peel著)這本書中提到NEC和ICL都是很好的方法。
也有更多無監(jiān)督方法值得研究檢測,例如,不同距離度量方法下的分級聚類。當(dāng)然,普適的方法可能并不存在,畢竟沒有免費的午餐。