如何查找哪些列会影响 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)在图像交互中,在变量添加图中手动标识(添加)对于每一个预测变量影响较大的强影响点