首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >超参数调谐

超参数调谐
EN

Stack Overflow用户
提问于 2020-02-05 08:18:32
回答 3查看 1.5K关注 0票数 1

我目前正在自己做一个项目。对于这个项目,我试图比较多个算法的结果。但是我想确保每个测试的算法都被配置成给出了最好的结果。

因此,我使用交叉验证和测试每一个组合的参数,并选择最佳。

例如:

代码语言:javascript
运行
复制
def KMeanstest(param_grid, n_jobs): 

    estimator = KMeans()

    cv = ShuffleSplit(n_splits=10, test_size=0.2, random_state=42)

    regressor = GridSearchCV(estimator=estimator, cv=cv, param_grid=param_grid, n_jobs=n_jobs) 

    regressor.fit(X_train, y_train) 

    print("Best Estimator learned through GridSearch") 
    print(regressor.best_estimator_)

    return cv, regressor.best_estimator_

param_grid={'n_clusters': [2], 
            'init': ['k-means++', 'random'],
            'max_iter': [100, 200, 300, 400, 500],
            'n_init': [8, 9, 10, 11, 12, 13, 14, 15, 16], 
            'tol': [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6], 
            'precompute_distances': ['auto', True, False], 
            'random_state': [42],
            'copy_x': [True, False],
            'n_jobs': [-1],
            'algorithm': ['auto', 'full', 'elkan']
           }

n_jobs=-1

cv,best_est=KMeanstest(param_grid, n_jobs)

但现在是消磨时间。我想知道这个方法是最好的还是我需要使用不同的方法。

谢谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-05 10:41:55

GridSearch的问题在于,正如您正确地说的那样,它非常耗时。RandomSearch有时是一个很好的选择,但它并不是最优的。

贝叶斯优化是另一种选择。这使得我们可以使用概率方法快速地在最优参数集上进行区域划分。我亲自尝试过在python中使用超选择库,它运行得很好。有关更多信息,请查看此教程。您也可以从我的GitHub下载相关的笔记本。

好的是,既然您已经对GridSearch进行了实验,那么您就大致了解了哪些参数范围不能很好地工作。因此,您可以为运行贝叶斯优化定义一个更精确的搜索空间,这将减少更多的时间。此外,hyperopt还可以用来比较多个算法及其各自的参数。

票数 3
EN

Stack Overflow用户

发布于 2020-02-05 10:14:20

除了随机搜索和网格搜索之外,还有一些工具和库可用于更智能的超参数优化。我成功地使用了欧普吞拿,但是很少有更多的。

票数 3
EN

Stack Overflow用户

发布于 2020-02-05 08:49:00

你可以尝试随机搜索代替网格搜索,随机搜索是一种利用超参数的随机组合来为建立的模型找到最佳解的技术。它尝试一系列值的随机组合。为了进行随机搜索优化,该函数在参数空间中按一定数量的随机配置求值。

您可以在滑雪板文档页面上找到详细信息。对随机搜索和网格搜索进行了比较。

我希望你觉得这很有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60071585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档