获取特征重要性 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 朴素贝叶斯分类器的主要内容,如果未能解决你的问题,请参考以下文章