目录
机器学习
过拟合与欠拟合
正则化与交叉验证
正则化
交叉验证
机器学习
的目的是使学到的模型不仅对已知数据而且对未知数据都能有很好的预测能力。
不同的机器学习方法会给出不同的模型。当损失函数给定时,基于损失函数的模型的训练误差(training error)和模型的测试误差(test error)就自然成为学习方法评估的标准。
注意,机器学习方法具体采用的损失函数未必是评估时使用的损失函数。当然,让两者一致是比较理想的。
训练误差的大小,对判断给定的问题是不是一个容易学习的问题是有意义的,但是本质上不重要。测试误差反应了学习方法对未知的测试数据集的预测能力。
显然,给定两种学习方法,测试误差小的方法具有更好的预测能力,是更有效的方法。通常讲学习方法对未知数据的预测能力称为泛化能力(generalization ability)。
过拟合与欠拟合
对于机器学习和深度学习模型而言,我们不仅希望它能很好的拟合训练数据集,同时也希望它可以对未知数据集(测试集)有很好的拟合效果(泛化能力)。机器学习的泛化能力(generalization ability)是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质。现实中采用最多的办法是用过测试误差来评价学习方法的泛化能力。
度量泛化能力的好坏,就涉及到所谓的模型的欠拟合(underfitting)和过拟合(overfitting)。
- 过拟合指的是在训练数据集上表现良好,而在未知数据上表现差。
- 欠拟合指的是模型没有很好地学习到数据特征,不能够很好地拟合数据,在训练数据和未知数据上表现都很差。
欠拟合、正常拟合和过拟合
下图描述了训练误差和测试误差与模型的复杂度之间的关系。当模型的复杂度增大时,训练误差会逐渐减小并趋近于0;而测试误差会先减小,达到最小值后有增大。当选择的模型复杂度过大时,过拟合现象就会发生。
因此,在学习时就要防止过拟合,进行最优的模型选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。
训练误差和测试误差与模型的复杂度之间的关系
过拟合的原因在于:
-
参数太多,模型复杂度过高;
-
建模样本选取有误,导致选取的样本数据不足以代表预定的分类规则;
-
样本噪音干扰过大,使得机器将部分噪音认为是特征从而扰乱了预设的分类规则;
-
假设的模型无法合理存在,或者说是假设成立的条件实际并不成立。
欠拟合的原因在于:
-
特征量过少;
-
模型复杂度过低。
怎么解决过拟合?
-
获取和使用更多的数据(数据集增强)——解决过拟合的根本性方法;
-
特征降维,人工选择保留特征的方法对特征进行降维;
-
加入正则化,控制模型的复杂度;
-
Dropout;(
dropout(随机失活):dropout是通过遍历神经网络每一层的节点,然后通过对该层的神经网络设置一个keep_prob(节点保留概率),即该层的节点有keep_prob的概率被保留,keep_prob的取值范围在0到1之间。通过设置神经网络该层节点的保留概率,使得神经网络不会去偏向于某一个节点(因为该节点有可能被删除),从而使得每一个节点的权重不会过大,有点类似于L2正则化,来减轻神经网络的过拟合。) -
Early stopping;
-
交叉验证。
怎么解决欠拟合?
-
增加新特征,可以考虑加入进特征组合、高次特征,来增大假设空间;
-
添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强;
-
减少正则化参数,正则化的目的是用来防止过拟合的,但是模型出现了欠拟合,则需要减少正则化参数;
-
使用非线性模型,比如核SVM 、决策树、深度学习等模型;
-
调整模型的容量(capacity),通俗地,模型的容量是指其拟合各种函数的能力;
-
容量低的模型可能很难拟合训练集。
正则化与交叉验证
正则化
模型选择的典型方法是正则化(regularization)。正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或惩罚项(penalty term)。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。比如,正则化项可以是模型参数向量的范数。
正则化一般具有如下形式:
其中,第1项是经验风险,第2项是正则化项, 为调整两者之间关系的系数。
第1项的经验风险较小的模型可能较复杂(有多个非零参数),这时第2项的模型复杂度会较大。正则化的作用是选择经验风险与模型复杂度同时较小的模型。
从贝叶斯估计的角度来看,正则化项对应于 模型的先验概率。
- 可以假设复杂的模型有较小的先验概率
- 简单的模型有较大的先验概率
交叉验证
另一种常用的模型选择方法是交叉验证(cross validation)。
如果给定的样本数据充足,进行模型选择的一种简单方式是随机地将数据集切分成三部分,分别为训练集(training set)、验证集(validation set)和测试集(test set)。训练集用来训练模型,验证集用于模型的选择,测试集用于最终对学习方法的评估。在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型。由于验证集有足够多的数据,用它对模型进行选择也是有效的。
但是,在许多实际应用中数据是不充足的。为了选择好模型,可以采用交叉验证方法。交叉验证的基本想法是重复地使用数据;把给定的数据进行切分,讲切分的数据集组合为训练集与测试集,在此基数上反复地进行训练、测试以及模型选择。
-
简单交叉验证
简单交叉验证方法是:首先随机地将已给数据分为两部分,一部分作为训练集,另一部分作为测试集(例如,70%的数据为训练集,30%的数据为测试集);然后用训练集在各种条件下(例如,不同参数个数)训练模型,从而得到不同的模型;在测试集上评价各个模型的测试误差,选出测试误差最小的模型。
-
S折交叉验证
应用最多的是S折交叉验证(S-fold cross validation),方法如下:首先随机地将已给数据切分为S个互不相交、大小相同的子集;然后利用S-1个子集的数据训练模型,利用余下的子集测试模型;将这一过程可能的S种选择重复进行;最后选出S次测评中平均测试误差最小的模型。
-
留一交叉验证
S折交叉验证的特殊情形是S=N,成为留一交叉验证(leave-one-out cross validation,LOOCV),往往在数据缺乏的情况下使用。这里N是给定数据集的容量。