本方法调用ycimpute库和numpy库。
插补算法适合一些随机因素丢失的数据,例如对问卷中无效数据的填充、矩阵中缺失细节的填补等。
注意,空缺数据须用nan作为占位例如:
ycimpute库可用pip下载
pip install ycimpute
K近邻插补方法
K近邻法是数据插补里最常用、通用性最广的方法
#加载依赖库
from ycimpute.imputer import knnimput
from ycimpute.imputer import __init__
import numpy as np
#加载csv格式数据,采用英文逗号分隔,而且跳过第一行
dataset_file = 'test-data.csv'
Data = np.loadtxt(dataset_file, delimiter=",",skiprows=1)
X = Data
complete_X = knnimput.KNN(k=4).complete(X)#设置k近邻种的k值
print(complete_X)
np.savetxt('complete_X.csv',complete_X,delimiter=',')#输出在根目录,名为complete_X.csv
在此说一下K值的选择,K值对结果有很大的影响。K值可以理解为近邻范围。
K值越小越对周围的的数据敏感,很容易发生过拟合。如果再加上丢失数据附近都是噪声数据,那结果就是一个字:寄
K值越大越对周围的数据不敏感,远端数据会影响丢失数据的预测结果,模型察觉不到细微的变化,使预测发生错误。
期望最大化填充算法
#加载依赖库
from ycimpute.unsupervised import expectation_maximization
import numpy as np
#加载csv格式数据,采用英文逗号分隔,而且跳过第一行
dataset_file = 'zctest-data.csv'
Data = np.loadtxt(dataset_file, delimiter=",",skiprows=1)
X = Data
complete_X = expectation_maximization.EM().complete(X)#期望最大化填充算法
print(complete_X)
np.savetxt('complete_X.csv',complete_X,delimiter=',')
多重插补
#加载依赖库
from ycimpute.imputer import mice
from ycimpute.imputer import __init__
import numpy as np
#加载csv格式数据,采用英文逗号分隔,而且跳过第一行
dataset_file = 'test-data.csv'
Data = np.loadtxt(dataset_file, delimiter=",",skiprows=1)
X = Data
complete_X = mice.MICE().complete(X)#调用MICE函数
print(complete_X)
np.savetxt('complete_X.csv',complete_X,delimiter=',')
结果
左侧为原始数据,右侧为KNN的拟合数据