到底该怎样优化机器学习算法?
本文是吴恩达《机器学习》视频笔记第65篇,对应第6周第7个视频。“Advice for applying machine learning:——Deciding what to try next (revisited)”
前面已经学习了如何评价学习算法,讨论了学习算法的偏差、方差,学了学习曲线。那所有这些东西怎样帮助我们改进我们的学习算法呢?通过这一小节一起总结一下。
我们设计的算法如果不好,那它会有一些不符合我们预期的表现。比如较高的偏差,或者较高的方差等。那出现这些情况的时候我们该做一下怎样的改进呢?
算法不理想的时候我们能做的一些尝试
还是看看以前卖房子的例子,假设你设计的房价预测算法很不理想,那该怎么做呢?你可能会有很多种选择:
[*]收集更多的训练样本,扩大训练集;
[*]减少特征数量,去除一些和结果不相关的特征;
[*]增加特征数量,增加一些可能和结果相关但是被忽略的特征;
[*]增加多项式特征,比如等;
[*]减小正则化系数
[*]加大正则化系数\lambda
如果上面可能选择的工作都做一遍的话,显然会耗费大量时间和精力。那到底怎样做才算有的放矢呢?这就要结合算法在交叉验证集或测试集上的具体表现来选择合适的改进方案。
[*]收集更多的训练样本,扩大训练集;——往往用来解决高方差问题
[*]减少特征数量,去除一些和结果不相关的特征;——往往用来解决高方差问题
[*]增加特征数量,增加一些可能和结果相关但是被忽略的特征;——往往用来解决高偏差问题
[*]增加多项式特征,比如等;——往往用来解决高偏差问题
[*]减小正则化系数——往往用来解决高偏差问题
[*]加大正则化系数——往往用来解决高方差问题
高方差和高偏差的问题可以看看上一个关于”学习曲线“的介绍。
神经网络和过拟合问题
下面介绍一些神经网络优化方面的有益经验。
神经网络的优化主要是对其结构的优化,输入、输出的选择,中间层神经元个数的确定、隐藏层的设计等。
当你使用神经网络解决一些问题的时候,有两种选择,用比较简单的网络或用比较复杂的网络:
但是小网络容易出现欠拟合,而大网络容易出现过拟合且运算量会非常大。那咋办呢?
如果你经常使用神经网络的话,你会发现往往神经元个数越多的网络可能效果越好,如果出现过拟合的话可以使用正则化项进行修正。
另外一个要处理的是选择隐藏层的个数,用3个还是2个?这是一个问题。这个时候就可以把你的训练数据拆分成训练集、交叉验证集、测试集三个子集,然后变换隐藏层的个数,再看不同隐藏层个数的网络在验证集上的表现来进行隐藏层的设定。 老师,怎么不更新了 这几天眼睛不舒服,后面还会更新的
页:
[1]