使用python进行缺失数据估算(missing data imputation in python)

Missing data imputation with Impyute

在缺失值填充中,python中有一些开源的方法。
这些方法主要是包括:
删除法(most searched in google,but do nothing to impute the missing data),均值法,回归法,KNN,MICE,EM等。
首先介绍其中一个常见的包:impyute 这是其用户文档

使用KNN进行插值

from impyute.imputation.cs import fast_knn
import pandas as pd
import numpy as np

df = pd.DataFrame([[np.nan,2,np.nan,0],
                  [3,4,np.nan,1],
                  [np.nan,np.nan,np.nan,5],
                  [5,np.nan,8,10]],
                  columns = list('ABCD'))

imputed_training = fast_knn(df,k=2)
print(imputed_training)

使用MICE进行插值

from impyute.imputation.cs import mice
imputer_mice = mice(df) ##df如上所定义的数据

这是这个类提供的数据的采样的方法

from impyute.dataset import randu
raw_data = randu() ##ranu是其中提供的方法,它会首先生成一个5*5的矩阵数据,然后进行0.2缺失的随机采样处理
complete_data = mice(raw_data)  # 使用mice方法进行缺失数据估算
print(complete_data)

回归正题,impyute还有em算法的实现,有空再补充。

通过神经网络拟合

还可以使用dataWig(开源库),基于deep learning来进行估算。

import datawig

df_train, df_test = datawig.utils.random_split(train)

#Initialize a SimpleImputer model
imputer = datawig.SimpleImputer(
    input_columns=['1','2','3','4','5','6','7', 'target'], # column(s) containing information about the column we want to impute
    output_column= '0', # the column we'd like to impute values for
    output_path = 'imputer_model' # stores model data and metrics
    )

使用sklearn中提供的方法

sklearn官方用户手册[1]。

import numpy as np
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')  #策略包括: ["mean", "median", "most_frequent", "constant"]
imp.fit([[1, 2], [np.nan, 3], [7, 6]])  
X = [[np.nan, 2], [6, np.nan], [7, 6]]
print(imp.transform(X))      

逛官网好玩多了!!

闲杂补充

python最有意思的在于其有很多强大的库,我们可以在平时积累一些小工具。

numpy中提供的随机采样

np.random.uniform(low,high,size)
# 功能是从一个均匀分布中[low,high)中进行随机采样,左闭右开区间。low与high都是float类型。size为int或tuple类型。

使用进度条
一个有用的小包,当我们在训练机器学习时,往往需要进行多次迭代,这里可以将迭代的形式从如下的形式

for i in range(1000)
	# do your work
	pass

改成具有python包支持tqdm,那么输出进度条效果

from tqdm import tqdm

for i in tqdm(range(1000))
    # do something
    pass

你可能感兴趣的:(python,imputation)