我已经通过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/
答案 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)