文章目录

  • 1.数据集介绍:
  • 2.制造缺失值数据
  • 3.缺失值插补
    • 3.1单一插补
    • 3.2多重插补
    • 3.3多分类数据
    • 3.4已知数据分布(eg:泊松分布)
    • 3.5使用GBDT进行插补
    • 3.6使用同一模型进行插补
    • 3.8PMM均值预测(mean_match_candidates)
    • 3.7自定义插补
  • 4.多重插补的筛选和使用

1.数据集介绍:

数据集(客户违约数据集)所有行列都有缺失值,一共有六个变量,1001条记录

2.制造缺失值数据

#读入数据集
data=pd.read_excel("E:\机器学习数据\miceforest.xlsx")
#使用miceforest来对完整数据随机截取缺失值
A_data_missing=mf.ampute_data(data.iloc[:,1:6],perc=0.25,random_state=1)
#输出缺失百分比
print(A_data_missing.isnull().sum()/len(data))

输出缺失数据所占百分比:

月收入       0.255
年龄        0.259
性别        0.256
历史授信额度    0.262
历史违约次数    0.260
信用评分      0.261

对数据前6列除“是否违约记录”外进行缺失值处理,并使其百分比占25%

3.缺失值插补

3.1单一插补

# 使用单一值插补
kds = mf.ImputationKernel(data=A_data_missing,datasets=1,#dataset=1,就是缺失值插补save_models=1,#取值大于等于0,当等于1时表明只保留获得的最后结果的模型save_all_iterations=True,#保留所有的中间结果random_state=10
)

3.2多重插补

# 使用多重插补
kds = mf.ImputationKernel(data=A_data_missing,datasets=4,save_models=1,#取值大于等于0,当等于1时表明只保留获得的最后结果的模型save_all_iterations=True,#保留所有的中间结果random_state=10
)
kds.mice(iterations=3,#n_jobs=2,n_estimators=50)#每个数据集迭代三次,n_jobs并行化数量,当其等于-1时表明使用的是最大化并行,n_estimators控制树的生长
completed_dataset = kds.complete_data(dataset=1, inplace=False)#dataset=1,代表要的是di2个数据集,取值范围因为datasets=4,所以只能为0-3
#使用inplace=False返回已完成数据的副本。由于原始数据已经存储在 中kernel.working_data,您可以设置 inplace=True完成数据而不返回副本
print(completed_dataset.isnull().sum(0))

3.3多分类数据

#如果某一列是多分类数据,那么进行插补可能需要更多的时间,那么可以通过如下方式单独减少n_estimators,在这种情况下,指定的任何参数variable_parameters都将优于第一种方式kwargs。
#kds.mice(iterations=1,variable_parameters={'历史违约次数': {'n_estimators': 25}},n_estimators=50)

3.4已知数据分布(eg:泊松分布)

#如果已知数据分布的话,可以单独对该列数据进行插补(以泊松分布为例)
#例如历史违约次数是泊松分布
# Create kernel.
cust_kernel = mf.ImputationKernel(data=A_data_missing,datasets=1,random_state=1
)
cust_kernel.mice(iterations=1, variable_parameters={'历史违约次数': {'objective': 'poisson'}})

3.5使用GBDT进行插补

#想要使用GBDT来进行插补
kds_gbdt = mf.ImputationKernel(data=A_data_missing,datasets=1,save_all_iterations=True,random_state=1991
)
# 我们需要添加一个小的最小 hessian,否则 lightgbm 会报错:
kds_gbdt.mice(iterations=1, boosting='gbdt', min_sum_hessian_in_leaf=0.01)

3.6使用同一模型进行插补

#新创建一个数据集是不同的缺失率
A_data_missing1=mf.ampute_data(data.iloc[:,0:6],perc=0.4,random_state=1)
#可以直接调用上面训练好的模型进行缺失值填补,其实际用处就是可以用一部分的数据子集,对模型进行训练然后对整体数据进行填补,提高模型效率
kds.impute_new_data(A_data_missing1)
completed_dataset1=kds.complete_data(0)

3.8PMM均值预测(mean_match_candidates)

使用参数mean_match_candidates,mean_match_candidates=5,代表用与预测值最接近的5个样本值的均值(或者投票)作为缺失值填补
它不使用预测出来的值作为缺失值,而是通过预测出来的值寻找相邻预测值,再映射回原数据,使用原数据统计量进行填补

cust_kernel = mf.ImputationKernel(data=A_data_missing,datasets=3,mean_match_candidates=5,
)
var_mmc = {'年龄': 5,'性别': 3
}
cust_kernel = mf.ImputationKernel(data=A_data_missing,datasets=3,mean_match_candidates=var_mmc
)

3.7自定义插补

可以通过变量自定义插补程序,通过把命名列表(named list)传递给参数variable_schema,可以为每个要插补的变量指定预测变量(就是哪个变量要用哪些变量来预测),还可以选择哪些变量应该使用均值匹配(mean matching)来插补,即通过把dict传递给参数mean_match_candidates来指定哪些变量使用均值匹配来插补缺失值。
eg:年龄用性别和月收入来预测,且年龄和性别选择均值预测

var_sch = {'年龄': ['性别','月收入'],'信用评分': ['月收入','历史违约次数']
}
var_mmc = {'年龄': 5,'性别': 2
}
kds = mf.ImputationKernel(data=A_data_missing,datasets=4,save_models=1,#取值大于等于0,当等于1时表明只保留获得的最后结果的模型save_all_iterations=True,#保留所有的中间结果random_state=10,variable_schema=var_sch,mean_match_candidates=var_mmc
)

4.多重插补的筛选和使用

当多重插补得到多个插补数据集之后可以对每个数据集取其插补后平均值(或者其他统计量)与原始数据集最相近的数据然后重新合并为一个数据集。

kds = mf.ImputationKernel(data=A_data_missing,datasets=4,save_models=1,#取值大于等于0,当等于1时表明只保留获得的最后结果的模型save_all_iterations=True,#保留所有的中间结果random_state=10
)kds.mice(iterations=3,#n_jobs=2,n_estimators=50)#每个数据集迭代三次,n_jobs并行化数量,当其等于-1时表明使用的是最大化并行,n_estimators控制树的生长#分析并使用多重填补结果dataresult=[]
result=[]
for i in range(kds.dataset_count()):dataresult.append(kds.complete_data(i))dd=((dataresult[i].mean()-A_data_missing.mean()))/A_data_missing.mean()*100result.append(dd)
print(result)#可以取每个数据集离原来均值最小的
name=A_data_missing.columns
new_complete=pd.DataFrame(columns=name)
lst=[]#储存要哪个数据集
for i in range(len(name)):re = []for j in range(kds.dataset_count()):re.append(result[j][i])a=re.index(min(re))   #返回最小值所在数据集,返回在数据集中是第几个数据集有最符合插补值lst.append(a)
for i in range(len(name)):new_complete[name[i]]=dataresult[lst[i]][name[i]]
print(new_complete)

miceforest插补相关推荐

  1. 数据预处理 第3篇:数据预处理(使用插补法处理缺失值)

    插补法可以在一定程度上减少偏差,常用的插补法是热卡插补.拟合插补和多重插补.拟合插补,要求变量间存在强的相关性:多重插补(MCMC法),是在高缺失率下的首选插补方法,优点是考虑了缺失值的不确定性. 一 ...

  2. python 线性回归回归 缺失值 忽略_机器学习 第3篇:数据预处理(使用插补法处理缺失值)...

    插补法可以在一定程度上减少偏差,常用的插补法是热卡插补.拟合插补和多重插补.拟合插补,要求变量间存在强的相关性:多重插补(MCMC法),是在高缺失率下的首选插补方法,优点是考虑了缺失值的不确定性. 一 ...

  3. python预处理缺失值_数据预处理 第3篇:数据预处理(使用插补法处理缺失值)...

    插补法可以在一定程度上减少偏差,常用的插补法是热卡插补.拟合插补和多重插补.拟合插补,要求变量间存在强的相关性:多重插补(MCMC法),是在高缺失率下的首选插补方法,优点是考虑了缺失值的不确定性. 一 ...

  4. 算法基础知识科普:8大搜索算法之插补搜索

    二分法的不足在于,对于均匀分布的数据,缩小搜索范围的速度太慢,每次只能缩小原长度的1/2,我们希望缩小范围尽可能的快,即搜索的数据若离左端点近,搜索的区间尽量的靠近左端点,同理搜索的数据若离右端点近, ...

  5. 独家 | 在机器学习中利用统计插补来处理缺失值(附代码)

    作者:Jason Brownlee 翻译:吴振东 校对:冯羽 本文约4500字,建议阅读10分钟 本文以病马数据集为例,帮助你了解在机器学习领域如何利用统计策略来处理缺失值,对代码进行了较为详细的讲解 ...

  6. 回归插补法_用均值替换、 回归插补及多重插补进行插补

    ##设置工作空间 #把"数据及程序" 文件夹复制到F盘下, 再用setwd设置工作空间 setwd("F: /数据及程序/chapter4/示例程序") #读取 ...

  7. r语言datarame删除行_R语言缺失值的处理:线性回归模型插补

    原文链接: 拓端数据科技 / Welcome to tecdat​tecdat.cn 在当我们缺少值时,系统会告诉我用-1代替,然后添加一个指示符,该变量等于-1.这样就可以不删除变量或观测值. 视频 ...

  8. CVPR 2019 | 全新缺失图像数据插补框架—CollaGAN

    在同一域下的图像和数据是符合一个整体流形分布的,一旦域中的数据缺失,能否利用已有的域中数据去还原丢失的数据呢? Collaborative GAN 提出了一种新的缺失图像数据插补框架,称为协同生成对抗 ...

  9. missforest_missforest最佳丢失数据插补算法

    missforest Missing data often plagues real-world datasets, and hence there is tremendous value in im ...

最新文章

  1. 【开源】SpringBootNetty聊天室V1.2.0升级版本介绍
  2. RPM安装命令总结--转载
  3. Ubuntu装机后的基础应用
  4. 梯度与散度与拉普拉斯算子
  5. 2009.12.9.工作日记
  6. 让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑.
  7. 字符串函数sprintf / sprintf_s 容易出错的地方
  8. 信号完整性(SI)电源完整性(PI)学习笔记(三十三)102条使信号完整性问题最小化的通用设计规则
  9. 深信服售前产品经理校招面试总结(一面)
  10. Linux之Xshell工具使用
  11. 动力工程及工程热物理推免真题(凭个人记忆整理)
  12. 20190311 Windows上ZooKeeper伪集群的实现
  13. 计算机一级wps选择题必背知识点,计算机一级WPS提高练习题及答案
  14. 深信服行为感知命令执行漏洞
  15. java.lang.IllegalArgumentException错误,小记一下
  16. 鸿蒙之主的武器,别具心意 全门派T8武器赏析
  17. 如何升级 Debian 10 (Buster) 到 Debian 11 (Bullseye) ?
  18. Swift String常用方法
  19. 拒绝破解 使用中文密码保护RAR文件
  20. 【案例】Shazam识别音乐

热门文章

  1. Angular 的 ngOnInit 和 Constructor 的区别
  2. 30系显卡安装tensorflow-gpu1.15
  3. 五款轻量级的办公软件,界面简洁且无广告
  4. Vulnhub-Moneybox
  5. Ubuntu16.04开启SSH服务
  6. 青蛙的约会(poj 1061)exgcd基础题
  7. 后台管理系统开发流程
  8. Java 在线编程编译工具上线,直接运行Java代码
  9. 达梦数据库查询模式名,表名,字段名
  10. 牛客练习赛10 B栈和排序【思维】