机器学习之超参数优化 - 网格优化方法(网格搜索)

机器学习之超参数优化 - 网格优化方法(网格搜索)

超参数优化与枚举网格的理论极限

  • 超参数优化HPO(HyperParameter Optimization)

每一个机器学习算法都会有超参数,而超参数的设置很大程度上影响了算法实际的使用效果,因此调参是机器学习算法工程师最为基础和重要的任务。现代机器学习与深度学习算法的超参数量众多,不仅实现方法异常灵活、算法性能也受到更多的参数的复合影响,因此当人工智能浪潮来临时,可以自动选择超参数的超参数优化HPO领域也迎来了新一轮爆发。

在算法的世界中,我们渴望一切流程最终都走向完美自动化,专门研究机器学习自动化的学科被称为AutoML,而超参数自动优化是AutoML中最成熟、最深入、也是最知名的方向。理论上来说,当算力与数据足够时,HPO的性能一定是超过人类的。HPO能够降低人为工作量,并且HPO得出的结果比认为搜索的复现可能性更高,所以HPO可以极大程度提升科学研究的复现性和公平性。当代超参数优化算法主要可以分为:

基于网格的各类搜索(Grid)

基于贝叶斯优化的各类优化算法(Baysian)

基于梯度的各类优化(Gradient-based)

基于种群的各类优化(进化算法,遗传算法等)

其中,各类网格搜索方法与基于贝叶斯的优化方法是最为盛行的,贝叶斯优化方法甚至可以被称为是当代超参数优化中的SOTA模型。这些模型对于复杂集成算法的调整有极大的作用与意义。

网格搜索的理论极限与缺点

在所有超参数优化的算法当中,枚举网格搜索是最为基础和经典的方法。在搜索开始之前,我们需要人工将每个超参数的备选值一一列出,多个不同超参数的不同取值之间排列组合,最终将组成一个参数空间(parameter space)。枚举网格搜索算法会将这个参数空间当中所有的参数组合带入模型进行训练,最终选出泛化能力最强的组合作为模型的最终超参数。

对网格搜索而言,如果参数空间中的某一个点指向了损失函数真正的最小值,那枚举网格搜索时一定能够捕捉到该最小值以及对应的参数(相对的,假如参数空间中没有任意一点指向损失函数真正的最小值,那网格搜索就一定无法找到最小值对应的参数组合)。

参数空间越大、越密,参数空间中的组合刚好覆盖损失函数最小值点的可能性就会越大。这是说,极端情况下,当参数空间穷尽了所有可能的取值时,网格搜索一定能够找到损失函数的最小值所对应的最优参数组合,且该参数组合的泛化能力一定是强于人工调参的。

但是,参数空间越大,网格搜索所需的算力和时间也会越大,当参数维度上升时,网格搜索所需的计算量更是程指数级上升的。以随机森林为例:

只有1个参数n_estimators,备选范围是[50,100,150,200,250,300],需要建模6次。

增加参数max_depth,且备选范围是[2,3,4,5,6],需要建模30次。

增加参数min_sample_split,且备选范围为[2,3,4,5],需要建模120次。

同时,参数优化的目标是找出令模型泛化能力最强的组合,因此需要交叉验证来体现模型的泛化能力,假设交叉验证次数为5,则三个参数就需要建模600次。在面对超参数众多、且超参数取值可能无限的人工神经网络、融合模型、集成模型时,伴随着数据和模型的复杂度提升,网格搜索所需要的时间会急剧增加,完成一次枚举网格搜索可能需要耗费几天几夜。考虑到后续实践过程中,算法和数据都将更加复杂,而建模过程中超参数调优是模型训练的必备环节,因此,我们急需寻找到一种更加高效的超参数搜索方法。在本节课中,我们将介绍三种基于网格进行改进的超参数优化方法,并将他们的结果与网格搜索进行时间/空间/效果上的对比。

import numpy as np
import pandas as pd
import sklearn
import matplotlib as mlp
import matplotlib.pyplot as plt
import seaborn as sns
import time
import re, pip, conda

from sklearn.ensemble import RandomForestRegressor as RFR
from sklearn.model_selection import cross_validate, KFold, GridSearchCV

data = pd.read_csv(r"../datasets/House Price/train_encode.csv",index_col=0)

X = data.iloc[:,:-1]
y = data.iloc[:,-1]

#参数空间
param_grid_simple = {"criterion": ["squared_error","poisson"]
                     , 'n_estimators': [*range(20,100,5)]
                     , 'max_depth': [*range(10,25,2)]
                     , "max_features": ["log2","sqrt",16,32,64,"auto"]
                     , "min_impurity_decrease": [*np.arange(0,5,10)]
                    }
#模型,交叉验证,网格搜索
reg = RFR(random_state=1412,verbose=True,n_jobs=-1)
cv = KFold(n_splits=5,shuffle=True,random_state=1412)
search = GridSearchCV(estimator=reg
                     ,param_grid=param_grid_simple
                     ,scoring = "neg_mean_squared_error"
                     ,verbose = True
                     ,cv = cv
                     ,n_jobs=-1)
 
search.fit(X,y)
search.best_estimator_

#按最优参数重建模型,查看效果
ad_reg = RFR(n_estimators=85, max_depth=23, max_features=16, random_state=1412)
cv = KFold(n_splits=5,shuffle=True,random_state=1412)
result_post_adjusted = cross_validate(ad_reg,X,y,cv=cv,scoring="neg_mean_squared_error"
                          ,return_train_score=True
                          ,verbose=True
                          ,n_jobs=-1)
def RMSE(cvresult,key):
    return (abs(cvresult[key])**0.5).mean()

RMSE(result_post_adjusted,"train_score")
RMSE(result_post_adjusted,"test_score")
                       
HPO方法默认参数网格搜索
搜索空间/全域空间-1536/1536
运行时间(分钟)-6.36
搜索最优(RMSE)30571.26629179.698
重建最优(RMSE)-28572.070
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python机器学习教案是一份用于教授学生机器学习领域基础知识和Python编程技能的教学文档。这份教案旨在通过理论和实践相结合的方式,帮助学生了解机器学习的概念、算法和应用,并通过Python编程实现和应用这些算法。 教案的内容可以包括以下方面: 1. 机器学习基础知识:教授机器学习的基本原理、分类和回归等基本概念,引导学生了解机器学习的基本流程和常用术语。 2. Python编程:介绍Python编程语言的基本语法和数据结构,帮助学生熟悉Python的编程环境和基本操作。 3. 数据预处理:引导学生使用Python库对数据进行清洗、处理和转换,以满足机器学习算法的输入要求。 4. 机器学习算法:介绍常用的机器学习算法,例如线性回归、逻辑回归、决策树、支持向量机和神经网络等。针对每个算法,教案应当包括原理解释、应用示例和案例分析。 5. 模型评估和优化:教授学生如何评估机器学习模型的性能,并提供常见的模型优化方法,如交叉验证、网格搜索和特征选择等。 6. 实践项目:安排学生参与实践项目,使用Python编程和机器学习算法解决实际问题,以巩固他们的理论知识和实战能力。 教案的设计应该注重启发式和互动式学习,例如通过小组讨论和案例分析来鼓励学生主动思考和解决问题。此外,教案还可以引入一些开源的Python机器学习库,如scikit-learn和TensorFlow等,以便学生能够更快地实践和应用机器学习。 通过这份教案的学习,学生将能够掌握Python编程和机器学习的基本技能,为他们进一步深入学习和应用机器学习提供坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆的比目鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值