【问题标题】:How to tell RandomizedSearchCV to choose from distribution or None value?如何告诉 RandomizedSearchCV 从分布或无值中进行选择?
【发布时间】:2017-09-19 15:37:43
【问题描述】:

假设我们试图找到RandomForestClassifier 的最佳max_depth 参数。我们正在使用RandomizedSearchCV

from scipy.stats import randint as sp_randint
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV

rf_params = {              # Is this somehow possible?
              'max_depth': [sp_randint(1, 100), None],
            }

n_iter = 10

random_search = RandomizedSearchCV(RandomForestClassifier(), 
                                   verbose=50, 
                                   param_distributions=rf_params,
                                   n_iter=n_iter, 
                                   n_jobs=-1, 
                                   scoring='f1_micro')

random_search.fit(X_train, y_train)

是否可以告诉RandomizedSearchCV 从指定分布sp_randint(1, 100) 中进行选择或将参数设置为None,这将(如文档中所示):"...展开节点,直到所有叶子都是纯的或者直到所有叶子包含少于 min_samples_split 个样本..."

当我现在运行这段代码时,我会得到这个错误:

【问题讨论】:

    标签: python scipy scikit-learn random-forest hyperparameters


    【解决方案1】:

    同样来自docs:“如果给定了一个列表,则统一采样。”使用这个:

    'max_depth': list(range(1, 100)) + [None]
    

    【讨论】:

    • 感谢您的回答,但现在从此类列表中随机选择None 的机会非常小,可以通过某种方式改进吗?
    • 对你来说什么是“改进”?我问是因为如果你想保证它被选中,你最好使用 GridSearchCV。
    • 好吧,也许有一些与均匀分布不同的分布,比如说几何 (docs.scipy.org/doc/scipy/reference/generated/…),其中 None 的概率很高 P(x=None)。
    • 如果您让None 代替属于该分布的其他值,则这样的分布是有意义的。想想你心目中的问题域,应该替换什么?
    • 好吧,如果我们有geom(p=0.5, loc=0),那么None 可以替代价值0。但是我的RandomForestClassifier 会发现max_depth=0 代表max_depth=None 吗?
    猜你喜欢
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 2013-04-03
    • 2021-10-05
    相关资源
    最近更新 更多