转载参考
1. 判断方法
过拟合(over-fitting),机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。
2. 常见原因
1)建模样本选取有误,如样本数量太少,选样方法错误,样本标签错误等,导致选取的样本数据不足以代表预定的分类规则;
2)样本噪音干扰过大,使得机器将部分噪音认为是特征从而扰乱了预设的分类规则;
3)假设的模型无法合理存在,或者说是假设成立的条件实际并不成立;
4)参数太多,模型复杂度过高;
5)对于决策树模型,如果我们对于其生长没有合理的限制,其自由生长有可能使节点只包含单纯的事件数据(event)或非事件数据(no event),使其虽然可以完美匹配(拟合)训练数据,但是无法适应其他数据集。
3. 解决办法
1、过拟合
1)增加训练数据数
注意:
- 保证训练数据的分布和测试数据的分布要保持一致,二者要是分布完全不同,那模型预测真可谓是对牛弹琴了
- 增加数据量有时可能不是那么容易,需要花费一定的时间和精力去搜集处理数据
- 利用现有数据进行扩充或许也是一个好办法。例如在图像识别中,如果没有足够的图片训练,可以把已有的图片进行旋转,拉伸,镜像,对称等,这样就可以把数据量扩大好几倍而不需要额外补充数据
2 )使用正则化约束
常用的正则化有l1正则和l2正则,具体使用哪个视具体情况而定,一般l2正则应用比较多
3) 减少特征数
欠拟合需要增加特征数,那么过拟合自然就要减少特征数。去除那些非共性特征,可以提高模型的泛化能力
4)调整参数和超参数
- 超参数:在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
- 树的数量或树的深度
- 矩阵分解中潜在因素的数量
- 学习率(多种模式)
- 深层神经网络隐藏层数
- k均值聚类中的簇数
5)降低模型的复杂度
6)使用Dropout
这一方法只适用于神经网络中,即按一定的比例去除隐藏层的神经单元,使神经网络的结构简单化
2、欠拟合
简单来说,欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况;
1)模型复杂化
对同一个算法复杂化。例如回归模型添加更多的高次项,增加决策树的深度,增加神经网络的隐藏层数和隐藏单元数等
弃用原来的算法,使用一个更加复杂的算法或模型。例如用神经网络来替代线性回归,用随机森林来代替决策树等
2)增加更多的特征,使输入数据具有更强的表达能力
3)调整参数和超参数
神经网络中:学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1β1和β2β2参数、batch_size数值等
其他算法中:随机森林的树数量,k-means中的cluster数,正则化参数λλ等
4)降低正则化约束