机器学习诊断法
如何判断一个学习算法的好坏,当该算法的预测值有很大的偏差,我们可以采取图内的几个方法。
首先我们要把样本分成两部分,一部分为训练集,一部分为测试集,数目大概7:3左右。
然后利用训练集确定参数
θ
\theta
θ,用测试集计算测试误差即:测试集的代价函数。
该图为测试和训练线性回归的步骤。
同样,下图为训练和测试逻辑回归的步骤,它的步骤同线性回归相似。
模型选择问题
假设我们要选择一个最小误差的模型,它的参数多项式个数是变化,我们可以先求出所有模型的
θ
\theta
θ和代价函数,再确定选哪个模型。但是这种方法选出的模型泛化力差,因为我们用测试集确定了最好的拟合参数
θ
\theta
θ, 该参数对测试集的表现会好过新的它没见过的样本。
为了解决上述问题,我们采用下面的方法。首先,打样本分成三份:训练集、交叉验证集(CV)、测试集。
然后计算出每个模型的最佳
θ
\theta
θ,并用交叉验证集计算误差Jcv(
θ
\theta
θ),然后确定多项式的个数d,最后用测试集计算泛化误差Jtest(
θ
\theta
θ)。
正则化、偏差与方差
如图所示:随着多项式个数d的增大,训练误差减小,而交叉验证误差先减后增。如何区分偏差和方差呢?
当Jtrain(
θ
\theta
θ)很大时,且Jcv(
θ
\theta
θ)≈Jtrain(
θ
\theta
θ)时,可以视为高偏差。
当Jtrain(
θ
\theta
θ)很小时,且Jcv(
θ
\theta
θ)>>Jtrain(
θ
\theta
θ)时,可以视为高方差。
在之前讨论过的正则化线性回归问题上,如果我们选择的
λ
\lambda
λ的过大,会出现高偏差;过小的话会出现高方差。只有适当的
λ
\lambda
λ,才能得到最佳拟合结果。正则化的应用如下:
上面的步骤和之前的模型选择问题一样,只不过J(
θ
\theta
θ)多了正则化项。
上图为正则化参数
λ
\lambda
λ对于偏差和方差的影响。
学习曲线
随着样本m的个数不断增多,训练集的代价函数不断增大。但是对于交叉训练集来说,当m的个数比较少,泛化程度不好,不适应新样本,所有代价函数比较大。
高偏差的学习曲线:
该高偏差学习曲线的特点是,随着m增大,样本误差不在变化,也就是再增加训练集对高偏差是无影响的。可以增加参数来解决问题。
高方差曲线:
如果处在高方差,增加m的个数还是有用的。
那么当我们遇到高方差和高偏差的问题时候,该如何选择解决方法:
选择比较小的神经网络,可能计算量会小一点,但是容易欠拟合。
选择结构比较复杂的神经网络,计算量大,会出现过拟合,但是我们可以用正则化来解决过拟合问题,通常我们也是选择结构比较复杂的模型。
系统设计
误差分析
假设有一个分类邮件的例子,当我们通过算法来区分不同的邮件,会出现一些错误的判断,我们可以通过分析这些错误的样本来优化算法。
不对称性分类的误差
就如之前的癌症分类问题,假设我们的算法预测癌症的出错率为1%,而我们直接不利用算法直接判断为0的出错率为0.5%,这样看来好像我们的算法并不合适。其实我们不能直接下定结论,像这种一种样本比另一种样本多得多的情况我们称为斜偏类。像这样的问题我们要从其他角度分析。
对于模型来说,查准率和召回率越高越好,当我们使用全部直接判断为0的方法时,它的召回率也是0,因此我们可以判断它不是一个好模型。
对于不同的算法我们如何比较查准率和召回率,可以用下面的式子来比较F1。
机器学习数据
有时候好的数据比算法更为重要。原因如下图:
大量的参数可以使训练集的误差很小,是一种低偏差问题,同时,大量的训练集,使得算法是低方差的。两者结合就是性能很好的算法。