admin 管理员组

文章数量: 887019

1、当预测结果误差很大时怎么办?

①过拟合解决办法
  • 可以去增加更多的训练数据
  • 可以尝试简化模型
  • 数据增强人为扩展数据量以增加数据量来解决过拟合
  • 正则化:通过减少每个节点的权重来解决过拟合
  • 正则参数λ:如果有正则项则可以考虑增大正则项参数λ
  • Dropout(随机失活):专门用在神经网络的正规化的方法,叫作Dropout。在训练时,每次随机(如50%概率)忽略隐层的某些节点。流程是每个网络只会见过一个训练数据(每次都是随机的新网络),而不同模型之间权值共享。随机地删除网络中的一般隐藏的神经元,这样可以迫使节点分散权重(使权重降低,然后解决过拟合),然后使模型泛化性更强。
  • early stopping(早停):在训练中计算模型在验证集上的error,当模型在验证集上的表现开始下降的时候,停止训练,这样就能避免继续训练导致过拟合的问题
  • batch normalization
②欠拟合解决办法
  • 可以去尝试使用更复杂的模型
  • 可以增加新特征
  • 正则参数λ:如果有正则项则可以考虑减小正则项参数λ

2、如何评估算法?(以logistics regression为例)

  1. 先将数据集随机的按3/7分,划分为训练集测试集
  2. 通过训练集训练的出使cost function最小的θ
  3. 将得到的θ带入新的cost function,得到 J t e s t ( θ ) = − 1 m t e s t ∑ i = 1 m t e s t y t e s t ( i ) l o g h θ ( x t e s t ( i ) ) + ( 1 − y t e s t ( i ) ) l o g h θ ( x t e s t ( i ) ) 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)}) Jtest(θ)=mtest1i=1mtestytest(i)loghθ(xtest(i))+(1ytest(i))loghθ(xtest(i))
  4. 然后计算分类误差率misclassification error,
    e r r ( h θ ( x ) , y ) = { 1 h(x)>=0.5,y=0 or h(x)<=0.5,y=1 0 otherwise err(h_{\theta}(x),y)= \begin{cases} 1& \text{h(x)>=0.5,y=0 or h(x)<=0.5,y=1}\\ 0& \text{otherwise} \end{cases} err(hθ(x),y)={10h(x)>=0.5,y=0 or h(x)<=0.5,y=1otherwise

T e s t E r r o r = 1 m t e s t ∑ i = 1 m t e s t e r r ( h θ ( x ) , y ) TestError=\frac{1}{m_{test}}\sum_{i=1}^{m_{test}}err(h_{\theta}(x),y) TestError=mtest1i=1mtesterr(hθ(x),y)

3、有时会把数据集划分为训练集,交叉验证集和测试集

  • 训练集用来fit出当前最优的θ(此时有多个 h θ ( x ) h_{\theta}(x) hθ(x)
  • 交叉验证集用来得到最优的 h θ ( x ) h_{\theta}(x) hθ(x)
  • 测试集用来测试当前模型 h θ ( x ) h_{\theta}(x) hθ(x)拟合情况
  • 最重要的是要保证验证集测试集是来自同一分布

4、判断当前算法是欠拟合(高偏差)或过拟合(高方差)

  • 训练集 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ),而 J c v ( θ ) ≈ J t r a i n ( θ ) J_{cv}(\theta){\approx}J_{train}(\theta) Jcv(θ)Jtrain(θ)的话,则是欠拟合
  • 训练集 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ),而 J c v ( θ ) > > J t r a i n ( θ ) J_{cv}(\theta){>>}J_{train}(\theta) Jcv(θ)>>Jtrain(θ)的话,则是过拟合
  • 训练集 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ),而 J c v ( θ ) > > J t r a i n ( θ ) J_{cv}(\theta){>>}J_{train}(\theta) Jcv(θ)>>Jtrain(θ)的话,则是过拟合和欠拟合
  • 训练集 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ),而 J c v ( θ ) ≈ J t r a i n ( θ ) J_{cv}(\theta){\approx}J_{train}(\theta) Jcv(θ)Jtrain(θ)的话,则是低偏差和低方差
  • 判断训练集 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)验证集 J c v ( θ ) J_{cv}(\theta) Jcv(θ)高低的前提是基于base error上的,若base error等于10%的话,那 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)=8%也算低 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)
  • 注意 J t e s t ( θ ) J_{test}(\theta) Jtest(θ) J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)不一定相同(在正则化时就不同)

5、学习曲线

一般使用 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ)来绘制学习曲线

  • 若当前模型处于欠拟合,那么增加数据量不会改变它的状态
  • 而对过拟合来说,增加数据量则是有效

6、如何选择神经网络的结构

  • 可以选择 “小”的神经网络:一层hidden layer,少量的hidden units或者一个hidden unit,它的特点是计算量小,易发生欠拟合
  • 当然也可以用 “大”的神经网络:一层包含多个hidden units的hidden layer,或多层的hidden layers,每层节点数相同,它的特点是计算量大,易发生过拟合,不过过拟合可以通过正则化来解决,当然了hidden layer的层数可以通过把数据划分为训练集、交叉验证集和测试集来解决这个问题

7、如何系统的进行模型的训练

  • 先使用一个可以让你快速运行的简单的模型,而不是一个非常复杂的模型。然后交叉验证数据
  • 绘出学习曲线,来判断是欠拟合或过拟合并分别对症下药
  • 误差分析:它是一种手动的去检查算法所出现的失误的过程。即手动的检查模型预测失败的数据,观察这些数据有什么模式,通过这样它会告诉你如何去改进我们的算法。一般在交叉验证集上进行误差分析
  • 不确定那些方式是否有用时,可以算出不同方式的误差度量值,然后通过该值判断哪种方式更好(控制变量法)
    1. 查准率-Precision:是指在所有预测为1的样本中预测正确的比率
    2. 查全率-Recall:是指在所有真正为1的样本中预测正确的比率
    3. 若一个算法的调和平均数高则该算法性能就比较好 F 1 s c o r e = 2 P R P + R F_1 score=\frac{2PR}{P+R} F1score=P+R2PR

本文只用于个人学习与记录

本文标签: 误差 等多种 很大 机器 解决方案