簡體   English   中英

隨機森林回歸器特征重要性全為零

[英]Random Forest Regressor Feature Importance all zero

我正在使用 scikit learn 運行隨機森林回歸器,但所有預測最終都是相同的。 我意識到,當我擬合數據時,所有特征重要性都為零,這可能就是所有預測都相同的原因。 這是我正在使用的代碼:

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
import pandas as pd

merged_df = pd.read_csv("/home/jovyan/efs/vliu/combined_data.csv")

target = merged_df["400kmDensity"]
merged_df.drop("400kmDensity", axis = 1, inplace = True)

features_list = list(merged_df.columns)

#Set training and testing groups
train_features, test_features, train_target, test_target = train_test_split(merged_df, target, random_state = 16)

#Train model
rf = RandomForestRegressor(n_estimators = 150, random_state = 16)
ran = rf.fit(train_features, train_target)

print("Feature importances: ", rf.feature_importances_)
#Make predictions and calculate error
predictions = ran.predict(test_features)
print("Predictions: ", predictions)

這是數據文件的鏈接: https://drive.google.com/file/d/1ECgKAH82wxIvt2OCv4W5ir1te_Vr3N_r/view?usp=sharing

如果有人能在擬合導致特征重要性全部為零的數據之前看到我做錯了什么,那將不勝感激。

您的變量“400kmDensity”和“410kmDensity”的相關系數均 >0.99:

np.corrcoef(merged_df["400kmDensity"], merged_df["410kmDensity"])

這實際上意味着您幾乎可以完全使用“410kmDensity”來預測“400kmDensity”。 在散點圖 plot 上,它們形成一條幾乎完美的線:

變量“400kmDensity”和“410kmDensity”的散點圖

為了真正探索影響“400kmDensity”值的因素,您應該排除“410kmDensity”作為回歸量(解釋變量)。 特征重要性有助於事后識別解釋變量。 請注意,特征重要性可能不是確定實際特征重要性的完美指標。 也許你想看看其他可用的方法,比如Boruta 算法/排列重要性/...

關於最初的問題:我不太確定為什么,但是 RandomForestRegressor 似乎對您的目標變量非常低(?)有問題。 在 rf.fit() 中縮放train_targettrain_features后,我能夠獲得特征重要性。 但是,為了應用隨機森林,這實際上根本不是必需的! 您可能想查看相應的文檔或在這個方向上擴展您的搜索。 希望這可以作為一個提示。

fitted.rf = rf.fit(scale(train_features), scale(train_target))

如前所述,此更改后的特征重要性如下所示:

在此處輸入圖像描述

此外,“第二”列僅包含值零,這並不能解釋任何事情,您的第一步應該始終是 EDA(解釋性數據分析)以了解數據。 例如檢查列之間的相關性或生成直方圖以探索數據分布 [...]。

它還有更多內容,但我希望這能給您帶來幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM