我如何正确地将args或kwargs用于字典,以将其用作函数中的Regressor输入变量?

问题描述 投票:0回答:1

我已经通过GridSearchCV生成了一些具有输入值的输入参数。

输入参数如下:

输入: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/

python python-3.x args kwargs
1个回答
0
投票

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

为了让python解释任何关键字参数,在调用函数本身时需要声明它们,即该方法的格式必须为myMethod(**kwargs1, **kwargs2)等。

之所以将它们随机插入是因为内部kwarg被表示为字典。因此,随机访问。


您有使用任意数量的参数(* 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)

请注意,以上只是常规词典参数,因此不评估词典中的关键字。

然而,为了使kwargs正常工作,从test方法内部进行的调用实际上应如下所示:

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

可能的解决方案:

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

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

test(**d1, **d2, **d3)
© www.soinside.com 2019 - 2024. All rights reserved.