分享

缺失值的插补:随机森林法(二)

 Memo_Cleon 2023-02-17 发布于上海

随机森林是机器学习(Machine Learning)领域中非常有名的集成学习(Ensemble Learning)算法,相当于套袋法(Bagging)和决策树的组合,可用于连续资料的回归、离散资料的分类、无监督学习的聚类和异常值的检测。

前面已经在缺失值的插补:随机森林法一文中介绍过利用随机森林模型对缺失值进行插补,用的是R语言中的missForest包中的missForest函数,随机森林的一些基本概念可参见此文。
R中建立随机森林模型的经典程序包randomForest中也内置了一个函数rfImpute,可以实现解释变量缺失值的随机森林插补。rfImpute对数据的插补需要依靠randomForest函数。与missForest不同的是,rfImpute{randomForest}首先对缺失值用中位数(连续变量)/众数(分类变量)来填充后构建随机森林,并计算样本间的临近矩阵(proximity matrix),然后结合临近矩阵的加权进行迭代达到对缺失值的插补;而且rfImpute处理缺失值需要一个完整的响应变量(即响应变量不能有缺失),或者说只能对解释变量的缺失进行插补。
之所以写这个函数的操作,一个原因是这涉及到建立随机森林模型的经典程序包randomForest另外一个很重要的原因是这个程序包已经有SPSS插件(SPSSINC_RANFOR可以直接使用。对有程序命令恐惧症患者而言,这也算是一个福音。其实SPSSINC_RANFOR是用来构建分类树或回归树的随机森林模型的,对缺失值的插补只是在建立模型时对缺失值的一种处理方式该插件对应的是R语言单独randomForest包,它也支持无监督模型下计算样本间的临近
建议同时安装伴随程序SPSSINC_RANPRED,这样就可以用构建的随机森林森林模型来对新的数据进行预测啦。这点很重要,比如你用训练集做了一个临床预测模型后,还需要用测试集对模型做验证评估,当然如果你只是想做个缺失值插补就没必要安装了。
插件安装过程放在本文的最后,可参考。
示例同缺失值的插补:随机森林法,来自R语言VIM包的diabetes数据集(Indian Prime Diabetes Data)。
Analyze>>RanFor Estimation

将结局变量选入因变量框,各解释变量选入解释变量框。分类变量(因变量和预测变量)会直接按哑变量处理。将id选入ID变量,以方便核查具体的缺失值位置;

【选项】选中RF插补,设置R随机种子以保证操作的可重复性。①缺失值处理提供了三种方法。一种是粗略估计,分别用中位值和众数填充连续变量和分类变量的缺失值;第二种是随机森林填充,这是我们此次笔记需要的;第三种是无缺失值模式,如果数据中存在缺失值,将终止建模。②随机森林模型默认的决策树的数量是500。③每个节点随机抽取的变量数,也就是每次进行节点拆分时随机抽取的候选变量的数量,即本文开始图片中第二步中的m。分类决策树默认值是预测变量数量的平方根,回归树默认是预测变量数量的三分之一。④最小叶节点(终端节点)大小,分类树默认值为1,回归默认值为5R随机数种子。随机种子保证了重新运行程序时能够输出相同的结果。⑦分类树因变量分类水平的优先级。可输入因变量的权重列表,每个因变量水平对应一个值,值应按因变量水平的升序排列,权重之和不必为1。有些结局发生率很低的非平衡数据可以考虑使用。
【保存】将插补后的数据集命名为diabetes_impt。①新的预测值数据集(New Predicted Values Dataset)。结果将生成一个新的数据集,该数据集中的主要数据是因变量的预测值,即使用建立的随机森林模型利用解释变量进行预测的因变量值。②插补后数据集(New Imputed Dataset),对缺失数据进行随机森林插补后的完整数据集,这个数据集就是我们此文的最终目的。③指示离群值度量的数据集(New OutliersDataset)。④还有两个选项与用新的数据集进行预测有关(将随机森林模型保存为R工作环境或者保存在内存中以用于预测),这个预测功能需要在SPSSINC_RANFOR的扩展插件SPSSINC_RANPRED来实现。
【输出】选中[变量使用情况][变量重要性]复选框。[变量使用情况]可显示每一个变量在随机森林中的所有树的拆分节点上的使用次数。[变量重要性]结果显示在该变量进行分裂时节点杂质(尼基指数或残差平方和)的下降量。
结果会显示我们在对话框中选择的一些重要输出,比如变量重要性、混淆矩阵等,这些都不是我们今天关注的重点,我们关注的是插补结果:
后面就可以直接利用这个插补集进行后续的统计分析啦!

安装插件的一些重要提示:

1下载与SPSS版本的相匹配的R配置插件及相应版本的RSPSSINC_RANFOR(构建随机森林模型)、SPSSINC_RANPRED(用随机森林模型对新的数据集做结局预测)

注意需要下载与SPSS版本相匹配的插件,如果以前已经安装过就不需要再次安装了。如下载界面显示SPSS 27对应的插件是STATS_R36_CONFIGURATION
插件名字中间的R36也提示SPSS27需要通过R3.6来完成分析,所以还需要去R的官方网站下载相应版本的R
SPSS的R插件下载网站同时下载构建随机森林模型的插件SPSSINC_RANFOR、用随机森林模型对新的数据集做结局预测的插件SPSSINC_RANPRED
R配置插件下载:

https://github.com/IBMPredictiveAnalytics/R_Essentials_Statistics/releases

下载不同版本的R

https://cran./bin/windows/base/old/

SPSSINC_RANFOR

https://github.com/IBMPredictiveAnalytics/SPSSINC_RANFOR/releases

SPSSINC_RANPREDhttps://github.com/IBMPredictiveAnalytics/SPSSINC_RANPRED/releases

2】安装RSPSSR配置插件

首先安装R,注意SPSS27对应的R版本是R3.6

然后SPSS中安装R Plug-in for Statistics

扩展>>安装本地扩展束,选择下载好的STATS_R36_CONFIGURATION进行安装。

3】在R3.6中安装程序包randomForest
打开R,直接输入命令:

install.packages("randomForest", repos='https://mran.microsoft.com/snapshot/2019-02-01/')

如果你用过R,可能会问为啥不直接用[install.packages("randomForest")]进行安装。目前R的版本已经到了4.2.2,但与SPSS27相匹配的版本仍然是3.6版,R的一个诟病就是R升级后对程序包的兼容性并不好,很多程序包也需要进行升级才能使用,同样升级后的程序包也常常在低版本的R上无法使用。一般的处理方法时下载与R版本相匹配的程序包,但笔者在下载与R3.6版发布时间相近的randomForest包并在本地安装后,回敬笔者的是:

package 'randomForestis not available(for R version 3.6.0)

上述的安装命令完美地解决了这个问题,至于为啥是2019就不要去纠结了,抓到耗子的猫就是好猫。
4SPSS中安装SPSSINC_RANFOR插件
扩展>>安装本地扩展束,分别打开已经下载好的SPSSINC_RANFORSPSSINC_RANPRED安装即可。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多