【问题标题】:How do I map Features against their Feature importance in a DataFrame?如何在 DataFrame 中根据其特征重要性映射特征?
【发布时间】:2021-11-07 22:37:04
【问题描述】:

我正在尝试为DecisionTreeRegressor 绘制特征重要性并将每个特征重要性映射回列名。任何人都可以建议我如何做到这一点?先感谢您。 这是我正在使用的代码:

df1=df[['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO','LSTAT' ]] 

x=df1[['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO']]
y=df1['LSTAT']
from sklearn.linear_model import LinearRegression
lm_model=LinearRegression()
lm_model.fit (x,y)
#y_pred=lm_model.predict(y)

# fit the model
model = RandomForestRegressor(random_state=1)
model.fit(x_train, y_train)

yhat = model.predict(x_test)
# evaluate predictions
from sklearn.metrics import  mean_absolute_error
mae = mean_absolute_error(y_test, yhat)
print('MAE: %.3f' % mae)

from sklearn.tree import DecisionTreeRegressor
model = DecisionTreeRegressor()
# fit the model
model.fit(x, y)
# get importance
importance = model.feature_importances_
# summarize feature importance
for i,v in enumerate(importance):
    print('Feature: %0d, Score: %.5f' % (i,v))
# plot feature importance
pyplot.bar([x for x in range(len(importance))], importance)
pyplot.show()

【问题讨论】:

  • 如果您编辑问题,显示几行importance,这可能会有所帮助,并更详细地解释您将“映射”重要性返回到列名的含义。您是否希望数据框中的列名位于重要性旁边?您希望列名显示在绘图中,还是什么?
  • 包含一些示例数据仍然会有所帮助。您提到了 DataFrame 和列,但这些似乎都没有出现在您提供的代码 sn-p 中(您也没有标记 DataFrame 库)。一般来说,有一个从importshow()的小程序是有帮助的,可以复制到一个干净的工作区并运行。
  • 您是否尝试将重要性与功能相对应?
  • 是的,没错
  • 如果没有数据,这个问题就无法重现。始终提供minimal reproducible example代码、数据、错误、当前输出和预期输出,如formatted text。如果相关,绘图图像是可以的。

标签: python matplotlib scikit-learn


【解决方案1】:

您可以使用以下 sn-p 创建一个包含特征及其重要性的 DataFrame

data = list(zip(df.columns, model.feature_importances_))
new_df = pd.DataFrame(data, columns =['Feature', 'Importance'])

【讨论】:

  • 如果此答案解决了您的问题或对找到您的解决方案最有帮助(帮助 SO 社区),请支持并接受此答案
猜你喜欢
  • 2021-07-18
  • 2014-02-12
  • 2019-08-08
  • 2014-02-11
  • 2019-12-04
  • 2017-11-14
  • 1970-01-01
  • 2018-12-06
相关资源
最近更新 更多