文章目录
9. 第九章 神经网络:学习(Neural Network:learning)
9.1 代价函数
神经网络主要用于分类任务。
训练集: { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } \{ ({x^{(1)}},{y^{(1)}}),({x^{(2)}},{y^{(2)}}),...,({x^{(m)}},{y^{(m)}})\} {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
L L L表示神经网络总层数, S l {S_l} Sl表示第 l l l层的神经元数量(不包含偏置)。
-
二分类(Binary classification)
标签 y ∈ { 0 , 1 } y \in \{ 0,1\} y∈{0,1},输出层一个神经元, h θ ( x ) ∈ R {h_\theta }(x) \in R hθ(x)∈R
-
多分类(Multi-class classification)
K K K类, y ∈ R K y \in {R^K} y∈RK,输出层 K K K个神经元, h θ ( x ) ∈ R K {h_\theta }(x) \in {R^K} hθ(x)∈RK
神经网络代价函数: J ( Θ ) = − 1 m [ Σ i = 1 m Σ k = 1 K y k ( i ) log ( h θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) log ( 1 − ( h θ ( x ( i ) ) ) k ) ] + λ 2 m Σ l = 1 L − 1 Σ i = 1 s l Σ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\Theta ) = - {1 \over m}[\mathop \Sigma \limits_{i = 1}^m \mathop \Sigma \limits_{k = 1}^K y_k^{(i)}\log {({h_\theta }({x^{(i)}}))_k} + (1 - y_k^{(i)})\log (1 - {({h_\theta }({x^{(i)}}))_k})] + {\lambda \over {2m}}\mathop \Sigma \limits_{l = 1}^{L - 1} \mathop \Sigma \limits_{i = 1}^{{s_l}} \mathop \Sigma \limits_{j = 1}^{{s_{l + 1}}} {(\Theta _{ji}^{(l)})^2} J(Θ)=−m1[i=1Σmk=1ΣKyk(i)log(hθ(x(i)))k+(1−yk(i))log(1−(hθ(x(i)))k)]+2mλl=1ΣL−1i=1Σslj=1Σsl+1(Θji(l))2
9.2 反向传播算法(Backpropagation algorithm,BP)
目标: min θ J ( Θ ) \mathop {\min }\limits_\theta J(\Theta ) θminJ(Θ)
需要计算: J ( Θ ) J(\Theta ) J(Θ)和 ∂ ∂ Θ i j ( l ) J ( Θ ) {\partial \over {\partial \Theta _{ij}^{(l)}}}J(\Theta ) ∂Θij(l)∂J(Θ),梯度计算——反向传播算法
δ j ( l ) \delta _j^{(l)} δj(l)表示第 l l l层第 j j j个节点的误差
对于每个输出单元( L = 4 L=4 L=4):
- δ ( 4 ) = a ( 4 ) − y ∈ R K {\delta ^{(4)}} = {a^{(4)}} - y \in {R^K} δ(4)=a(4)−y∈RK
- δ ( 3 ) = ( Θ ( 3 ) ) T δ ( 4 ) ∙ ∗ g ′ ( Z ( 3 ) ) , g ′ ( Z ( 3 ) ) = a ( 3 ) ∙ ∗ ( 1 − a ( 3 ) ) {\delta ^{(3)}} = {({\Theta ^{(3)}})^T}{\delta ^{(4)}} \bullet * g'({Z^{(3)}}),g'({Z^{(3)}}) = {a^{(3)}} \bullet * (1 - {a^{(3)}}) δ(3)=(Θ(3))Tδ(4)∙∗g′(Z(3)),g′(Z(3))=a(3)∙∗(1−a(3))按对应元素相乘
- δ ( 2 ) = ( Θ ( 2 ) ) T δ ( 3 ) ∙ ∗ g ′ ( Z ( 2 ) ) , g ′ ( Z ( 2 ) ) = a ( 2 ) ∙ ∗ ( 1 − a ( 2 ) ) {\delta ^{(2)}} = {({\Theta ^{(2)}})^T}{\delta ^{(3)}} \bullet * g'({Z^{(2)}}),g'({Z^{(2)}}) = {a^{(2)}} \bullet * (1 - {a^{(2)}}) δ(2)=(Θ(2))Tδ(3)∙∗g′(Z(2)),g′(Z(2))=a(2)∙∗(1−a(2))
- δ ( 1 ) {\delta ^{(1)}} δ(1)无,因为它对应输入层不会存在误差
综上: ∂ ∂ Θ i j ( l ) J ( Θ ) = a j ( l ) δ i ( l + 1 ) {\partial \over {\partial \Theta _{ij}^{(l)}}}J(\Theta ) = a_j^{(l)}\delta _i^{(l + 1)} ∂Θij(l)∂J(Θ)=aj(l)δi(l+1),不考虑正则化。
具体实现:
-
训练集: { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } \{ ({x^{(1)}},{y^{(1)}}),({x^{(2)}},{y^{(2)}}),...,({x^{(m)}},{y^{(m)}})\} {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
-
设置 Δ i j ( l ) = 0 \Delta _{ij}^{(l)} = 0 Δij(l)=0(for all l , i , j l,i,j l,i,j),作为中间变量,累加项
-
对于所有的 i = 1 t o m i=1 to m i=1tom进行如下操作:
- 设置 a ( 1 ) = x ( i ) {a^{(1)}} = {x^{(i)}} a(1)=x(i)
- 前向传播计算所有的 a ( l ) {a^{(l)}} a(l), l = 2 , 3 , . . . , L l=2,3,...,L l=2,3,...,L
- 利用 y ( i ) {y^{(i)}} y(i),计算 δ ( L ) = a ( L ) − y ( i ) {\delta ^{(L)}} = {a^{(L)}} - {y^{(i)}} δ(L)=a(L)−y(i),然后依次计算 δ ( L − 1 ) , δ ( L − 2 ) , . . . , δ ( 2 ) {\delta ^{(L - 1)}},{\delta ^{(L - 2)}},...,{\delta ^{(2)}} δ(L−1),δ(L−2),...,δ(2)
-
Δ
i
j
(
l
)
:
=
Δ
i
j
(
l
)
+
a
j
(
l
)
δ
i
(
l
+
1
)
\Delta _{ij}^{(l)}: = \Delta _{ij}^{(l)} + a_j^{(l)}\delta _i^{(l + 1)}
Δij(l):=Δij(l)+aj(l)δi(l+1)
-
∂ ∂ Θ i j ( l ) J ( Θ ) = D i j ( l ) {\partial \over {\partial \Theta _{ij}^{(l)}}}J(\Theta ) = D_{ij}^{(l)} ∂Θij(l)∂J(Θ)=Dij(l)
9.3 反向传播直觉
反向传播在做什么?
J ( Θ ) = − 1 m [ Σ i = 1 m Σ k = 1 K y k ( i ) log ( h θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) log ( 1 − ( h θ ( x ( i ) ) ) k ) ] + λ 2 m Σ l = 1 L − 1 Σ i = 1 s l Σ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\Theta ) = - {1 \over m}[\mathop \Sigma \limits_{i = 1}^m \mathop \Sigma \limits_{k = 1}^K y_k^{(i)}\log {({h_\theta }({x^{(i)}}))_k} + (1 - y_k^{(i)})\log (1 - {({h_\theta }({x^{(i)}}))_k})] + {\lambda \over {2m}}\mathop \Sigma \limits_{l = 1}^{L - 1} \mathop \Sigma \limits_{i = 1}^{{s_l}} \mathop \Sigma \limits_{j = 1}^{{s_{l + 1}}} {(\Theta _{ji}^{(l)})^2} J(Θ)=−m1[i=1Σmk=1ΣKyk(i)log(hθ(x(i)))k+(1−yk(i))log(1−(hθ(x(i)))k)]+2mλl=1ΣL−1i=1Σslj=1Σsl+1(Θji(l))2
对于单个样本 ( x ( i ) , y ( i ) ) ({x^{(i)}},{y^{(i)}}) (x(i),y(i))的损失函数: cos t ( i ) = − y ( i ) log ( h Θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h Θ ( x ( i ) ) ) \cos t(i){\rm{ = - }}{{\rm{y}}^{(i)}}\log ({h_\Theta }({x^{(i)}})) - (1 - {{\rm{y}}^{(i)}})\log (1 - {h_\Theta }({x^{(i)}})) cost(i)=−y(i)log(hΘ(x(i)))−(1−y(i))log(1−hΘ(x(i))).
δ j ( l ) \delta _j^{(l)} δj(l)等于 a j ( l ) a_j^{(l)} aj(l)的损失的误差, δ j ( l ) = ∂ ∂ Z j ( l ) cos t ( i ) \delta _j^{(l)} = {\partial \over {\partial Z_j^{(l)}}}\cos t(i) δj(l)=∂Zj(l)∂cost(i)。表征每个神经元的最终输出对结果的影响!
9.4 实现注意:展开参数
矩阵展开成长向量实现。
9.5 梯度检测(Gradient checking)
作用:确定前向传播与反向传播没有bug。
思想:用数值估计梯度(numerical estimation gradient)计算梯度,公式如下:一维情况, d d θ J ( θ ) ≈ J ( θ + ε ) − J ( θ − ε ) 2 ε {d \over {d\theta }}J(\theta ) \approx {{J(\theta + \varepsilon ) - J(\theta - \varepsilon )} \over {2\varepsilon }} dθdJ(θ)≈2εJ(θ+ε)−J(θ−ε);同理,多维情况, d d θ i J ( θ ) ≈ J ( θ 1 , θ 2 , . . . , θ i + ε , . . . , θ n ) − J ( θ 1 , θ 2 , . . . , θ i − ε , . . . , θ n ) 2 ε {d \over {d{\theta _i}}}J(\theta ) \approx {{J({\theta _1},{\theta _2},...,{\theta _i} + \varepsilon ,...,{\theta _n}) - J({\theta _1},{\theta _2},...,{\theta _i} - \varepsilon ,...,{\theta _n})} \over {2\varepsilon }} dθidJ(θ)≈2εJ(θ1,θ2,...,θi+ε,...,θn)−J(θ1,θ2,...,θi−ε,...,θn),其中 θ \theta θ为参数展开后的向量。
将采用上述公式计算的梯度与反向传播计算的梯度进行比较判断是否存在错误。
最后,在真正运行时将梯度检测去掉,因为它是低效的。
9.6 随机初始化(Random initialization)
对于梯度下降和优化算法, Θ \Theta Θ需要进行初始化。
随机初始化:在线性模型的训练(比如感知器和Logistic回归)中,我们一般将参数全部初始化为 0。但是这在神经网络的训练中会存在一些问题。因为如果参数都为 0,在第一遍前向计算时,所有的隐藏层神经元的激活值都相同;在反向传播时,所有权重的更新也都相同,这样会导致隐藏层神经元没有区分性。这种现象也称为对称权重现象。为了打破这个平衡,比较好的方式是对每个参数都随机初始化(Random Initialization),使得不同神经元之间的区分性更好。
− ε ≤ Θ i j ( l ) ≤ ε - \varepsilon \le \Theta _{ij}^{(l)} \le \varepsilon −ε≤Θij(l)≤ε,通常 ε \varepsilon ε为较小正数。
9.7 组合到一起
训练一个神经网络。
首先搭建一个网络结构(network architecture):确定输入层,输出层神经元个数;确定隐含层数及各层神经元个数。
- 随机初始化权重
- 实现前向传播,得到每个样本输入 x ( i ) {x^{(i)}} x(i)的输出 h Θ ( x ( i ) ) {h_\Theta }({x^{(i)}}) hΘ(x(i))
- 实现代价函数计算 J ( Θ ) J(\Theta ) J(Θ)
- 实现反向传播,计算梯度 ∂ ∂ Θ i j ( l ) J ( Θ ) {\partial \over {\partial \Theta _{ij}^{(l)}}}J(\Theta ) ∂Θij(l)∂J(Θ)
- 使用梯度检测判断反向传播代码正确性
- 使用梯度下降或者更先进的优化算法,通过反向传播更新参数 Θ \Theta Θ最小化 J ( Θ ) J(\Theta ) J(Θ)
虽然对于非凸函数,梯度下降或者更先进的优化算法都可能收敛于局部最小值,但是实际使用中通常可以得到一个比较好的最小值。
9.8 无人驾驶(Autonomous driving example)
可以使用多个神经网络的集成学习组成自动驾驶系统。
10. 应用机器学习(Advice for applying machine learning)
10.1 决定下一步做什么
debug学习算法。
问题描述:假设已经实现正则化线性回归算法预测房价。然后,当在新的数据上进行测试时,发现它的预测结果十分不准确,接下来应该做什么?
- 获取更多的数据
- 尝试更少的特征
- 尝试获取更多特征
- 尝试添加特征的多项式组合
- 尝试减小 λ \lambda λ
- 尝试增大 λ \lambda λ
为了选择出要使用哪种策略来提升机器学习算法的性能,需要使用机器学习诊断(Machine learning diagnostic)来进行决策。
诊断:一个你可以运行的测试,以了解学习算法正在/不在工作,并获得关于如何最好地改善其性能的指导。这个工作会花费大量的时间,但很值得。
10.2 评估假设(Evaluating a hypothesis)
在测试集上的误差。
-
线性回归
- 从训练集学习参数 θ \theta θ,通过最小化 J ( θ ) J(\theta ) J(θ)
- 计算测试集误差: J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 {J_{test}}(\theta ) = {1\over{2{m_{test}}}}\sum\limits_{i = 1}^{{m_{test}}} {{{({h_\theta }({x_{test}}^{(i)}) - {y_{test}}^{(i)})}^2}} Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
-
逻辑回归
-
从训练集学习参数 θ \theta θ,通过最小化 J ( θ ) J(\theta ) J(θ)
-
计算测试集误差: J t e s t ( θ ) − 1 m t e s t [ Σ i = 1 m t e s t y t e s t ( i ) log ( h θ ( x t e s t ( i ) ) ) + ( 1 − y t e s t ( i ) ) log ( 1 − h θ ( x t e s t ( i ) ) ) ] {J_{test}}(\theta ) - {1 \over {{m_{test}}}}[\mathop \Sigma \limits_{i = 1}^{{m_{test}}} {{\rm{y}}_{test}}^{(i)}\log ({h_\theta }({x_{test}}^{(i)})) + (1 - {{\rm{y}}_{test}}^{(i)})\log (1 - {h_\theta }({x_{test}}^{(i)}))] Jtest(θ)−mtest1[i=1Σmtestytest(i)log(hθ(xtest(i)))+(1−ytest(i))log(1−hθ(xtest(i)))]
-
错误分类度量(Misclassification error)
则 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 t e s t ( i ) ) − y t e s t ( i ) ) Test{\kern 1pt} error = {1 \over {{m_{test}}}}\sum\limits_{i = 1}^{{m_{test}}} {err({h_\theta }({x_{test}}^{(i)}) - {y_{test}}^{(i)})} Testerror=mtest1i=1∑mtesterr(hθ(xtest(i))−ytest(i))
-
10.3 模型选择和训练,验证,测试集(Model selection and training/validation/test sets)
模型选择:
-
h θ ( x ) = θ 0 + θ 1 x 1 , d = 1 {h_\theta }(x) = {\theta _0} + {\theta _1}{x_1},d = 1 hθ(x)=θ0+θ1x1,d=1
-
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 , d = 2 {h_\theta }(x) = {\theta _0} + {\theta _1}{x_1} + {\theta _2}{x_2},d = 2 hθ(x)=θ0+θ1x1+θ2x2,d=2
…
-
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ 10 x 10 , d = 10 {h_\theta }(x) = {\theta _0} + {\theta _1}{x_1} + {\theta _2}{x_2} + ... + {\theta _{10}}{x_{10}},d = 10 hθ(x)=θ0+θ1x1+θ2x2+...+θ10x10,d=10
通过每个假设得到一系列 θ \theta θ,然后在测试集上选择出使得 J t e s t ( θ ) {J_{test}}(\theta ) Jtest(θ)最小的模型,这似乎很合理,假设我们选择 d = 2 d = 2 d=2的模型 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 {h_\theta }(x) = {\theta _0} + {\theta _1}{x_1} + {\theta _2}{x_2} hθ(x)=θ0+θ1x1+θ2x2。
问题在于:选择出的模型可能是一个乐观的错误估计,相当于我们针对测试集又训练了一个额外的参数 d d d,这并不能很好的代表泛化误差。
为了解决上述问题,引入验证集(Cross validation,cv)。
训练集:验证集:测试集=6:2:2(打乱顺序)
训练集错误: J t r a i n ( θ ) = 1 2 m t r a i n ∑ i = 1 m t r a i n ( h θ ( x t r a i n ( i ) ) − y t r a i n ( i ) ) 2 {J_{train}}(\theta ) = {1 \over {2{m_{train}}}}\sum\limits_{i = 1}^{{m_{train}}} {{{({h_\theta }({x_{train}}^{(i)}) - {y_{train}}^{(i)})}^2}} Jtrain(θ)=2mtrain1i=1∑mtrain(hθ(xtrain(i))−ytrain(i))2
验证集错误: J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 {J_{cv}}(\theta ) = {1 \over {2{m_{cv}}}}\sum\limits_{i = 1}^{{m_{cv}}} {{{({h_\theta }({x_{cv}}^{(i)}) - {y_{cv}}^{(i)})}^2}} Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2
测试集错误: J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 {J_{test}}(\theta ) = {1 \over {2{m_{test}}}}\sum\limits_{i = 1}^{{m_{test}}} {{{({h_\theta }({x_{test}}^{(i)}) - {y_{test}}^{(i)})}^2}} Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
这样就可以用验证集误差去选择模型了。在测试集上去评价模型的泛化能力,对所有模型公平公正。
虽然只分成训练集和测试集,在测试集上选择模型并评估最终结果可能表现也不差。但是这是业余人士的策略,作为专业人士还是要分成训练,验证,测试集!!!
10.4 诊断偏差与方差(Diagnosing bias vs. variance)
假设你的学习算法表现不好( J c v ( θ ) {J_{cv}}(\theta ) Jcv(θ)或者 J t e s t ( θ ) {J_{test}}(\theta ) Jtest(θ)较高)。这是偏差问题还是方差问题呢?
偏差(Bias,欠拟合,underfit): 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(θ)
方差(variance,过拟合,overfit): J t r a i n ( θ ) {J_{train}}(\theta ) Jtrain(θ)是非常低的; J c v ( θ ) ≫ J t r a i n ( θ ) {J_{cv}}(\theta ) \gg {J_{train}}(\theta ) Jcv(θ)≫Jtrain(θ)
10.5 正则化和偏差/方差(Regularization and bais/variance)
正则化线性回归:
模型: h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 {h_\theta }(x) = {\theta _0} + {\theta _1}x + {\theta _2}{x^2} + {\theta _3}{x^3} + {\theta _4}{x^4} hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4 , , , J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 J(\theta ) = {1 \over {2m}}\sum\limits_{i = 1}^m {} {({h_\theta }({x^{(i)}}) - {y^{(i)}})^2} + \lambda \sum\limits_{j = 1}^n {\theta _j^2} J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2
尝试不同 λ \lambda λ(如:0,0.01,0.02,0.04,0.008,…),根据 min θ J ( θ ) \mathop {\min }\limits_\theta J(\theta ) θminJ(θ)得到一系列 θ \theta θ,找到使得 J c v ( θ ) {J_{cv}}(\theta ) Jcv(θ)最小的 θ \theta θ,最后在测试集进行测试。
偏差/方差关于正则化参数 λ \lambda λ的函数图像:
10.6 学习曲线(Learning curves)
良好的学习曲线:
m m m表示只从整个训练集中取出 m m m个样本来训练,而不考虑其他样本。
高偏差:
J c v ( θ ) {J_{cv}}(\theta ) Jcv(θ)很快下降然后变平缓不再下降, J t r a i n ( θ ) {J_{train}}(\theta ) Jtrain(θ), J c v ( θ ) {J_{cv}}(\theta ) Jcv(θ)变平接近,且值很大。如果模型出现高偏差,那么获取更多的训练数据也没有太大的帮助。
高方差:
如果模型出现高方差,那么获取更多的训练数据可能是有帮助的。
10.7 接下来做什么(回顾本章开始的例子)
问题描述:假设已经实现正则化线性回归算法预测房价。然后,当在新的数据上进行测试时,发现它的预测结果十分不准确,接下来应该做什么?
- 获取更多的数据——高方差
- 尝试更少的特征——高方差
- 尝试获取更多特征——高偏差
- 尝试添加特征的多项式组合——高偏差
- 尝试减小 λ \lambda λ——高偏差
- 尝试增大 λ \lambda λ——高方差
神经网络和过拟合:
- 小型神经网络
- 更少的参数
- 更可能欠拟合
- 计算简单
- 大型神经网络
- 更多的参数
- 更可能过拟合(可以使用正则化处理)
- 计算复杂
11. 第十一章 机器学习系统设计(Machine learning system design)
11.1 确定优先级:垃圾邮件分类示例
特征 x x x:选择100个单词作为垃圾邮件和非垃圾邮件的关键词。
注意:在实际应用中,常常选择在训练集中最常出现的 n n n(10000到50000)个词作为关键词,而不是手动选择。
问题:有各种方法提升性能,如何选择比较困难?
11.2 误差分析(Error analysis)
帮助解决在各种提升性能的方法中进行选择。
- 推荐方法
- 迅速实现一个简单的算法,并且在验证集上进行测试
- 绘制学习曲线,去决策是否去获取更多的数据或者特征等等
- 误差分析:手动检查你的算法出错的例子(在交叉验证集中)。看看你是否发现它在哪些类型的例子上有任何系统性的趋势犯错误。
- 用一个数字去直观的体现算法性能是重要的
- 误差分析应该在验证集上进行
11.3 不对称性分类的误差评估(Error metrics for skewed classes)
不对称性分类:数据集中一种类别的数量比另一种多得多,如:癌症影像识别。
如果有一个偏斜类分类任务(癌症诊断),用分类精确度并不能很好地衡量算法性能,如癌症诊断任务中可能现有数据集中仅有5%的样本为阳性样本,因此即使我们用一个只会输出负类的分类器,也可以获得95%的准确率,但显然这是没有意义的。为解决上述问题,引入下述评价指标。
Precision/Recall:查准率/查全率(召回率)
P = T P T P + F P {P} = {{TP} \over {TP + FP}} P=TP+FPTP, R = T P T P + F N R = {{TP} \over {TP + FN}} R=TP+FNTP, F 1 = 2 ∗ P ∗ R P + R F1 = {{2*P*R} \over {P + R}} F1=P+R2∗P∗R, F 1 F1 F1是 P , R {P,R} P,R的调和平均。
在偏斜类中使用 P , R {P,R} P,R评估算法要比仅使用分类误差好得多。
11.4 权衡查准率和查全率(Trading off precision and recall)
在通常情况下,预测为正类,当 h θ ( x ) ≥ t h r e s h o l d {h_\theta }(x) \ge threshold hθ(x)≥threshold。因此选择不同的 t h r e s h o l d threshold threshold会得到不同的 P , R {P,R} P,R,而 F 1 F1 F1是 P , R {P,R} P,R的权衡,可以在验证集上使用不同的临界值算出不同的 F 1 F1 F1,选择合适的临界值。
11.5 机器学习数据
“不是谁有最好的算法就能获胜。而是谁拥有最多的数据”。
“It’s not who has the best algorithm that wins. It’s who has the most data." ——[Banko and Brill, 2001]
海量数据是合理的。
- 假设特征 x ∈ R n + 1 x \in {R^{n + 1}} x∈Rn+1已经提供了足够的信息,可以去准确的预测出标签 y y y。判断这一点:给出这样的特征输入 x x x,人类专家是否可以给出正确的输出。
- 学习算法可以使用更多的参数(如:逻辑回归,许多特征的线性回归,更多隐含层的神经网络)。
- 使用更多的训练数据,不易过拟合。