【问题标题】:How to get feature importance in RF如何在 RF 中获取特征重要性
【发布时间】:2021-05-23 21:13:24
【问题描述】:

我正在尝试获取 RF 特征的重要性,我将随机森林拟合到这样的数据上:

model = RandomForestRegressor()
n = model.fit(self.X_train,self.y_train)
if n is not None:
   df = pd.DataFrame(data = n , columns = ["Feature","Importance_Score"])
   df["Feature_Name"] = np.array(self.X_Headers)
   df = df.drop(["Feature"], axis = 1)
   df[["Feature_Name","Importance_Score"]].to_csv("RF_Importances.csv", index = False)
   del df
            

但是,n 变量返回None,为什么会出现这种情况?

【问题讨论】:

  • 我知道获得 RF 特征重要性的 3 种方法mljar.com/blog/feature-importance-in-random-forest (1) 您可以使用内置重要性 (2) 基于排列的重要性或 (3) 基于 SHAP 的重要性。我正在使用基于排列的重要性。所有方法都对特征之间的高度相关性很敏感。
  • 感谢您的回复。但是,您所说的高相关性是什么意思,我的意思是什么是标准?例如,它是否高于 0.7?另外,如果我的特征确实高度相关怎么办?
  • 检查特征之间的相关性,然后检查是否没有选择高度相关的特征之一作为最不重要。高度相关意味着大约 > 0.8
  • 感谢您的评论。我尝试了前两种方法,他们得到几乎相同的结论。但是,我检查了 0.62 的最大值的相关性我不知道它是否是高相关性。我得到的重要性分数值只有一个特征只有 0.85,其余的 0.15 在其他 10 个特征之间划分。因此,我预计只有第一个特征的贡献最大,所以当我放弃其他特征并只训练第一个特征时,我预计会有几乎相同的测试结果,因为其他特征的贡献不大。然而它
  • 然而事实并非如此,他在测试数据中的绝对误差百分比从 14.13010% 显着增加至 22.96036%。你对此有什么解释吗?

标签: python pandas random-forest


【解决方案1】:

不太确定model.fit(self.X_train,self.y_train) 应该如何工作。需要有关如何设置模型的更多信息。

如果我们使用模拟数据进行设置,它会起作用:

np.random.seed(111)
X = pd.DataFrame(np.random.normal(0,1,(100,5)),columns=['A','B','C','D','E'])
y = np.random.normal(0,1,100)

model = RandomForestRegressor()
n = model.fit(X,y)
if n is not None:
   df = pd.DataFrame({'features':X.columns,'importance':n.feature_importances_})

df
 
  features  importance
0        A    0.176091
1        B    0.183817
2        C    0.169927
3        D    0.267574
4        E    0.202591

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 2018-06-30
    • 2018-11-18
    • 2021-04-08
    • 2019-03-09
    • 2020-04-10
    • 2019-01-28
    • 2020-08-04
    相关资源
    最近更新 更多