文章目录

  • 一,机器学习中的网格搜索技术是怎么回事
  • 二,通俗解释
  • 三,在一般情况下使用网格搜索技术
  • 四,GridSearchCV网格搜索技术的原理
  • 五,如何在Auto-sklearn中使用网格搜索技术
    • 1. Auto-sklearn实际用应用中一般不会使用网格搜索技术
    • 2. 不使用网格搜索技术的原因
    • 3. 随机搜索和贝叶斯优化
    • 4. 三种技术的应用场景
    • 5. 在Auto-sklearn使用,网格搜索,随机搜索和贝叶斯优化
      • 1. 在Auto-sklearn使用,网格搜索
      • 2. 在Auto-sklearn使用,随机搜索
      • 3. 在Auto-sklearn使用,贝叶斯优化
      • 4. `runcount_limit`参数设置作用

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

网格搜索(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算法。

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

  1. ubuntu下更改时区_技术|如何在 Ubuntu Linux 中设置或更改时区

    你安装 Ubuntu 时,它会要求你设置时区.如果你选择一个错误的时区,或者你移动到世界的一些其它地方,你可以很容易地在以后更改它. 如何在 Ubuntu 和其它 Linux 发行版中更改时区 这里有 ...

  2. 如何在Git历史记录中grep(搜索)已提交的代码

    我过去某个时候已经删除了文件或文件中的某些代码. 我可以在内容中(而不是在提交消息中)grep吗? 一个非常糟糕的解决方案是grep日志: git log -p | grep <pattern& ...

  3. word中画网格立方体_如何在Microsoft Word中制作点网格纸模板

    word中画网格立方体 From bulleted journals for personal planning, to graph paper for designing complex mathe ...

  4. 多模态人物识别技术及其在视频场景中的应用 | CSDN技术公开课

    不用倍速播放,还有什么功能可以让你高效追剧? 爱奇艺的「只看TA」了解一下?而这个功能背后离不开多模态人物识别技术的支撑. 识别视频中的人物涉及哪些信息?只有人脸识别就足够了吗?其实不然,这样一个看似 ...

  5. java做直播需要哪些技术_直播APP开发中需要解决哪些技术难点?千联信息

    泛娱乐发展的火热,网红经济不断发酵的今天,不少企业靠着开发直播APP狠狠的赚了一波,导致很多人眼红,也想投入其中. 那么开发一款直播APP开发中需要解决哪些技术难点?小编在这里就来为大家解答: 视频直 ...

  6. 画出降维后的图片_机器学习实战基础(二十三):sklearn中的降维算法PCA和SVD(四) PCA与SVD 之 PCA中的SVD...

    PCA中的SVD 1 PCA中的SVD哪里来? 细心的小伙伴可能注意到了,svd_solver是奇异值分解器的意思,为什么PCA算法下面会有有关奇异值分解的参数?不是两种算法么?我们之前曾经提到过,P ...

  7. linux 辅助ip地址到文本,技术|如何在 Ubuntu 系统中添加一个辅助 IP 地址

    Linux 管理员应该意识到这一点,因为这是一项例行任务.很多人想知道为什么我们需要在服务器中添加多个 IP 地址,以及为什么我们需要将它添加到单块网卡中?我说的对吗? 你可能也会有类似的问题:在 L ...

  8. 如何在input输入框中加一个搜索的小图片_前端开发困难重重,如何把握机会学习?...

    第3天[form表单] 主要内容 Form表单 表单元素 表单元素的属性 HTML5新增type类型 HTML新增属性 学习目标 一.Form表单 表单在 Web 网页中用来给访问者填写信息,从而能采 ...

  9. 如何在input输入框中加一个搜索的小图片_仿淘宝搜索栏

    1.写入元素内容结构 <form ><input name="keyword" type="text"/><span>< ...

  10. 如何在win10搜索计算机,如何在win10电脑的任务栏搜索框中添加地址?

    其实每一份工作,咱们之所以会有一个烦躁期,就是因为咱们每天进行的工作都是千篇一律,没有变化的,这便是工作最为枯燥的地方,毕竟不管什么工作,重复久了都会产生逆反心理的.就如小编的一个同事,每天都需要对一 ...

最新文章

  1. Leptonica在VS2010中的编译及简单使用举例
  2. shell脚本 定期删除日志
  3. c++ smart pointer 趣谈
  4. 图解Linux系统启动流程
  5. 为什么现在老师这么难,值得大家深思
  6. 1053 Path of Equal Weigh(甲级)
  7. DOM 节点的创建、删除、替换
  8. 让你的Android程序更省电
  9. Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
  10. 未来茅台酒会怎样跌下神坛?
  11. python通过ntohl和htonl等函数实现主机字节序和网络字节序相互转换
  12. 【linux】16进制格式查看命令hexdump
  13. 封包(一)(雷电模拟器+ProxyDroid+查尔斯3.93+WPE)
  14. Windows10如何彻底卸载MySQL
  15. 【嗅探工具】无线WIFI密码破解
  16. Unity 模拟鼠标点击
  17. Excel函数、快捷键等
  18. getSreenWH()
  19. 【Selenium】切换/窗口切换
  20. iScroll.js快速使用

热门文章

  1. python过去电脑网关不可用怎么办_住宅网关不可用
  2. 养心殿新发现“除夕戏目折”在北京故宫午门展出
  3. 时差法超声波明渠流量计
  4. 西门子变频器SINAMICS S120电源模块分享
  5. ANDROID 启动图标大小 UI规范
  6. VMware ESXi中的虚拟机启用鼠标侧键/其他功能键
  7. C51单片机学习——密码锁的实现
  8. RPA自动办公02——Uibot界面元素选择
  9. ARChon 分析之七:启动流程分析
  10. 微积分溯源:当我们谈基本定理时,我们在谈什么?