如何查找哪些列会影响 R 中的预测

Posted

技术标签:

【中文标题】如何查找哪些列会影响 R 中的预测【英文标题】:How to find which columns affect a prediction in R 【发布时间】:2016-03-11 10:42:22 【问题描述】:

假设,我正在使用朴素贝叶斯在 R 中研究机器学习模型。因此,我将使用 naiveBayes 包构建模型,如下所示

model <- naiveBayes(Class ~ ., data = HouseVotes84)

我也可以通过打印模型来打印模型的重量。

我按如下方式进行预测,这给了我一个类作为预测

predict(model, HouseVotes84[1:10,], type = "raw")

但是,我的问题是,有没有办法查看哪些列对这个预测的影响最大?因此,我可以了解导致学生不及格的最重要因素是什么,例如,如果这是响应变量,并且各种可能的因素是其他预测变量列。

我的问题是针对 R 中的任何包,上面的 naiveBayes 只是一个示例。

【问题讨论】:

【参考方案1】:

答案取决于您希望如何处理feature selection。

如果它是模型构建过程的一部分,而不是一些事后分析,您可以使用 caret 及其 feature selection wrapper 方法来确定要使用递归特征消除、遗传算法等建模的最佳特征子集,或者使用单变量分析进行过滤。


如果它是仅基于您的预测的事后分析的一部分。然后这取决于您使用的模型类型。 caret 也只支持this functionality 兼容机型!

对于svm,除线性核外,确定系数的重要性很高non-trivial。我不知道有任何尝试对svm 进行某种功能排名的尝试,无论语言如何(请告诉我它是否存在!!)。

使用rpart(在问题中标记)您可以直观地查看节点。节点越高越重要。这可以在caret 包中完成:

library(rpart)
library(caret)
fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
caret::varImp(fit)
#        Overall
#Age    5.896114
#Number 3.411081
#Start  8.865279

使用naiveBayes,您可以从模型输出中看到它。你只需要非常努力地盯着看:

data(HouseVotes84, package = "mlbench")
model <- naiveBayes(Class ~ ., data = HouseVotes84)
model
#
#Naive Bayes Classifier for Discrete Predictors
#
#Call:
#naiveBayes.default(x = X, y = Y, laplace = laplace)
#
#A-priori probabilities:
#Y
#  democrat republican 
# 0.6137931  0.3862069 
#
#Conditional probabilities:
#            V1
#Y                    n         y
#  democrat   0.3953488 0.6046512
#  republican 0.8121212 0.1878788
#
#            V2
#Y                    n         y
#  democrat   0.4979079 0.5020921
#  republican 0.4932432 0.5067568

一目了然,至少V1 看起来比V2 更好。

【讨论】:

谢谢。但所有这些都是针对整个模型的。我想看看哪些列会影响测试数据集中某一行的预测。我的意思是,假设我对测试数据集中的一行的模型使用预测函数,它给了我一个特定的预测,我想看看哪些列最能导致预测。输出(每一行的贡献因素应该不同) 这绝对是模型相关的,例如,像朴素贝叶斯这样的模型,你可以通过查看模型信息再次弄清楚,因为假设每个变量都是独立的,对于决策树你必须逐案解决,因为决策树预测高度依赖于所采用的“路径”。不幸的是,我不知道有一些通用的方法可以做到这一点。除非您指的是简单的单变量分析。 嗨@chappers,我希望你做得很好,如果你不介意我们怎么知道在朴素贝叶斯分类器中 V1 是比 V2 更好的变量?是因为 0.3953488 + 0.8121212 > 0.4979079 + 0.4932432?如果是这样,这里的 n 和 y 代表什么?提前致谢。 看来 V1 比 V2 辨别力更好。

以上是关于如何查找哪些列会影响 R 中的预测的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用car包中的avPlots函数创建变量添加图(Added-variable plots)在图像交互中,在变量添加图中手动标识(添加)对于每一个预测变量影响较大的强影响点

使用 R 中的 SP 包查找哪些多边形包含哪些点时遇到问题

R语言离群值处理分析

文献调研慢病患者就医行为预测:就医选择行为有哪些?预测什么?如何预测?慢病患者?

将经度和纬度与 R 中的国家/地区匹配

如何将预测列表转换为R中的规范化表