小派看數據|實戰演練:DataCastle競賽之藥物分子篩選——缺失值填充
更多內容請關注微信公眾號:「小派看數據」
前言:
本期小派會對DataCastle正在進行中的藥物分子篩選大賽進行缺失值分析以及處理賽。大賽傳送門:基於人工智慧的藥物分子篩選。本次大賽是由晶泰科技(XtalPi)主辦,利用人工智慧演算法構建蛋白質和小分子的親和力預測模型,用於篩選有效的藥物候選分子。對於初學者或是專業的數據科學人員,都是非常值得一試的賽事。
主辦方晶泰科技(XtalPi)是一家世界領先的以計算驅動創新的藥物研發科技公司,應用量子物理、分子動力學、人工智慧與雲計算等技術,為全球創新葯企提供智能化藥物研發科技。總部與子公司分別坐落於深圳、北京、波士頓。獲獎的小夥伴不僅可以得到豐厚的獎金,同時還可獲得實習崗位。
案例背景:
蛋白質擔負著生命體的各種生理功能,是生物性狀的直接表達者。蛋白質與小分子化合物的相互作用是進行藥物設計的基礎。在分子水平上深入研究蛋白質與藥物分子的結合機理有助於為篩選及研發藥效高、應用廣及毒副作用小的新葯提供豐富的計算依據。
本期我們會使用大賽中的部分小分子信息數據(df_molecule.csv),對其中的缺失值做分析與處理。填充的方法包含:均值眾數填充法、隨機森林填充法與預測均值匹配法。
數據源:df_molecule.csv
預計操作耗時:20-25分鐘
小派認為,在缺失值處理時R相比Python的優勢明顯。Python已有的sklearn與fancyimpute等包,相比R的缺失值填充包來說,不僅是方法種類上有限,其次對填充好的備選數據的可操作性也具有局限性。本次案例小派選擇使用R語言來處理數據。
數據詳情:
本次案例我們只截取了df_molecule.csv中的Honey_bee_toxicity(蜜蜂毒性測試)、Cell_permeability(細胞滲透性)、LogP(油水分配數)、Renal_organic_cation_transporter(腎臟陽離子運輸性)、CLtotal(血漿清除率)、Hia(人體腸道吸收水平)6個特徵,30個觀察值。數據基本信息如下:
從AtomPai的數據統計上可以看到,6個特徵都是數值型數據,各變數擁有的缺失值個數分別是8、0、3、0、2、3。
均值眾數填充法:
利用均值和眾數填充缺失值,是很多數據分析者常用的一種方法。對於連續型變數用均值填充,類別型變數用眾數填充。它的特點在於快捷方便,但缺點也非常明顯,就是很可能會改變數據的分布,手動增加雜訊。當我們處理高精度、大數據量的數據時,不建議使用這種方法填補缺失值。
通過AtomPai的自動判別,我們看到這6個特徵全為數值型變數,所以我們採取均值填充法對各特徵進行填充:
dat_avg=datfor(i in 1:ncol(dat)){dat_avg[,i][is.na(dat_avg[,i])]=mean(dat_avg[,i],na.rm=T)}
dat為原始矩陣,dat_avg為用均值填充後的矩陣。如何判斷缺失值填充的好壞是當下數據科學領域無法100%解決的問題,在這裡小派選擇了一種通過查看是否遵循原始分布的方式當作參考建議,不能作為評判標準。實現skewness計算的步驟為:
ske1=numeric(0)ske2=numeric(0)for(i in 1:ncol(dat)){ sk1=skewness(na.omit(dat[,i])) sk2=skewness(dat_avg[,i]) ske1=cbind(ske1,sk1) ske2=cbind(ske2,sk2)}ske3=abs(ske1-ske2)ske_dat=rbind(ske1,ske2,ske3)
最終結果如下:
從結果中可以看出,hia變數的分布被改變最多,偏態性向右平移了0.0997。總體來說所有變數都沒有太大的skewness的改變。
隨機森林填充法:
隨機森林的原理是利用多個樹模型進行訓練來進行預測,在被用來進行缺失值填充時,理論上是數據集需要有完整的因變數,即標籤變數。其演算法是以標籤變數為基準而進行預測。因本次案例分析只使用比賽部分數據舉例,所以不再單獨加入標籤變數,代碼如下:
library(missForest)dat.imp = missForest(dat)dat_rand=dat.imp$ximpdat.imp$OOBerror
最後一行返回NRMSE,小於15%的時候一般被認為填充方法可接受。我們得出的結果為0.47,說明填充效果並不好。我們再看下skewness矩陣:
Honey_bee與Cltotal變數相比均值填充法,分布平移的更多,而logP與hia的平移有小幅度減少。
預測均值匹配法:
mice包是R語言中常用的插補缺失值的方法,methods(mice)中可以查到其包含的所有插補方法。這裡我們使用均值預測方法來進行插補,操作如下:
library(mice)imp.mice <- mice(dat,m=1, maxit = 50, method = pmm, seed = 500)dat_ppm=complete(imp.mice,1)
插補後的數據與原始數據的分布情況如下:
相比均值填充法,只有hia的平移幅度減少,其餘變數對比原始數據全都有了更大的skewness絕對差值。
總結:
本次案例分析中,使用了三個比較常用的缺失值填充法來填充數據。雖然每一個方法我們都導出了skewness矩陣,然而其只可作為參考,並不能作為評判標準。如何去選定最好的缺失值填充方法,需要結合數據特點與預測需求,在探索與嘗試中找到最好的方法。即使在訓練集上通過對比預測準確度來導出最優填充法,也不能證明在預測集上有最好的表現。
還有一種本次案例分析沒有涉及的方法,是將缺失值單獨作為一個變數去預測。這種方式有可能會大幅度增加數據維度,增加計算成本。在成本可控的情況下是最常被選擇的一種方法。
本次案例分析到這裡就結束了,大家是不是對本次比賽的數據也躍躍欲試了?小派再貼一次大賽傳送門:基於人工智慧的藥物分子篩選。5W獎金,深圳、北京、波士頓三地實習崗位,個人、高等院校、科研單位、企業、創客團隊等人員均可報名參賽,歡迎大家踴躍參賽。
對於文章或大賽,有任何疑問都可以直接評論文章或給小派留言。
數無不知,盡在AtomPai。
推薦閱讀:
※機器學習技法筆記9:決策樹
※一樣的打遊戲,不一樣的酷
※更加智能的決策樹:回歸樹
※有bioinformatics, ML, 或者phd生涯問題的同學,可以私信我
※機器學習演算法實踐—K-Means演算法與圖像分割