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

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

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

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

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

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

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

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

【问题讨论】:

    标签: 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 辨别力更好。
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    相关资源
    最近更新 更多