获取数据框字典的特征重要性

Posted

技术标签:

【中文标题】获取数据框字典的特征重要性【英文标题】:Get feature importances for dictionary of dataframes 【发布时间】:2019-06-11 12:13:22 【问题描述】:

我目前正在使用RandomForestRegressor 处理一个用例。要基于一列分别获取训练和测试数据,假设 Home,数据框被拆分为字典。几乎完成了建模,但坚持获取字典中每个键的特征重要性(键数 = 21)。请看下面的代码:

hp = pd.get_dummies(hp)
hp = i: g for i, g in hp.set_index(["Home"]).groupby(level = [0])

feature = ; feature_train = ; feature_test = 
target = ; target_train = ; target_test = ; target_pred = 
importances = 

for k, v in hp.items():
    target[k] = np.array(v["HP"])
    feature[k] = v.drop(["HP", "Corr"], axis = 1)

feature_list = list(feature[1].columns)

for k, v in zip(feature, target):
    feature[k] = np.array(feature[v])
for k, v in zip(feature_train, target_train):
    feature_train[k], feature_test[k], target_train[k], target_test[k] = train_test_split(
            feature[v], target[v], test_size = 0.25, random_state = 42)

在Random Forest Feature Importance Chart using Python 的帮助下我尝试过的事情

for name, importance in zip(feature_list, list(rf.feature_importances_)):
    print(name, "=", importance)

但这仅打印一本字典的重要性(我不知道是哪个)。我想要的是为字典“重要性”中的所有键打印它。提前致谢!

【问题讨论】:

为什么“根据一列分别获取训练和测试数据,比如说 Home”?为什么不直接使用sklearn's train_test_split?很难判断你的代码中发生了什么。 【参考方案1】:

如果我理解正确,您希望特征对训练和测试数据的重要性。

这不是它的工作原理,首先它从您的训练数据中创建RandomForest,然后在该操作之后,它可以根据它用于分割空间的次数(以及“好”的程度)计算每个特征的重要性分裂,例如,对于许多树来说,基尼杂质有多低)。

因此,您可以获得特征对训练数据的重要性,对于测试数据,使用学习的树架构来预测值。

【讨论】:

以上是关于获取数据框字典的特征重要性的主要内容,如果未能解决你的问题,请参考以下文章

从嵌套字典列表中获取熊猫数据框

获取数据框列表并按变量分组,并使用该变量作为字典的键

从以元组为键的字典中获取熊猫数据框

如何在决策树中获取特征重要性?

如何按列对pyspark中的数据框进行分组并以该列作为键并以记录列表作为其值来获取字典?

随机播放字典中的数据以获取测试和训练数据