楼主: 时光永痕
761 0

[数据挖掘新闻] 您需要了解的替代性超参数优化技术 [推广有奖]

  • 0关注
  • 14粉丝

svip3

学术权威

12%

(VIP/贵宾)三级

48%

威望
0
论坛币
26 个
通用积分
49.7576
学术水平
4 点
热心指数
4 点
信用等级
4 点
经验
34070 点
帖子
2731
精华
0
在线时间
316 小时
注册时间
2020-7-21
最后登录
2024-4-24

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
您需要了解的替代性超参数优化技术
在进行机器学习项目时,需要遵循一系列步骤,直到达到目标为止。您必须执行的步骤之一是对所选模型进行超参数优化。此任务始终在模型选择过程之后进行(选择性能比其他模型更好的最佳模型)。
什么是超参数优化?
在定义超参数优化之前,您需要了解什么是超参数。简而言之,超参数是用于控制学习过程的不同参数值,并且对机器学习模型的性能有重大影响。随机森林算法中超参数的示例是估计数(n_estimators),最大深度(max_depth)和条件。这些参数是可调的,可以直接影响模型训练的效果。
然后,超参数优化是找到正确的超参数值组合的过程,以便在合理的时间内获得最大的数据性能。它在机器学习算法的预测准确性中起着至关重要的作用。因此,超参数优化被认为是构建机器学习模型中最棘手的部分。
这些机器学习算法大多数都带有默认的超参数值。默认值在您拥有的其他类型的机器学习项目中并不总是能很好地运行,这就是为什么您需要对其进行优化以便获得最佳性能的正确组合的原因。
选择超参数确实可以使算法大放异彩。
有一些优化超参数的常用策略:
(a)网格搜索
这是一种广泛使用的传统方法,该方法执行超参数调整,以确定给定模型的最佳值。网格搜索通过尝试在模型中尝试使用的每种可能的参数组合来进行工作,这意味着执行整个搜索将花费大量时间,而这可能会使计算变得非常昂贵。
注意:您可以在此处了解如何实施网格搜索。
(b)随机搜寻
在使用超参数值的随机组合来为构建的模型找到最佳解决方案的情况下,此方法的工作原理有所不同。随机搜索的缺点是有时可能会丢失搜索空间中的重要点(值)。
注意:您可以在此处了解更多信息以实施随机搜索。
替代的超参数优化技术。
在本系列文章中,我将向您介绍不同的替代高级超参数优化技术/方法,这些技术/方法可帮助您获得给定模型的最佳参数。我们将研究以下技术。
超级选择
Scikit优化
奥图纳
在本文中,我将重点介绍Hyperopt的实现。
如果您不执行超参数优化,则需要立即开始。
什么是Hyperopt
Hyperopt是James Bergstra开发的功能强大的用于超参数优化的python库。Hyperopt使用贝叶斯优化的一种形式进行参数调整,使您可以获得给定模型的最佳参数。它可以大规模优化具有数百个参数的模型。
Hyperopt的功能
Hyperopt包含您需要了解的4个重要功能,才能运行您的第一次优化。
(a)搜索空间
hyperopt具有不同的功能来指定输入参数的范围,它们是随机搜索空间。搜索空间最常见的选择是:
hp.choice(label,options) —可以用于分类参数,它返回选项之一,应该是列表或元组。例如:hp.choice(“ criterion”,[“ gini”,“ entropy” ,])
hp.randint(label,upper) —可用于Integer参数,它返回(0,upper)范围内的随机整数。例如:hp.randint(“ max_features”,50)
hp.uniform(label,low,high) —它在low和之间均匀地返回一个值high:hp.uniform(“ max_leaf_nodes”,1
您可以使用的其他选项是:
hp.normal(label,mu,sigma) —这将返回一个正态分布的实值,该均值具有均值mu和标准偏差sigma
hp.qnormal(label,mu,sigma,q) —返回类似round(normal(mu,sigma)/ q)* q的值
hp.lognormal(label,mu,sigma) —返回根据exp(normal(mu,sigma))绘制的值
hp.qlognormal(label,mu,sigma,q) —返回类似于round(exp(normal(mu,sigma))/ q)* q的值
您可以在此处了解更多搜索空间选项。
注意:每个可优化的随机表达式都有一个标签(例如n_estimators)作为第一个参数。这些标签用于在优化过程中将参数选择返回给调用方。
(b)目标功能
这是一个最小化函数,用于从搜索空间接收超参数值作为输入并返回损失。这意味着在优化过程中,我们使用选定的超参数值训练模型并预测目标特征,然后评估预测误差并将其返回给优化器。优化器将决定要检查的值并再次进行迭代。您将在实际示例中学习如何创建目标函数。
(c)fmin
fmin函数是优化函数,它对不同的算法集及其超参数进行迭代,然后最小化目标函数。fmin需要5个输入,分别是:
目标函数最小化
定义的搜索空间
要使用的搜索算法,例如随机搜索,TPE(树Parzen估计器)和自适应TPE。
注意: hyperopt.rand.suggest并hyperopt.tpe.suggest为顺序搜索超参数空间提供逻辑。
最大评估数。
试验对象(可选)。
例:
从hyperopt导入fmin,tpe,hp,试用版
试验= Trials()
最佳= fmin(fn = lambda x:x ** 2,
    space = hp.uniform('x',-10,10),
    algo = tpe。建议
    max_evals = 50,
    试验=试验)
打印(最佳)
(d)试用对象
Trials对象用于保留所有超参数,丢失和其他信息,这意味着您可以在运行优化后访问它们。此外,试用版还可以帮助您保存重要信息并稍后加载,然后恢复优化过程。(您将在实际示例中了解更多信息)。
从hyperopt导入试用版
试验= Trials()
在了解了Hyperopt的重要功能之后,以下步骤介绍了使用Hyperopt的方法。
初始化要搜索的空间。
定义目标函数。
选择要使用的搜索算法。
运行hyperopt功能。
分析存储在试验对象中的评估输出。
实践中的超级pot
现在您知道了Hyperopt的重要功能,在这个实际示例中,我们将使用移动价格数据集,任务是创建一个模型,该模型可以预测移动价格为0(低成本)或1(中等成本)的价格)或2(高成本)或3(非常高成本)。
安装Hyperopt
您可以从PyPI安装hyperopt。
点安装hyperopt
然后导入重要的软件包,包括Hyperopt。
#导入包
将numpy导入为np
将熊猫作为pd导入
从sklearn.ensemble导入RandomForestClassifier
从sklearn导入指标
从sklearn.model_selection导入cross_val_score
从sklearn.preprocessing导入StandardScaler
从hyperopt导入tpe,hp,fmin,STATUS_OK,试用版
从hyperopt.pyll.base导入范围
进口警告
warnings.filterwarnings(“忽略”)
数据集
让我们从数据目录加载数据集。要获取有关数据集的更多信息,请阅读此处。
#加载数据
数据= pd.read_csv(“数据/mobile_price_data.csv”)
检查数据集的前五行。
#读取数据
data.head()
超参数优化
如您所见,在我们的数据集中,我们具有带有数值的不同特征。
让我们观察数据集的形状。
#显示形状
数据形状
(2000,21)
在此数据集中,我们有2000行和21列。现在,让我们了解此数据集中的功能列表。
#显示列列表
列表(data.columns)
['battery_power','blue','clock_speed','dual_sim','fc','four_g','int_memory','m_dep','mobile_wt','n_cores','pc','px_height',' px_width”,“ ram”,“ sc_h”,“ sc_w”,“ talk_time”,“ three_g”,“ touch_screen”,“ wifi”,“ price_range”]
您可以在此处找到每个列名称的含义。
将数据集分为目标要素和独立要素
这是一个分类问题,然后我们将从数据集中拆分目标特征和独立特征。我们的目标功能是price_range。
#将数据分为特征和目标
X = data.drop(“ price_range”,axis = 1).values
y = data.price_range.values
预处理数据集。
然后使用scikit-learn的StandardScaler方法对独立功能进行 标准化。
#标准化功能变量
定标器= StandardScaler()
X_scaled = scaler.fit_transform(X)
定义参数空间以进行优化
我们将使用随机森林算法的三个超参数,分别是n_estimators,max_depth和criteria。
空格= {
    “ n_estimators”:hp.choice(“ n_estimators”,[100,200,300,400
    “ max_depth”:hp.quniform(“ max_depth”,1,15
    “ criterion”:hp.choice(“ criterion”,[“ gini”,“ entropy”]),
}
我们在上面选择的超参数中设置了不同的值。然后我们将定义目标函数。
定义要最小化的功能(目标功能)
我们最小化的函数称为hyperparamter_tuning,优化其超参数的分类算法是Random Forest。我使用交叉验证来避免过度拟合,然后该函数将返回损失值及其状态。
#定义目标函数
def hyperparameter_tuning(参数):
    clf = RandomForestClassifier(** params,n_jobs = -1)
    acc = cross_val_score(clf,X_scaled,y,scoring =“ accuracy”)。mean()
    return {“ loss”:-acc,“ status”:STATUS_OK}
注意:请记住,hyperopt将功能降到最低,这就是为什么我在acc中添加负号:
微调模型
最后,首先实例化Trial对象,对模型进行微调,然后使用其超参数值打印出最佳损失。
#初始化试验对象
试验= Trials()
最佳= fmin(
    fn = hyperparameter_tuning,
    空间=空间,
    algo = tpe。建议
    max_evals = 100,
    试验=试验

print(“ Best:{}”。format(best))
100%|█████████████████████████████████████████████████ ██████████|| 100/100 [10:30 <00:00,6.30s /试验,最佳损失:-0.8915]最佳:{'标准':1,'最大深度':11.0,'n_estimators':2}。
在执行超参数优化之后,损失为-0.8915,这意味着通过在Random Forest分类器中使用n_estimators = 300,max_depth = 11,并且条件=“熵”,模型性能的精度为89.15%。
使用试验对象分析结果
试用对象可以帮助我们检查实验期间计算出的所有返回值。
(a)trial.results
这显示了搜索过程中“目标”返回的词典列表。
试验结果
[{'loss':-0.8790000000000001,'status':'ok'},{'loss':-0.877,'status':'ok'},{'loss':-0.768,'status':'ok' },{'loss':-0.8205,'status':'ok'},{'loss':-0.8720000000000001,'status':'ok'},{'loss':-0.883,'status':'ok '},{'loss':-0.8554999999999999,'status':'ok'},{'loss':-0.8789999999999999,'status':'ok'},{'loss':-0.595,'status':'好'},……。]
(b)trial.losses()
这显示了损失列表(每个“确定”试验的浮动)。
trial.losses()
[-0.8790000000000001,-0.877,-0.768,-0.8205,-0.8720000000000001,-0.883,-0.8554999999999999,-0.8789999999999999,-0.595,-0.8765000000000001,-0.877,…………]
(c)trial.statuses()
这显示状态字符串的列表。
trial.statuses()
[“确定”,“确定”,“确定”,“确定”,“确定”,“确定”,“确定”,“确定”,“确定”,“确定”,“确定”,“确定”,“ ok”,“ ok”,“ ok”,“ ok”,“ ok”,“ ok”,“ ok”,…………]。
注意:可以保存该试验对象,将其传递给内置的绘图例程,或者使用您自己的自定义代码进行分析。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:超参数 randomForest scikit-learn Estimators classifier

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 14:41