如何正确使用args或kwargs来将字典用作函数中的Regressor输入变量?

时间:2019-10-28 11:41:49

标签: python python-3.x args kwargs

我已经通过GridSearchCV生成了一些输入参数,其值为dict。

输入参数如下:

在:print(grid_maxdepth, grid_min_samples_split, grid_max_leaf_nodes)

退出:{'max_depth': 4} {'min_samples_split': 14} {'max_leaf_nodes': 14}

如果将它们作为kwarg放入Regressor函数中,则效果很好。

在:print(DecisionTreeRegressor(**grid_maxdepth, **grid_min_samples_split, **grid_max_leaf_nodes))

出局:

DecisionTreeRegressor(criterion='mse', max_depth=4, max_features=None,
                      max_leaf_nodes=14, min_impurity_decrease=0.0,
                      min_impurity_split=None, min_samples_leaf=1,
                      min_samples_split=14, min_weight_fraction_leaf=0.0,
                      presort=False, random_state=None, splitter='best')

现在,如果我想在以下函数中执行相同的操作,则会将变量放置在错误的位置且格式错误。例如,它不使用max_depth=4,而是将字典放入标准("criterion={'max_depth': 4}")中。

在:

def test(*sss):
    print(DecisionTreeRegressor(*sss))

test(grid_maxdepth, grid_min_samples_split, grid_max_leaf_nodes)

出局:

DecisionTreeRegressor(criterion={'max_depth': 4},
                      max_depth={'max_leaf_nodes': 14}, max_features=None,
                      max_leaf_nodes=None, min_impurity_decrease=0.0,
                      min_impurity_split=None, min_samples_leaf=1,
                      min_samples_split=2, min_weight_fraction_leaf=0.0,
                      presort=False, random_state=None,
                      splitter={'min_samples_split': 14})

我在做什么错? 请记住,我是使用arg / kwarg的新手,并且我已经研究了这篇文章: https://www.geeksforgeeks.org/args-kwargs-python/

1 个答案:

答案 0 :(得分:1)

让python解释任何关键字参数;您需要在调用方法时显式使用**语法。

示例:myMethod(**kwargs1, **kwargs2)

尝试一下:

def test(**sss):
    print(DecisionTreeRegressor(**sss))

d1={'max_depth': 4}
d2={'min_samples_split': 14} 
d3={'max_leaf_nodes': 14}

test(**d1, **d2, **d3)

说明

您正试图将关键字参数传递给包装在DescisionTreeRegressor函数中的test函数。

您的函数接受任意数量的参数(* args):

def test(*sss):
    print(DecisionTreeRegressor(*sss))

test(grid_maxdepth, grid_min_samples_split, grid_max_leaf_nodes)

内部,您的测试方法调用会转换为:

DescisionTreeRegressor(grid_maxdepth, grid_min_samples_split, grid_max_leaf_nodes)

请注意上面的内容只是常规的字典参数,因此评估字典中的关键字。

要使kwarg正常工作,从test方法内部进行的调用实际上应如下所示:

DescisionTreeRegressor(**grid_maxdepth, **grid_min_samples_split, **grid_max_leaf_nodes)