提问人:ignacM 提问时间:2/3/2023 最后编辑:ignacM 更新时间:2/3/2023 访问量:37
如何在新函数中调用构造函数的参数名称?
How to call the argument name of a constructor inside a new function?
问:
DecisionTreeRegressor 具有 max_depth、min_samples_split 等可调用参数。我想创建一个函数来选择要调用的参数(树的特征)。举个例子:
import numpy as np
from sklearn.tree import DecisionTreeRegressor
x = some data
y = some data
def tryfeatures(feature, value, x, y):
tree = DecisionTreeRegressor(feature=value)
return tree.fit(x, y)
tryfeatures('max_depth', 5, x, y)
在这里,我选择“max_depth”作为特征,但我找不到向构造函数 DecisionTreeRegressor 表达我将max_depth特征定义为值 5 的方法。 这是我希望 DecisionTreeRegressor 在那段代码之后执行的操作:
tree = DecisionTreeRegressor(max_depth=5)
然后,我会这样做
tryfeatures('min_samples_split', 3, x, y)
等等。我不确定这是否被称为通过引用传递,或者它是否与kwargs有关,无论哪种方式,我都需要你的帮助。
我期望决策树与我给出的参数 (max_depth) 及其值拟合,但我知道这不是调用它的方式。
答:
0赞
Roberto Carlos Cruz Rodríguez
2/3/2023
#1
只需传递一个字典,其中每个键都与参数名称匹配,每个值与相应的值匹配,您就可以将此策略用于任何函数(特别是构造函数)。例:
def my_funct(a, b, c):
# do somthing here
return a+b+c
# this is valid
args = {'a':1, 'b':2, 'c':3 }
result = my_funct(**args) # result == 6
请注意,您需要确保传递必需参数,可选参数可以存在,也可以不存在
在您的情况下:
def tryfeatures(args_for_dtr, x, y):
tree = DecisionTreeRegressor(**args_for_dtr)
return tree.fit(x, y)
tryfeatures({'max_depth':5}, x, y)
评论
0赞
ignacM
2/3/2023
谢谢,这很完美。刚刚学到了一些关于kwargs的新知识。
评论
DTR(feature=value)
传递一个字面意思是 ;拥有同名的变量并不会神奇地使该代码执行完全不同的操作。一种方法是 .feature
DTR(**{feature: value})