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

时间:2015-12-06 21:51:07

标签: r naivebayes

说,我正在研究R中使用朴素贝叶斯的机器学习模型。所以我将使用naiveBayes包构建一个模型,如下所示

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

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

我做的预测如下,这给了我一个类作为预测

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

但是,我的问题是,有没有办法看到哪个列最能影响这个预测?所以,我可以了解学生在课堂上失败的最重要因素是什么,比如,那是否是响应变量,各种可能的因素是其他预测因素列。

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

1 个答案:

答案 0 :(得分:3)

答案取决于您希望如何执行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更好。