社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

R语言数据实战 | 机器学习-模型训练与调参

狗熊会 • 4 年前 • 1451 次点击  
点击蓝字关注我们


模型调参

机器学习调参的思路都异曲同工,首先确定一个参数池,也就是模型参数值的可选范围。从这个池子中挑选出不同的参数组合,对于每个组合都计算其预测精度,最后选取预测精度最高的参数组合。

1.什么是调参?

调参的过程就像是找人生伴侣的过程,首先我们有一个标准,比如身高、体重等,符合这个标准的异性将进入到参数池中。然后我们跟参数池中的每个异性谈恋爱,找到最适合我们的那个作为终极选择。接下来,介绍两种常见的调参方法:网格搜索与随机搜索。

图1 调参流程

网格搜索首先会有一个标准,将符合标准的参数放入参数池中,形成不同的参数组合。而随机搜索则不同,随机搜索没有标准,随机地组合参数。依然以找男友为例,假设参数有3个:身高、体重、年龄。

网格搜索会对这3个参数设定一个范围,比如身高>180厘米,体重小于<140斤,年龄在20~40岁之间,符合这些条件的男性为图2中的左图。但是随机搜索则不同,有些女性觉得如果设定了择偶条件,反而容易错过自己喜欢的,也许适合自己的恰好身高只有179厘米。

这两种不同的搜索方式出来的参数组合是不同的,图2中的左图是网格搜索的参数组合结果,右图为随机搜索的参数组合结果。两者各有优缺点,随机搜索与网格搜索相比,其优点在于能随机地遍历所有参数空间,但是缺点也很明显:不知道随机出来的是什么类型的人。下面分别看看两种搜索方式的实现。

(1)网格搜索

图2 网络搜索和随机搜索

首先来看在caret包中如何轻轻松松实现网格搜索。

• 第一步:设置随机种子,保证实验的可重复性;

• 第二步:利用traincontrol()函数设置模型训练时用到的参数。其中method表示重抽样方法。此处,"cv"表示交叉验证,number表示几折交叉验证,本例中是10折交叉验证。10折交叉验证表示,首先将样本分为10个组,每次训练的时候抽取其中9组作为训练集,剩下的1组作为测试集。classProbs参数表示是否计算类别概率,如果评价指标为AUC,那么这里一定要设置为TRUE。由于因变量为两水平变量,所以summaryFunction这里设置为twoClassSummary。

• 第三步:设置网格搜索的参数池,也就是设定参数的选择范围。这里以机器学习中的gbm(Gradient boosting machine)方法为例,所以有4个超参数需要设定,分别为迭代次数(n.trees),树的复杂度(interaction.depth),学习率(shrinkage),训练样本的最小数目(n.minobsinnode)。这里设定了60组参数组合。

• 第四步:利用train()函数来进行模型训练及得到最优参数组合。该函数会遍历第三步得到的所有参数组合,并得到使评价指标最大的参数组合作为输出。method表示使用的模型,本例使用机器学习中的gbm(Gradient boosting machine)模型,使用的评价指标为ROC曲线面积(即AUC值)。

• 第五步:模型会自动确定ROC曲线面积最大(即AUC值最高)的参数组合,也就是图3中最高的点对应的参数组合,对应的AUC值为90.14%。

图3 AUC值与迭代次数的折线图

(2)随机搜索

随机搜索与网格搜索相比,参数的选择没有固定的范围,最终的结果可能好也可能坏。它的实现步骤如下:

• 第一步:设定随机种子。

• 第二步:利用trainControl()函数设定模型训练的参数,但是多了一项:search=”random”。

• 第三步:超参数在随机搜索中不受约束,没有条条框框的限制。所以无须设置tuneGrid参数,只需要设置参数tuneLength(随机搜索多少组)。

• 第四步:最优的参数组合如下所示。可以看出,与网格搜索的结果大有不同,对应的AUC值为90.29% ,与网格搜索相比略有提高。

模型预测

确定最优参数之后,模型如何进行预测呢?使用predict()函数,只要输入模型及测试集,就可以预测了。然后利用confusionMatrix()函数输入真实的Y与预测的Y就可以得到混淆矩阵(Confusion Matrix)。

网格搜索的参数与随机搜索的参数的预测结果有什么区别呢?下面的操作结果可以明显看出两者的区别。

从以上结果看,随机搜索的结果比网格搜索的预测结果更好,这只能说明很幸运,随机地把最好的结果找出来了




购买指南


请扫描以下二维码/点击链接购买

R语言:从数据思维到数据实战》


1
京东


2
当当网



3
天猫

https://detail.tmall.com/item.htm?spm=a220z.1000880.0.0.0A6pvS&id=581845865737





点击"阅读原文"下载数据、代码!


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52283
 
1451 次点击