机器学习之网格搜索技术,如何在Auto-sklearn中应用网格搜索技术

这篇具有很好参考价值的文章主要介绍了机器学习之网格搜索技术,如何在Auto-sklearn中应用网格搜索技术。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,机器学习中的网格搜索技术是怎么回事

网格搜索(Grid Search)是一种常用的超参数调优方法,它通过遍历给定的超参数组合,从中寻找最优的超参数组合。

可以用于选择最佳模型参数。在机器学习模型的训练过程中,有许多参数需要设置,例如神经网络中的隐藏层数、每层的神经元数量等。这些参数会影响模型的性能和准确度。

网格搜索技术通过枚举一组超参数的可能取值,然后对每一组取值进行训练和评估来确定最优的超参数组合。它基于一个预定义的参数网格,并使用交叉验证来确定最佳参数集合,从而实现了自动调参

网格搜索技术在处理高维数据时非常有用,因为它可以在所有可能的参数组合中搜索最佳的超参数组合,从而提高模型的准确度和稳定性。

二,通俗解释

网格搜索技术其实就是一种智能的“试错”方法,可以帮助机器学习模型找到最佳的参数组合。假设我们有一个需要训练的机器学习模型,里面有很多参数需要设置,但我们不知道哪个参数组合会得到最好的结果。这时候,我们可以通过网格搜索技术来自动化地测试多种可能的参数组合,并找到最优的那个(类似于在一个网格中排列所有可能的参数组合,逐个尝试,直到找到最佳的那个)。这个过程需要计算机自动化地完成,并输出最优参数组合以供我们使用。这样,我们就可以节省大量时间和精力来手动调整参数,并且可以更容易地找到最佳的参数组合,从而让我们的机器学习模型变得更加准确和可靠。

三,在一般情况下使用网格搜索技术

  1. 首先,我们需要导入必要的python库,包括scikit-learn(一种流行的机器学习库)和numpy(用于数据处理和计算):
import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
  1. 然后,我们需要准备一些训练数据,这里使用scikit-learn自带的iris数据集:
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
  1. 接下来,我们定义一个支持向量机(SVM)模型,并设置需要测试的超参数范围。在这个示例中,我们将测试不同的C值和gamma值(两个影响SVM性能的重要参数):
svm = SVC()
parameters = {'C': [0.1, 1, 10], 'gamma': [0.01, 0.1, 1]}
  1. 我们现在可以使用GridSearchCV来执行网格搜索。这里我们设置cv参数为5,表示使用5折交叉验证来评估每个参数组合的性能。
clf = GridSearchCV(svm, parameters, cv=5)
clf.fit(X, y)
  1. 训练完成后,我们可以使用best_params_属性来获取最佳的参数组合,以及使用best_score_属性来获取最佳的性能得分
print("Best parameters: ", clf.best_params_)
print("Best score: ", clf.best_score_)
  1. 最后,我们可以使用最佳的参数组合来训练最终的模型,并用它进行预测:
best_svm = SVC(C=1, gamma=0.01)
best_svm.fit(X, y)
predictions = best_svm.predict(X)

这个示例中,我们使用网格搜索技术寻找最佳的SVM超参数组合。当我们执行GridSearchCV时,它会自动测试每种可能的Cgamma值组合,并返回最佳的参数组合和相应的准确度得分。最后,我们使用最佳的超参数组合来训练最终的模型,并用它来进行新的数据预测。

四,GridSearchCV网格搜索技术的原理

scikit-learn中,GridSearchCV类是用来实现网格搜索技术的。它内部使用了交叉验证技术来评估每一个超参数组合的性能。

原理如下:

  1. 首先,将训练集数据划分为k个等分。

对于每一组超参数组合,使用k-1份数据进行模型训练,并在留出的k份数据上进行预测,得到该组超参数组合的平均准确度得分。

  1. 重复步骤2,直到所有的超参数组合都被测试完毕,得到每组超参数组合的平均准确度得分

  2. 最终选择具有最高平均准确度得分的超参数组合作为最佳超参数组合,并返回该组合对应的模型。

  3. 可以看出GridSearchCV核心思想就是穷举所有可能的超参数组合,通过交叉验证来计算每个组合的性能得分,从而找到最佳的超参数组合。这种技术虽然简单,但非常有效,能够帮助机器学习工程师快速找到最优的模型超参数,从而提高模型的准确度和稳定性。

五,如何在Auto-sklearn中使用网格搜索技术

1. Auto-sklearn实际用应用中一般不会使用网格搜索技术

在autosklearn中,不需要使用传统的网格搜索技术。相反,autosklearn使用一种叫做“贝叶斯优化”的方法或者随机搜索方法来寻找最佳超参数组合。

2. 不使用网格搜索技术的原因

网格搜索是一种传统的超参数优化方法,它通过定义一组超参数的值域范围,对所有可能的超参数组合进行穷举搜索。例如,对于两个超参数ab,如果它们分别在[1,10][0.01, 0.1]范围内,则可以使用网格搜索算法在100个不同的超参数组合中搜索最佳的超参数组合。网格搜索的缺点是当超参数数量较多或者取值范围较大时,搜索空间会变得非常庞大,计算成本也会增加。

3. 随机搜索和贝叶斯优化

  1. 随机搜索是一种比网格搜索更为高效的超参数优化方法,它直接在超参数空间中随机采样一定数量的超参数组合,并评估它们的性能,从而寻找最佳的超参数组合。相比于网格搜索,随机搜索无需对所有超参数进行穷举搜索,因此计算成本更低。

  2. 贝叶斯优化是一种基于贝叶斯统计学理论的超参数优化方法,它通过先验概率和观测数据来不断更新超参数空间的后验概率分布,并选择其中最有可能获得最佳性能的超参数组合进行评估。贝叶斯优化算法具有高效、智能和自适应的特点,因此在大规模或复杂的机器学习问题中通常表现出色。

  3. 与网格搜索相比,随机搜索和贝叶斯优化算法都可以降低计算成本,并且可以避免在非重要的区域内搜索。同时,贝叶斯优化算法还可以更好地处理噪声数据,并具有更好的全局优化能力。

4. 三种技术的应用场景

网格搜索:适用于超参数数量较少且范围已知的情况下,可以使用网格搜索来穷举搜索所有超参数的可能值。

随机搜索:适用于超参数空间比较大或无法确定超参数的取值范围时,随机搜索算法可以在超参数空间内随机采样一定数量的超参数组合进行评估。

贝叶斯优化:适用于需要优化时间和计算成本的场景,例如模型训练周期长、计算资源有限等。贝叶斯优化算法可以根据前几次试验的结果调整超参数搜索的方向,并尝试更精确地找出最佳超参数组合。

5. 在Auto-sklearn使用,网格搜索,随机搜索和贝叶斯优化

在autosklearn中,以分类任务为例:

1. 在Auto-sklearn使用,网格搜索

网格搜索:网格搜索需要指定每个超参数的所有可能值,然后将这些值排列成一个网格结构进行搜索。对于分类问题,通常需要调整的超参数包括分类器类型、正则化系数、C值、kernel等。

例如,可以使用以下代码定义多个超参数的值范围:

import autosklearn.classification as asc
cls = asc.AutoSklearnClassifier(time_left_for_this_task=360,
                                 per_run_time_limit=30,
                                 include_estimators=['random_forest', 'adaboost', 'libsvm_svc'],
                                 resampling_strategy='cv',
                                 resampling_strategy_arguments={'folds': 5},
                                 n_jobs=4)
cls_config_space = cls.get_configuration_space()
params = {'classifier:__choice__': ['random_forest', 'adaboost', 'libsvm_svc'],
          'classifier:random_forest:max_features': Int(1, 20),
          'classifier:adaboost:n_estimators': Categorical([50, 100, 200]),
          'classifier:adaboost:learning_rate': Float(0.01, 0.1, default=0.1, log=True),
          'classifier:libsvm_svc:C': Float(0.01, 10, default=1, log=True),
          'preprocessor:__choice__': ['no_preprocessing', 'select_percentile_classification'],
          'preprocessor:select_percentile_classification:percentile': Int(1, 100),
          'preprocessor:select_percentile_classification:score_func': ['f_classif', 'chi2']}

在这个例子中,我们指定了三种不同的分类器类型(随机森林、AdaBoost和支持向量机)和两种数据预处理方法(无预处理和百分位数特征选择),对于每种分类器,我们还需要调整它们的具体超参数。

2. 在Auto-sklearn使用,随机搜索

如果想要使用随机搜索算法而不是SMAC(一种贝叶斯优化方法)算法,那么应该将smac_scenario_args中的runcount_limit参数设置为None。这样做可以使autosklearn选择随机搜索算法来进行超参数搜索。

以下是使用随机搜索算法调用autosklearn时的示例代码:

import autosklearn.classification as asc
cls = asc.AutoSklearnClassifier(time_left_for_this_task=360,
                                 per_run_time_limit=30,
                                 include_estimators=['random_forest', 'adaboost', 'libsvm_svc'],
                                 resampling_strategy='cv',
                                 resampling_strategy_arguments={'folds': 5},
                                 n_jobs=4,
                                 ensemble_size=0,
                                 initial_configurations_via_metalearning=0,
                                 smac_scenario_args={'runcount_limit': None},
                                 random_state=42)
cls.fit(X_train, y_train, dataset_name='classification', metric=accuracy, optimize_metric=True)

在这个例子中,我们将smac_scenario_args中的runcount_limit参数设置为None,表示使用随机搜索算法来进行超参数搜索。

3. 在Auto-sklearn使用,贝叶斯优化

贝叶斯优化:贝叶斯优化算法通过先验概率和观测数据来不断更新超参数空间的后验概率分布,并选择其中最有可能获得最佳性能的超参数组合进行评估。
在autosklearn中,如果不指定任何超参数搜索算法,则默认使用贝叶斯优化算法。但是,我们可以通过调整以下参数来指定特定的搜索算法:

import autosklearn.classification as asc
cls = asc.AutoSklearnClassifier(time_left_for_this_task=360,
                                 per_run_time_limit=30,
                                 include_estimators=['random_forest', 'adaboost', 'libsvm_svc'],
                                 resampling_strategy='cv',
                                 resampling_strategy_arguments={'folds': 5},
                                 n_jobs=4,
                                 ensemble_size=0,
                                 initial_configurations_via_metalearning=0,
                                 smac_scenario_args={'runcount_limit': 10},
                                 random_state=42)
cls.fit(X_train, y_train, dataset_name='classification', metric=accuracy, optimize_metric=True)

在这个例子中,我们可以通过设置smac_scenario_args参数来选择使用SMAC算法(一种贝叶斯优化方法)或随机搜索算法。如果将runcount_limit设置为正整数,则表示使用SMAC算法;如果将其设置为None,则表示使用随机搜索算法。

4. runcount_limit参数设置作用

runcount_limit参数指定了SMAC算法运行的最大步数(即评估超参数组合的次数)。当runcount_limit设置为较小的值时,SMAC算法只能进行有限的尝试,可能无法找到最佳超参数组合。相反,如果将该参数设置得非常大,则SMAC算法将花费更长时间来搜索空间,并且可能会找到更好的超参数组合。

在autosklearn中,如果将runcount_limit参数设置为正整数,则SMAC算法将被用于搜索超参数空间。因此,runcount_limit参数的大小会影响超参数搜索的准确性和速度。如果您的数据集比较小,那么可以将runcount_limit设置为较小的值,例如10或20,这样可以节省时间并快速获得一组相对较好的超参数。如果您的数据集很大,建议将runcount_limit设置为较大的值,例如50或100,以便能够更全面地搜索超参数空间。

需要注意的是,使用随机搜索算法可以避免SMAC算法中的这些问题,因为随机搜索算法会直接在超参数空间中随机抽样超参数组合进行评估,而不是使用启发式算法。因此,如果您的任务比较简单,可以使用随机搜索算法代替SMAC算法。文章来源地址https://www.toymoban.com/news/detail-489131.html

到了这里,关于机器学习之网格搜索技术,如何在Auto-sklearn中应用网格搜索技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于网格搜索的随机森林回归算法Python实现

            随机森林回归算法的应用领域很广,可用于市场销售预测、客户细分、商品推荐等领域,也可应用于气候模型预测、土地利用分析、水资源管理等环境领域问题。其算法的Python实现涉及到多参数调优问题,本文使用了网格搜索法,以MSE作为评价指标,选取最佳MSE的参

    2024年02月06日
    浏览(50)
  • XGBoost模型调参:GridSearchCV方法网格搜索优化参数

    本篇文章是继上一篇文章:使用K-Fold训练和预测XGBoost模型的方法,探讨对XGBoost模型调优的方法,所使用的代码和数据文件均是基于上一篇文章的,需要的小伙伴可以跳转链接自行获取。 程序和上篇文章中的完全一致,不再赘述。 一般调参会考虑以下几个超参数(需要在模型

    2023年04月08日
    浏览(44)
  • 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数

    二分查找算法合集 动态规划汇总 视频算法专题 给你一个下标从 0 开始的 m x n 整数矩阵 grid 。你一开始的位置在 左上角 格子 (0, 0) 。 当你在格子 (i, j) 的时候,你可以移动到以下格子之一: 满足 j k = grid[i][j] + j 的格子 (i, k) (向右移动),或者 满足 i k = grid[i][j] + i 的格子

    2024年02月04日
    浏览(40)
  • 支持向量机svm分类、回归、网格搜索 基于sklearn(python)实现

    由于水平有限 支持向量机(support vector machine)的数学原理和证明就不讲了 想知道可以去看李航的机器学习或者西瓜书 1、读入数据,将数据调成该库能够识别的格式 2、 将数据标准化 ,防止样本中不同特征的数值差别较大,对分类结果产生较大影响 3、利用网格搜索和k折交

    2023年04月11日
    浏览(46)
  • 机器学习:自动编码器Auto-encoder

    不用标注数据就能学习的任务,比如Bert之类的。但最早的方法是Auto-encoder。 encoder输出的向量,被decoder还原的图片,让输出的图片与输入的图片越接近越好。 将原始的高维向量变成低维向量,将该新的特征用于下游任务。 相关的类似方法: PCA: youtu.be/iwh5o_M4BNU t-SNE: yout

    2024年02月14日
    浏览(52)
  • 如何基于知识图谱技术构建现代搜索引擎系统、智能问答系统、智能推荐系统?

    1.构建搜索引擎系统 下图中描述的体系结构包括三个部分:结合本体库的网络爬虫,索引及检索模块以及知识图谱模块。其中爬虫及索引模块主要负责从网络中爬取原始数据并通过解析得到实体相关信息以及建立索引;搜索模块结合本体库Query解析检索语句得到搜索,

    2024年02月12日
    浏览(57)
  • scikit-learn(sklearn)库中的网格搜索(Grid Search)自动化的方法来搜索最佳参数组合

    在机器学习中,调参是一个非常重要的步骤,它可以帮助我们找到最优的模型参数,从而提高模型的性能。然而,手动调参是一项繁琐且耗时的工作,因此,我们需要一种自动化的方法来搜索最佳参数组合。在这方面,scikit-learn(sklearn)库中的网格搜索(Grid Search)功能为我

    2024年02月11日
    浏览(46)
  • Python实现决策树回归模型(DecisionTreeRegressor算法)并应用网格搜索算法调优项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 1.项目背景 决策树除了能进行分类分析,还能进行回归分析,即预测连续变量,此时的决策树称为回归决策树。回归问题是一类预测连续值的问

    2024年01月21日
    浏览(49)
  • 「深度学习之优化算法」(十四)麻雀搜索算法

    (以下描述,均不是学术用语,仅供大家快乐的阅读) 麻雀搜索算法(sparrow search algorithm)是根据麻雀觅食并逃避捕食者的行为而提出的群智能优化算法。提出时间是2020年,相关的论文和研究还比较少,有可能还有一些正在发表中,受疫情影响需要论文的同学抓紧时间水论

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包