机器学习算法调优

BP

调优事项

  • BP对feature scaling很敏感,要先scale data。
  • 经验来说,L-BFGS在小数据上收敛更快效果更好;Adam在大数据上表现很好;SGD在参数learning rate调整好的基础效果更好。

调参

  1. 首先隐含层个数。一般来说,如果问题线性可分,那么不用隐含层就行;对于绝大多数问题,一个隐含层的效果就很好;多个隐含层的话训练起来更困难一些(需要用到自编码器或者RBM去预训练而且训练参数增长很快)。
  2. 接下来确定隐含层的神经元个数,一般来说,神经元个数在输出层和输出层神经元个数之间比较好。可以通过CV确定合适的神经元个数。同时也可以先增大下神经元的个数,然后通过pruning减少神经元个数。pruning的原理是在神经网络训练的时候主动把没什么用的神经元去掉,没什么用的神经元的特征就是其连接的w很小,所以我们可以得到神经网络后看看W的权重矩阵再决定是否要删除部分神经元。
  3. 画出学习曲线。
  4. 如果学习曲线不稳定,那么减少学习率;如果学习曲线变化很慢,那么增大学习率。
  5. 如果学习曲线发现过拟合,那么提前终止或加大正则系数或减少模型复杂度;如果学习曲线欠拟合,那么多迭代或减少正则项系数或增大模型复杂度。

LR

参数

  • CC:正则项λ\lambda的倒数,越小模型越简单。
  • learning_rate

调优事项

  • sklearn中的LogisticRegression没有使用SGD,用的是一些solver,所以没有learning_rate。
  • sklearn中SGDClassifier适合对线性模型(SVM、逻辑回归)用SGD优化,常调的参数有learning_ratealpha,SGD的速度更快一些。
  • sklearn中有LogisticRegressionCV,可以实现更快的CV。适合调整正则项惩罚权重的算法。

调参

grid search cross validation

SVM

参数

γ\gamma越大,单个训练数据(SV)影响越小(只有靠近SV的才可以影响),只能影响到自己周围的小区域,这样可能需要更多的SV,模型复杂度升高。 CC越大,模型为了不犯错,不得不变得更复杂,模型复杂度升高。

  • γ\gamma:单个训练数据(SV)影响距离大小,因为高斯核是exp(−γ||x−xn||2)\exp(-\gamma||x-x_n||^2),所以γ\gamma越小,单个训练数据(SV)影响越大。γ\gamma可以看做是SV影响半径的倒数。
  • CC:CC参数在模型的复杂度与模型的正确率之间做权衡。如果CC很大,那么模型可能会变得很复杂以尽量减少分类错误,可能会过拟合;如果CC很小,那么模型可能会很简单以至于在训练集上效果不好。

调优事项

  • 10−310^{-3}至10310^{3}的log grid的调参区间便已足够
  • 模型非常受γ\gamma参数的影响,当γ\gamma很大,那么SV的影响半径就很小,只能影响到它自己,这样很容易过拟合。这种情况下即使改变CC也无济于事。
  • 当γ\gamma很小,模型太受限了不能够捕捉到复杂的形状。每个SV的影响半径扩大以至于包含了整个训练集,这样模型就很简单,原因类似KNN中K很大。
  • γ,C\gamma,C的最优组合一般在分布的对角线上,选择较平滑的模型(低γ\gamma),通过增大SV的数量(高CC)就可以实现很好的效果。
  • γ\gamma不可过大,否则调CC也是没用的。

调参

grid search cross validation

RF

参数

RF的参数主要涉及两部分:

  • 树参数:max depth、min_samples_split、min_samples_leaf、max_features
  • bagging参数:n_estimators

调优事项

  • RF模型的子模型都有较低的bias(树深到头),整体模型的目标是降低variance,所以需要增大树的数目。同时降低子模型之间的相关度有助于降低variance,所以max_feature的值一般设置成特征数目的平方根。
  • max_features默认sqrt,一般设置地小一些。减少max_features有利于减少不同树的相关度,减少最终模型的variance,但是增加了单个模型的bias。
  • max_features的选择和数据质量也有关系,如果数据质量很差的话,小的max_features可能split的时候选错了feature因此很有可能影响最终的模型。

调参

  1. max_features是首要的调参参数,大概300个树的时候通过CV找到最优的max_features
  2. 调整max_depth
  3. 调整n_estimators,一般来说越大越好,调整到验证集上的精度提高不多就可。

GBDT

参数

GBDT设计到的参数主要有三部分:

  • 树参数:max_depth(max_leaf_nodes)、min_samples_split(min_weight_fraction_leaf)、min_samples_leaf、max_features
  • boost参数:learning_rate、n_estimators、subsample
  • 其他参数:loss、init、random_state、verbose、warm_start、presort

一般调整的参数有:

  • 树参数:max_depth、min_samples_split、min_samples_leaf、max_features
  • boost参数:learning_rate、n_estimators

调优事项

  • 与RF相比,GBDT不仅降低了variance(多棵树的组合),而且降低了bias(对错误的数据去训练)。其主要目的是通过树的组合降低bias。每个子模型的bias很大但是variance很小。
  • 对于树的参数,RF主要调的是max_features,其目的是增加子模型间的随机性达到降低整体模型variance的作用。对于GBDT,首要目的是降低bias,所以比较关注max_depth之类的参数,通过调整增大子模型的复杂度降低子模型的bias从而降低整体模型的bias。
  • GBDT如果一直进行下去,肯定也会过拟合的,只不过基本分类器很弱,所以GBDT的抗过拟合的能力很强。
  • 没有最佳的学习率,学习率越低越好,只要有足够多的树。
  • 如果学习率很低,树很多,那么时间上的开销就会很大。

调优策略

讲调优策略之前,先对一些值做下初始化:

  • max_depth:一般选的小点,避免分类器太强,5-8即可。
  • min_samples_split:根据数据大小选,选择数据量的1%即可。
  • min_samples_leaf:根据数据与直觉选。
  • max_features:一般选sqrt
  • subsample:一般选0.8。

每次调优的方法都是grid search,评价参数好坏的标准是cv score

  1. 先对boosting参数调优,包括learning_raten_estimators。一般,、learning_rate值在0.05-2,n_estimators在30-80较好。如果n_estimators过大那么增大learning_rate,反之减少learning_rate
  2. 对树的参数在初始化周围调优,调优顺序是max_depthmin_samples_splitmin_samples_leafmax_features、,可视计算能力分步调优或组合参数调优。
  3. 确定最优的参数组合,然后降低learning_rate,增加同样倍数的n_estimators,直到计算能力到达极限或验证集上模型的提升很小。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

从概率论到多分类问题:综述贝叶斯统计分类

机器之心编译 参与:刘晓坤、路雪 概率论是人类描述宇宙的最基本的工具之一。它与统计分类尤其相关,可推导出大量重要结果,提升人类对外部世界的认知。本文作者 Pet...

3107
来自专栏智能算法

主成分分析到底怎么分析?

PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提...

30410
来自专栏机器学习从入门到成神

BAT机器学习面试1000题系列

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

1570
来自专栏杂七杂八

梯度下降

梯度下降(Gradient Descent)是在求解机器学习算法的模型参数(无约束优化问题)时,最常采用的方法之一 代价函数 提到梯度下降就不得不说一下代价函...

2905
来自专栏大数据挖掘DT机器学习

机器学习中的数学(6)-强大的矩阵奇异值分解(SVD)及其应用

上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。在上篇文章中便是基于特征值分解的一种解释。 ...

2937

如何在Python中为长短期记忆网络扩展数据

用于序列预测问题的数据可能需要在训练神经网络(如长短期记忆递归神经网络)时进行缩放。

2217
来自专栏新智元

深度线性神经网络也能做非线性计算,OpenAI使用进化策略新发现

【新智元导读】OpenAI研究人员Jakob Foerster在OpenAI博客介绍了一个很有趣的实验,他们发现线性神经网络中的浮点表示实际上在零附近有一个比较...

2767
来自专栏新智元

机器翻译新突破!“普适注意力”模型:概念简单参数少,性能大增

目前,最先进的机器翻译系统基于编码器-解码器架构,首先对输入序列进行编码,然后根据输入编码生成输出序列。两者都与注意机制接口有关,该机制基于解码器状态,对源令牌...

844
来自专栏专知

线性回归:简单线性回归详解

【导读】本文是一篇专门介绍线性回归的技术文章,讨论了机器学习中线性回归的技术细节。线性回归核心思想是获得最能够拟合数据的直线。文中将线性回归的两种类型:一元线性...

3327
来自专栏iOSDevLog

统计学基础回顾

1446

扫码关注云+社区