首页 > 解决方案 > 从混合效应随机森林中获取特征重要性

问题描述

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

合身:

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对象中获得特征重要性?

标签: pythonrandom-forest

解决方案


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

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

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

最后一个参数之前的那两个星表示它是一个关键字参数。所以实际上这个方法可以接受 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)

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


推荐阅读