翻譯 MICE 演算法

2021-10-13 07:21:04 字數 3987 閱讀 1609

原文:miceforest: fast imputation with random forests in python

鏈式方程的多重插補(mice,multiple imputation by chained equations)通過一系列迭代的**模型來「填充」(插補)資料集中的缺失資料。在每次迭代中,將使用資料集中的其他變數來估算資料集中的每個指定的變數,這些迭代持續執行,直到滿足收斂為止。

mice的演算法如下圖所示,這個過程會持續執行,直到所有指定的變數都被插補為止。如果出現插補的均值沒有收斂的情況,那麼將會執行更多的迭代,儘管通常不需要超過5次迭代。

mice適用的場景:

資料洩露(data leakage):如果缺失值與目標變數直接相關聯,從而導致洩漏,則mice尤其有用。 例如,假設您要對客戶保留率進行建模,在客戶註冊時或註冊後1個月通過特定變數手機客戶的登入資訊,如果該變數的值缺失,這將導致資料洩漏,因為它告訴您「客戶留存的時間沒有超過1個月」。

data leakage定義:

存在和利用這種倒『因』為『果』的feature的現象,叫資料競賽中的data leakage。 這裡的data leakage 跟其他場合說的資料安全資料洩漏完全不一樣。從字面上理解,我們說的data leakage不是資料洩漏,而是因果關係的紕漏,是由於資料準備過程**現的失誤,使模型沿著有紕漏的,甚至是顛倒的因果關係進行**,但得到極好的**結果。

舉個例子,chris老師在處理電信使用者流失的時候,用原有的資料集輕輕鬆鬆就可以把auc達到0.99以上。這讓人非常警惕。於是chris老師仔細檢視了一下模型和資料,原來資料中有乙個權重極高的feature是「3個月內的繳費紀錄」。很多流失使用者的賬戶內,這個feature的值是0。再進一步,他跟會計核實了一下,在會計記賬中,這個feature 代表的是使用者已經流失後的三個月的繳費紀錄,那肯定就是0了。這是典型的因果關係顛倒。

漏斗分析(funnel analysis):資訊通常是在「漏斗」的不同階段收集的,mice可用於對漏斗中不同階段的實體特徵進行有根據的猜測。

置信區間(confidence intervals):mice可用於插補(估算)缺失值,但是請務必記住,這些估算值是一種**,建立具有不同估算值的多個資料集可以執行兩種型別的推斷:

miceforest可以利用稱為**均值匹配(predictive mean matching,pmm)的過程來選擇要估算的值。 pmm包含從原始的、完整的資料中選擇乙個資料點,該資料點的**值接近缺失樣本的**值。選擇最接近的n個(mean_match_candidates引數)值作為候選值,從候選值中隨機選擇乙個值,這個過程可以逐列指定。

mice在實踐中的工作原理如下圖所示:

對於乙個需要插補(估算)的變數,如果該變數具有以下任意特徵,那麼此方法非常有用:

randst = np.random.randomstate(

1991

)# random uniform variable

nrws =

1000

uniform_vec = randst.uniform(size=nrws)

defmake_bimodal

(mean1,mean2,size)

: bimodal_1 = randst.normal(size=nrws, loc=mean1)

bimodal_2 = randst.normal(size=nrws, loc=mean2)

bimdvec =

for i in

range

(size)

:[bimodal_1[i]

, bimodal_2[i]])

)return np.array(bimdvec)

# make 2 bimodal variables

close_bimodal_vec = make_bimodal(2,

-2,nrws)

far_bimodal_vec = make_bimodal(3,

-3,nrws)

# highly skewed variable correlated with uniform_variable

skewed_vec = np.exp(uniform_vec*randst.uniform(size=nrws)*3

)+ randst.uniform(size=nrws)*3

# integer variable correlated with close_bimodal_variable and uniform_variable

integer_vec = np.

round

(uniform_vec + close_bimodal_vec/

3+ randst.uniform(size=nrws)*2

)# make a dataframe

dat = pd.dataframe(

)# plot the original data

import seaborn as sns

import matplotlib.pyplot as plt

g = sns.pairgrid(dat)

g.map

(plt.scatter,s=

5)

二模態資料傾向於資料分為兩個簇,偏斜分布說明資料的分布不是均勻的。

上圖中顯示了變數的分布和相關性,讓我們執行兩次插補過程,一次使用均值匹配,一次使用模型**,通過比較兩次插補的結果來比較均值匹配的效果。

# ampute the data.

ampdat = mf.ampute_data(dat,perc=

0.25

,random_state=randst)

# create kernel

kernelmeanmatch <

- mf.multipleimputedkernel(ampdat,mean_match_candidates=5)

kernelmodeloutput <

- mf.multipleimputedkernel(ampdat,mean_match_candidates=0)

kernelmeanmatch.mice(5)

kernelmodeloutput.mice(

5)

案例1,使用均值匹配

案例2,不適用均值匹配

注:紅線是原始資料,黑線是每個資料集的插補(估算)值。

從案例1和2中,可以看到均值匹配的效果更好,具體情況取決於資料的分布。從直觀上來看,簡單地從模型**中返回值,雖然可能會提供更好的「擬合」,但是並不能為插補值提供跟原始值相似的分布。這可能是有益的,具體取決於您的目標。

暴雪的hash演算法 翻譯

促進歷史進步的大多數契機都是在解決特定問題的過程中產生的,本文討論一下mpq格式的合適解決方案。mpq是暴雪的一種文字壓縮格式,可以壓縮包括座標 演算法 聲音 動畫 字串等。hashs 問題 你可能有乙個非常長的字串陣列,現在有乙個新字串,想要判斷該字串是否在陣列中,簡單粗暴的方法是挨個比較,但最大...

翻譯 11 3 泛型演算法

泛型演算法 標頭檔案宣告了一組全域性模板函式,這些函式實現了作用在容器上的基本演算法。這些函式中的多數使用stl風格迭代器。stl標頭檔案提供更完整的泛型演算法集合。這些演算法可以被用在qt容器上以及stl容器上。如果在你的所有平台上stl實現可用,當qt缺少乙個相同的演算法的時候,那麼可能沒有理由...

R 5)用mice對缺失資料進行填補

用mice包對缺失資料進行多重填補,首先要安裝mice包,安裝的時候可以直接在命令列輸入 install.packages mice data airquality 讀入r語言自帶的函式 sum is.na data 檢視缺失個數 library mice md.pattern data 檢視dat...