【问题标题】:To extract Top feature names from list numpy从列表 numpy 中提取顶级特征名称
【发布时间】:2019-09-13 17:03:57
【问题描述】:

在这里,我在 feature_names 中汇总了特征名称,每个名称都取自数据集的 if X_train、Y_train 列。

neigh 是一个 MultinomialNB 分类器,已拟合数据集的 X_train 和 Y_train。

我现在不知道如何使用 neigh MultinomialNB 分类器从 feature_names 中提取顶级特征。

所以我用 numpy 写了下面的代码

max_ind_positv=np.argsort((neigh.feature_log_prob_)[1])[::-1][0:10]
top_pos=np.take(feature_names,max_ind_positv)

但它显示以下错误:

1) AttributeError: 'list' object has no attribute 'take'

2)IndexError: index 3997 is out of bounds for axis 0 with size 7

请有人告诉我有关如何获得前 20 个功能名称的更正。

【问题讨论】:

  • 您似乎在某个时候用列表破坏了np(这就是错误 1 ​​所说的)。重新启动您的会话并确保执行import number as np

标签: list numpy feature-selection


【解决方案1】:

您实际上不需要使用np.take(),您只需索引一个字符串数组即可。因此,要按重要性降低的顺序获取功能,您可以这样做:

>>> import numpy as np
>>> features = np.array(['feat1', 'feat2', 'feat3'])
>>> coeffs = np.array([0.2, 0.02, 2.0])
>>> features[np.argsort(coeffs)[::-1]]
array(['feat3', 'feat1', 'feat2'], dtype='<U5')

【讨论】:

  • 如何生成系数?能否请您给我看一个与我发布的代码类似的代码 sn-p,以便我可以直接在我的机器上运行它?
  • 这取决于分类器,但对于MultinomialNB,我想它会是neigh.feature_log_prob_[class],其中class 是每个类依次(比如说)。但一般来说,它只是您要对 features 列表进行排序的一组数字。
  • 所以,我的代码应该是这样的 --> feature = np.array(feature_names), coeffs = np.array(neigh.feature_log_prob_[1]), features[np.argsort(coeffs) [::-1]] ?
  • 我能否以某种方式通过 gmail 与您分享我的代码,以便您帮助进行必要的更改,我感到很沮丧,因为我被困在这里一个多星期,需要完成这个 ML 课程,请帮忙。
  • 实际上现在它显示新错误--> IndexError: index 3998 is out of bounds for axis 0 with size 7, I can't explain any out of it.
猜你喜欢
  • 2019-08-03
  • 2016-05-27
  • 2018-06-05
  • 2020-03-20
  • 2019-06-30
  • 2019-08-10
  • 2016-05-24
  • 1970-01-01
  • 2020-10-06
相关资源
最近更新 更多