Coursera机器学习(Andrew Ng)笔记:ML算法指导与系统设计
ML算法指导与系统设计
机器学习初学者,原本是写来自己看的,写的比较随意。难免有错误,还请大家批评指正!对其中不清楚的地方可以留言,我会及时更正修改
当机器学习的效果不理想时,可以尝试以下操作:
1 获取更多的训练数据样本
2 减少特征数量
3 增加一些额外的特征
4 多项式特征
5 增加或减小参数
实际使用时,不能只随机使用一种方法,下面我们来探索一些方法来进行诊断,帮助进行选择上述方法。
评估假设函数
一个假设函数可能在训练集上误差很低,但在新的数据集上可能仍旧不准确(过拟合),我们可以把训练样本分成训练集和测试集(一般按7:3的比例)。使用这两个数据集的过程如下:
1 使用训练集进行最小化
2 计算测试集误差
-测试集误差-
1 对于线性回归:
2 对于分类问题(又称作0/1误分类误差):
对于测试集的平均测试误差可以表示为:
模型选择和训练/验证/测试集
为了选择一个更合适的模型,我们可以选择多个不同阶数的假设函数(例如
这里,我们还使用一个交叉验证集,即将训练样本分成3部分,分别为训练集、交叉验证集、测试集,一般按照6:2:2的比例进行分配,现在我们可以计算三个不同的误差值
1 使用不同阶数的假设函数在训练集上进行训练得到
2 使用
3 估算泛化误差
偏差Bias 和方差 Variance
学习算法的效果不理想,要么是偏差大,要么是方差大,对应的分别是欠拟合和过拟合。搞清楚偏差和方差的关系,可以帮助我们更好的找到算法的问题所在,有效改进算法。
训练集误差:
交叉验证误差:
对于训练集来说,随着假设函数次数的增大,算法由欠拟合过渡到过拟合,误差减小。
对于测试集或交叉验证集来说,当假设函数次数很小或很大时,欠拟合或过拟合均造成交叉验证误差很大,而当次数是当时,交叉验证误差达到最小。
对应的,左边的这一端就是高偏差问题,右边的这一端就是高方差问题。
正则化与偏差/方差
在过拟合的情况下,我们来看一下
当
学习曲线
首先来看再给定假设函数次数的情况下,训练集大小与误差之间的关系
当训练集样本很小时,假设函数可以很容易的拟合的很好,训练误差也很小;当样本数量增大时,想让假设函数拟合的更好,就变得更加困难了,因此,训练误差会越来越大。
显然,当训练集样本数量很少时,泛化程度很差,交叉验证误差就很大。只有当训练集样本数量很大时,才能够更好的拟合数据,交叉验证误差较小。
考察高偏差的情况,当样本数量很大时,训练集误差和交叉验证误差都很高,此时增大训练样本来改善算法性能显然是没有意义的。
再来考察高方差的情况,当训练样本数量增大时,拟合变的越来越困难,训练误差增大,但总体来说还是很小。对于交叉验证误差,由于假设函数处于过拟合的状态,交叉验证误差会一直很大,当训练样本数量增大时,交叉验证误差呈递减趋势。高方差的一个主要特点是,当训练样本数量m很大时,训练误差和交叉验证误差有很大的差距。
总体上,随着m的增大,两个误差是逐渐靠近的,因此,对于高方差的情况,增加样本数量可能会有帮助。
如何选择有效的方法
1 获取更多的训练数据样本:高方差
2 减少特征数量:高方差
3 增加一些额外的特征:高偏差
4 增加多项式特征或次数:高偏差
5 减小参数
6 增大参数
机器学习系统设计
推荐方法步骤
1 首先构建一个很简单的机器学习算法,保证能够快速实现它,即使结果不完美,也要运行一遍,并使用交叉验证集来检验数据
2 画出学习曲线,看算法是否存在高偏差或高方差,或者其他问题。分析之后,再来决定是否使用更多样本,更多特征或一些其他方法
3 误差分析:对验证集中造成较大误差的样本进行分析,寻找这些样本可能存在的规律,这个过称可能启发出一些新的思路和想法。在交叉验证集上进行误差分析
数值评估的重要性
如交叉验证错误率等误差度量值。设定某个实数来评估学习算法,并衡量她的表现
偏斜类问题Skewed Classes
使用合适的误差度量值,就是偏斜类问题。
-查准率precision和召回率recall-
希望检测的出现较少的类用来计算查准率和召回率
查准率与召回率之间的权衡
在很多应用中,我们希望能够保证查准率和召回率的相对平衡。
比如在逻辑回归的例子中,当
-F 值-
F值可以用来作为对查准率和召回率平衡的一个度量,一般也叫做F1值,其计算公式如下
F值越大,说明查准率和召回率的平衡性越好
机器学习中的数据
一个较大的训练集可以帮助提高学习算法的性能,但在特征信息不足等情况下,再多的训练集也没用。