解释机器学习系数

数据挖掘 机器学习 神经网络 套索
2022-03-08 13:42:35

我的狗展预测工具的神经网络出现了一些问题。概括地说,我从几个因素开始——年龄、体重、身高、品种(这是一组虚拟变量)、主观可爱分数——并预测动物是否会在节目中获胜(二元变量) . 我有几百个节目,所以有几万行。我坚持使用 nnet 包而不是神经网络,但我可以很容易地创建一个像样的神经网络

model <- nnet(Win ~ ., x=X_training, y=Y_training, size=30, maxit=500)

效果很好。我已经根据保留测试数据对其进行了测试,AUC 和混淆矩阵看起来不错,我可以用它来预测未来的赢家。问题是,我如何确定哪个变量在预测每个新狗展的结果时最重要?当我对未来的获胜者进行预测时,我使用以下代码

winpred = predict(model, x, type='raw')

它提供了获胜可能性的 0 到 1 之间的分数。我还希望通过某种方式为每一行确定哪些变量——年龄、体重、身高、品种假人和可爱——对我的预测得分贡献最大和最小。如果我是为一只狗做这个,我会根据这篇文章使用 LIME 或其他东西,但不幸的是,我想一次在几百只狗上运行这个。

基本上,我希望能够对狗主人说他们的小狗因为 x 而表现良好,但最阻碍它的是 y(当然,如果它是品种,则不是很有帮助)。似乎没有办法用神经网络来做到这一点。现在还有其他机器学习技术可以做到这一点吗?如果没有,对其他可行的模型有什么建议吗?

我正在考虑将 OLS 用作线性概率模型或 logit/probit,可能与 LASSO 或 Ridge 一起使用。我可以使用我的机器学习模型对狗进行评分,但在后台从回归中提取来确定哪些变量对分数的贡献最大、积极和消极。从统计的角度来看,Logit/probit 更好,但是在 R/RStudio 中是否有任何简单的方法来解释一次数百只狗,哪个属性对它们的得分贡献最大?

1个回答

众所周知,神经网络的性能好而可解释性差,也就是说,很难(几乎不可能)解释为什么做出特定的预测。将预测与特征联系起来更加困难,因为 NN 做了很多中间计算,所有特征都在其中发挥作用。

众所周知的可解释性模型很简单:假设树不是太大,决策树的解释非常直观。人类实际上可以根据特征上的条件跟随树。