在缺失值填充中,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官方用户手册[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