首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高斯朴素贝叶斯中特征重要性的求取

高斯朴素贝叶斯中特征重要性的求取
EN

Stack Overflow用户
提问于 2020-07-16 11:07:33
回答 2查看 7.3K关注 0票数 4

我有一个针对数据集运行的Gaussian naive bayes算法。我需要的是获取目标类的特性重要性(特性的影响性)。

这是我的密码:

代码语言:javascript
复制
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(inputs, target, test_size=0.2)

gaussian_nb = GaussianNB()
代码语言:javascript
复制
gaussian_nb.fit(X_train, y_train)
代码语言:javascript
复制
gaussian_nb.score(X_test, y_test)*100

我试过:

代码语言:javascript
复制
importance = gaussian_nb.coefs_ # and even tried coef_

它给出了一个错误:

AttributeError: GaussianNB对象没有属性“coefs_”

有人能帮帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2020-07-16 14:39:43

GaussianNB没有提供一种评价特征重要性的内在方法。天真的Bayes方法通过确定与特征相关的条件概率和无条件概率,并以最高的概率预测类。因此,没有计算的系数或与你用来训练模型的特征相关的系数(与它的文档比较)。

话虽如此,有一些方法,你可以应用后专案分析模型后,已培训。这些方法之一是置换重要性,它也方便地在scikit-learn中实现。使用您提供的代码作为基础,您将以以下方式使用permutation_importance

代码语言:javascript
复制
from sklearn.inspection import permutation_importance
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split


X_train, X_test, y_train, y_test = train_test_split(inputs, target, test_size=0.2)

gaussian_nb = GaussianNB()
gaussian_nb.fit(X_train, y_train)

imps = permutation_importance(gaussian_nb, X_test, y_test)
print(imps.importances_mean)

请注意排列的重要性与数据集有关,必须传递数据集才能获得值。这可以是您用来训练模型的相同数据,即X_trainy_train,也可以是您为评估而保存的坚持集,如X_testy_test。后一种方法只是泛化能力方面的最佳选择。

如果您想更多地了解置换作为一种方法的重要性以及它是如何工作的,那么scikit-learn提供的scikit-learn绝对是一个好的开始。

票数 6
EN

Stack Overflow用户

发布于 2020-07-16 11:40:42

如果您看一看文档,朴素贝叶斯没有这些特性重要性属性。您可以使用get_params方法进行学习,但并不是真正独立的特性。如果您需要理解特性的重要性,那么一个很好的解决方案就是对决策树这样的东西进行分析,然后使用最重要的特性来实现GaussianNB

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62933365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档