百度关键词规划师工具,seo外贸仿牌网站换域名,玉环网站制作,深圳属于哪个省继续是机器学习课程的笔记#xff0c;本节课的内容主要是一些机器学习应用的建议#xff0c;包括对假设的评估#xff0c;如何处理过拟合和欠拟合等。
觉得下一步做什么
到目前为止#xff0c;我们已经学习了线性回归#xff0c;逻辑回归以及神经网络#xff0c;梯度下…继续是机器学习课程的笔记本节课的内容主要是一些机器学习应用的建议包括对假设的评估如何处理过拟合和欠拟合等。
觉得下一步做什么
到目前为止我们已经学习了线性回归逻辑回归以及神经网络梯度下降等算法我们已经可以对给定一个训练集使用上述一种算法来训练得到模型然后进行预测但是接着问题就来了如果得到的预测结果误差很大那么应该如何减少误差提高准确率呢
这里还是使用房价问题作为例子当使用一个线性回归模型来预测房价但是发现训练好的模型来预测未知数据的时候发现有较大误差那么接下来可以采取的办法有以下几种
获得更多的实例——通常是有效的但是代价比较大有时候有些数据是不容易采集的所以可以先考虑后面几种方法减少特征的数量增加更多的特征增加二项式特征如x21,x22,x1x2x_1^2,x_2^2,x_1x_2等减小归一化因子λ\lambda增大归一化因子λ\lambda
虽然有这么多方法但是我们不应该随机选择上面的某种方法来改进我们的算法而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。
误差分析
这里主要介绍如何检验算法是否过拟合了。
首先是将数据分成训练集和测试集通常用70%的数据作为训练集剩余的30%的数据做为测试集。注意训练集和测试集均要包括有各种类型的数据而且通常要对数据进行打乱顺序然后随机生成训练集和测试集。
在通过训练集学习到模型的参数后就需要使用测试集来使用该模型进行预测并计算误差。这里分为线性回归和逻辑回归两种情况
对于线性回归模型利用测试集数据计算代价函数Jtest(θ)12mtest∑mtesti1(hθ(x(i)test)−y(i)test)2J_{test}(\theta)=\frac{1}{2m_{test}}\sum_{i=1}^{m_{test}}(h_\theta(x_{test}^{(i)})-y_{test}^{(i)})^2对于逻辑回归模型同样可以用测试集数据集来计算代价函数 Jtest(θ)−1mtest∑i1mtesty(i)testloghθ(x(i)test)(1−y(i)test)loghθ(x(i)test)
J_{test}(\theta)=-\frac{1}{m_{test}}\sum_{i=1}^{m_{test}}y_{test}^{(i)}logh_\theta(x_{test}^{(i)})+(1-y_{test}^{(i)})logh_\theta(x_{test}^{(i)})还可以计算误分类的比率,对于每一个测试集实例计算 err(hθ(x),y){1 if h(x)≥0.5 and y0,or if h(x)0.5,and y10 Otherwise
err(h_\theta(x),y)=\begin{cases} 1\ if\ h(x)\ge 0.5\ and\ y=0, or\ if\ h(x) \lt 0.5,and\ y=1 \\ 0\ Otherwise \end{cases}然后对结果计算平均error1mtest∑mtesti1err(hθ(x(i)test),y(i))error = \frac{1}{m_{test}}\sum_{i=1}^{m_{test}}err(h_\theta(x_{test}^{(i)}),y^{(i)})
这里误分类的计算是由于在之前的[逻辑回归][1]中我们是如此定义分类的
当hθ≥0.5h_\theta \ge 0.5,预测y1y=1当hθ0.5h_\theta \lt 0.5,预测y0y=0
模型选择(交叉验证集)
假设对一个特定的数据集要确定最合适的多项式次数或者是怎么选用正确的特征或者是选择正则化参数λ\lambda来构建学习算法这些问题都称之为模型选择。
这里举例说明如何进行模型选择。假设我们要在10个不同次数的二项次模型之间进行选择
1.hθ(x)θ0θ1x2.hθ(x)θ0θ1xθ2x23.hθ(x)θ0θ1x⋯θ3x3⋮10.hθ(x)θ0θ1x⋯θ10x10\begin{align}但是这种情况就可能是过拟合也就是不能推广至一般情况因此我们需要选择的是一个更能适应一般情况即泛化能力更好的模型这里就需要使用交叉验证集来帮助选择模型。
所以一般将数据集按下列方式分成训练集交叉验证集以及测试集
使用60%的数据作为训练集使用20%的数据作为交叉验证集使用20%的数据作为测试集
上述方法是一个比较经典的分法可以按照实际需要调整比例。
所以模型选择的方法为
使用训练集训练出10个模型用10个模型分别对交叉验证集计算得出交叉验证误差即代价函数的值选择代价函数值最小的模型使用上一步中选择的模型对测试集计算得到推广误差即代价函数的值
偏倚和偏差诊断(Diagnosis Bias Vs Variance)
高偏倚和高偏差的问题基本上就是低拟合和过拟合的问题。
假设还是房价问题有以下三种模型分别对应下面三幅图其分别就是低拟合刚刚好以及过拟合三种情况
通常我们会将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析如下所示
由上图可以得知
对于训练集当多项式次数d较小时误差比较大模型拟合程度很低随着d的增大误差减小拟合程度提高对于交叉验证集当d较小时误差比较大模型拟合程度低当d开始增大时误差会呈现先减小后增大的趋势转折点就是模型开始过拟合训练集的时候。
此外通过上图也可以进行判断是偏倚还是偏差
训练集误差和交叉验证集误差比较接近时偏倚/低拟合交叉验证集误差远大于训练集误差时偏差/过拟合
归一化与偏倚/偏差
在训练模型的时候我们一般会使用到归一化方法来防止过拟合的发生。假设有一个线性回归模型hθ(x)θ0θ1x1θ2x22θ3x33θ4x44h_\theta(x) = \theta_0 + \theta_1x_1+\theta_2x_2^2+\theta_3x_3^3+\theta_4x_4^4然后使用归一化则其代价函数为J(θ)12m[∑mi1((hθ(x(i))−y(i))2λ∑nj1θ2j)]J(\theta) = \frac{1}{2m} [\sum_{i=1}^m((h_\theta(x^{(i)})-y^{(i)})^2+\lambda \sum_{j=1}^n \theta_j^2)]但是这里归一化会由于λ\lambda的取值大小而导致低拟合或者过拟合的情况如下图所示
所以当λ\lambda过大就会导致上图中第一幅图的情形也就是低拟合的状况此时就是对多次的参数惩罚过大而如果λ\lambda过小则是导致如第三幅图的情况会过拟合。
只有中间一幅图选择的λ\lambda是刚刚好所以这里面临的问题就是选择合适的归一化因子λ\lambda。首先是选择一系列的想要测试的λ\lambda值通常是0-10之间的呈现2倍关系的值(如0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10总共12个)。
然后同样把数据分为训练集、交叉验证集和测试集。然后按照下列方法
使用训练集训练出12个不同程度归一化的模型用12个模型分别对交叉验证集计算出交叉验证误差选择得出交叉验证误差最小的模型使用上述得到的模型对测试集计算得到推广误差
同样可以将训练集和交叉验证集的误差和λ\lambda的值绘制在同一张图表上
由上图可以得到
当λ\lambda较小时训练集误差较小而交叉验证集误差较大此时是过拟合随着λ\lambda的增大训练集误差不断增加这是因为处于低拟合的情况而交叉验证集误差则是先减小后增加。
所以此时刚刚合适的λ\lambda值就是图中红色抛物线的最低点也就是交叉验证误差减小到最低点然后开始增加的转折点了。
学习曲线
学习曲线是学习算法的一个很好的合理检验。它是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。
假设现在有100行数据我们从第1行数据开始逐渐学习更多行的数据。如下图所示的学习曲线分别是训练集和交叉验证集的误差随着使用的数据量增加而变化的曲线。
对于训练集当刚开始训练的时候数据量很小所以得到的模型可以很好的拟合训练数据但随着数据增大得到的模型就很难非常完美地拟合训练集数据所以误差是逐渐增大。 对于交叉验证集一开始是用在训练集中训练好的模型交叉验证集对于它就是一个陌生的数据集所以初始误差会比较大随着交叉验证集中数据量增大这个初始的模型也会随之逐渐调整参数所以误差就会逐渐减小。
那么如何利用学习曲线来识别高偏倚和或者是高偏差呢
对于高偏倚/低拟合首先假设这里使用一条曲线即一个模型hθ(x)θ0θ1xh_\theta(x) = \theta_0+\theta_1x来训练数据由下图所示。
这里可以看到当训练集增加到多大误差都没有多大改变。即在低拟合/高偏倚的情况下增加训练集数据并不会有多大帮助。
对于高偏差/过拟合这里使用一个非常高次的多项式模型hθ(x)θ0θ1x⋯θ100x100h_\theta(x)=\theta_0+\theta_1x+\cdots+\theta_{100}x^{100},且归一化因子λ\lambda非常小。
由上图得知在交叉验证集误差远大于训练集误差的时候增加训练集数据是可以提高模型的效果的。
所以在高偏差/过拟合的情况下增加训练集数据是可以提高算法效果的
小结
回顾下一开始选择的六种方法这里给出在不同情况下应该怎么选择
解决高偏差/过拟合 增加训练集数据较少特征的数量增大归一化因子λ\lambda解决高偏倚/低拟合 增加特征的数量减小归一化因子λ\lambda增加二项式特征
而对于神经网络的偏倚和偏差分别如下所示
使用较小的神经网络类似于参数较少的情况容易导致高偏倚和低拟合但计算代价较小使用较大的神经网络类似于参数较多的情况容易导致高偏差和过拟合虽然计算代价大但是可以通过归一化手段来调整而更加适应数据。
所以通常选择较大的神经网络并采用归一化处理会比较小的神经网络效果要更好。
对于神经网络中的隐藏层的层数的选择通常从一层开始逐渐增加层数。 为了更好作选择可以把数据分为训练集、交叉验证集和测试集针对不同隐藏层层数的神经网络选择神经网络然后选择交叉验证集代价最小的神经网络。
所以这节课主要就是介绍了如何找出所使用学习算法的问题可以通过误差分析模型选择学习曲线来判断是低拟合还是过拟合从而选择不同的方法最终是继续提高算法的效果。