获取特征重要性 PySpark 朴素贝叶斯分类器

Posted

技术标签:

【中文标题】获取特征重要性 PySpark 朴素贝叶斯分类器【英文标题】:Get feature importance PySpark Naive Bayes classifier 【发布时间】:2019-06-04 03:37:21 【问题描述】:

我有一个朴素贝叶斯分类器,我使用 Pandas 数据框在 Python 中编写,现在我在 PySpark 中需要它。我的问题是我需要每列的特征重要性。查看 PySpark ML 文档时,我找不到任何信息。 documentation

有谁知道我是否可以使用 Naive Bayes Spark MLlib 获得特征重要性?

使用 Python 的代码如下。使用 .coef_

检索特征重要性
df = df.fillna(0).toPandas()

X_df = df.drop(['NOT_OPEN', 'unique_id'], axis = 1)
X = X_df.values
Y = df['NOT_OPEN'].values.reshape(-1,1)

mnb = BernoulliNB(fit_prior=True) 
y_pred = mnb.fit(X, Y).predict(X)
estimator = mnb.fit(X, Y)


# coef_: For a binary classification problems this is the log of the estimated probability of a feature given the positive class. It means that higher values mean more important features for the positive class.

feature_names = X_df.columns
coefs_with_fns = sorted(zip(estimator.coef_[0], feature_names))

【问题讨论】:

【参考方案1】:

评估差异可能更好 log(P(feature_X|positive)) - log(P(feature_X|negative)) 作为特征重要性。

因为,我们对每个特征_X 的判别力感兴趣(肯定 NB 是一个生成模型)。 极端示例:某些 feature_X1 在所有 + 和 - 样本中具有相同的值,因此没有辨别力。 所以,这个特征值的概率对于 + 和 - 样本都很高,但对数概率的差异 = 0。

【讨论】:

【参考方案2】:

如果您对 coef_ 的等价物感兴趣,您正在寻找的属性是 NaiveBayesModel.theta

类条件概率的日志。

2.0.0 版中的新功能。

model = ...  # type: NaiveBayesModel

model.theta.toArray()  # type: numpy.ndarray

生成的数组大小为(number-of-classes, number-of-features),行对应连续的标签。

【讨论】:

以上是关于获取特征重要性 PySpark 朴素贝叶斯分类器的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 中朴素贝叶斯分类器的阈值是啥?

朴素贝叶斯构建“饥饿站台”豆瓣短评情感分类器

通俗易懂-朴素贝叶斯

从朴素贝叶斯分类到贝叶斯网络

利用朴素贝叶斯(Navie Bayes)进行垃圾邮件分类

SparkMLib分类算法之朴素贝叶斯分类