随机森林分类器对象的参数解释

3

我目前正在开发一个随机森林分类器,使用网格搜索来获取最佳参数。

因此,当我得到我的参数时,它们保存在我的变量中:

params = {'bootstrap': 'True', 
          'criterion': 'entropy', 
          'max_depth': 'None', 
          'max_features': '3', 
          'min_samples_leaf': '4', 
          'min_samples_split': '3'}

我希望能像这样做:

clf = RandomForestClassifier(params)

但是在这里,params代替了n_estimators,所以会出现一些错误:

ValueError: n_estimators must be an integer, got <class 'dict'>.
1个回答

9
您需要使用以下方法解包函数调用的参数:
clf = RandomForestClassifier(**params) 

让我向您展示使用字典作为带有默认参数函数的函数参数的各种方法的结果。函数调用后的注释是打印结果。

def foo(bar=None, baz=None):
    print(bar, baz)

params = { "bar": "Hello", "baz": "World"}

# pass params as the first parameter
foo(params) # {'baz': 'World', 'bar': 'Hello'} None

# pass keys of params as parameters (order is out of our hands)
foo(*params) # baz bar

# unpacks params with key=value as parameters
foo(**params) # Hello World

我注意到你总是在你的值中使用字符串表示,即使是NoneTrue - 如果函数期望实际上是None或布尔值而不是字符串,则可能会遇到问题。最好检查API,看看哪些值是有效的。


非常感谢!是的,我知道我会在类型方面遇到麻烦,我正在寻找一个等价于 var = int(a) | bool(a) | a 的方法,但它不起作用 x) - Paul-Emile Moreau
用正则表达式搞定了! :) '(?P<key>[a-z_]+)=((?P<int>\d+)|(?P<bool>True|False)|(?P<none>None)|(?P<string>[a-zA-Z]+))' 然后加上一些if/elif ^^ - Paul-Emile Moreau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接