从混合效果随机森林中获取特征重要性

时间:2019-06-14 10:51:21

标签: python random-forest

我是R用户,第一次在Windows上运行。python3.7 64bit。 我试图使用包PermutationImportance中的eli5从混合效果随机森林中获得排列重要性。 可here找到可重复性的数据集。

适合:

merf = MERF(n_estimators= 500, max_iterations= 100)
np.random.seed(100)
merf.fit(X_train_merf, Z_train, clusters_train, y_train)

功能重要性:

perimp = PermutationImportance(merf, cv = None, refit = False, n_iter = 50).fit(X_train, Z_train, clusters_train, y_train)

上面的代码会产生此错误

TypeError: fit() takes from 3 to 4 positional arguments but 5 were given

但是fit()仅包含4个参数...

是否可以从merf个对象中获得所有功能的重要性?

2 个答案:

答案 0 :(得分:1)

我不知道merf或eli5模块,但是我可以告诉你为什么发生这种异常。

如果您查看PermutationImportance Module及其API的文档,则可以看到 fit()方法的以下定义:

    fit(X, y, groups=None, **fit_params)

最后一个参数之前的两颗星表示它是keyword argument。因此,实际上该方法可以采用3个位置参数和许多关键字参数。但这也意味着您需要命名第四个参数。在方法内部,您将获得此参数的字典,并且该方法需要知道如何处理它。

示例:

def my_fit(X, **fit_params):
    print(fit_params)

my_fit("positional argument", x=1,y=2,z=3)               
>>> {'x': 1, 'y': 2, 'z': 3}

我不使用eli5,所以我无法告诉您使用什么关键字,或者根本不可能从merf对象获得功能的重要性,但是通过仅给您的最后一个参数命名即可解决错误:

perimp = PermutationImportance(merf, cv = None, refit = False, n_iter = 50).fit(X_train, Z_train, clusters_train, y_train=y_train)

希望该方法知道如何处理像这样的参数。

答案 1 :(得分:0)

我遇到了同样的问题,从源代码中我发现您可以从作为MERF一部分的randomforest模型对象中获取功能的重要性。

mrf.fit(X_train, Z_train, clusters_train, y_train)
feat_importance=mrf.trained_rf.feature_importances_