如何在新函数中调用构造函数的参数名称?

How to call the argument name of a constructor inside a new function?

提问人:ignacM 提问时间:2/3/2023 最后编辑:ignacM 更新时间:2/3/2023 访问量:37

问:

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) 及其值拟合,但我知道这不是调用它的方式。

Python 机器学习 通过引用 决策树

评论

0赞 jasonharper 2/3/2023
DTR(feature=value)传递一个字面意思是 ;拥有同名的变量并不会神奇地使该代码执行完全不同的操作。一种方法是 .featureDTR(**{feature: value})

答:

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的新知识。