分类
因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量 ,其中 0 表示负向类,1 表示正向类。
sigmod函数 g(z) g θ ( z ) g_\theta(z) gθ(z)= 1 1 + e − z \frac{1}{1+e^{-z}} 1+e−z1或 g θ ( x ) g_\theta(x) gθ(x)= 1 1 + e θ T x \frac{1}{1+e^{\theta^{T}x}} 1+eθTx1
θ T x = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n \theta^{T}x=\theta_{0}x_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\dots+\theta_{n}x_{n} θTx=θ0x0+θ1x1+θ2x2+⋯+θnxn
决策边界(decision boundary):z=多项式(矩阵形式 z= θ T x \theta^{T}x θTx,g(z)图像,根据z的图像(z与0的大小关系)判断(不太清楚)
代价函数
梯度下降
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) {\theta_j}:={\theta_j}-\alpha \frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}}){x_{j}}^{(i)}} θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
这个式子正是我们用来做线性回归梯度下降的
对于线性回归假设函数:
h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n {h_\theta}\left( x \right)={\theta^T}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn
而现在逻辑函数假设函数:
h θ ( x ) = 1 1 + e − θ T X {h_\theta}\left( x \right)=\frac{1}{1+{{e}^{-{\theta^T}X}}} hθ(x)=1+e−θTX1
一对多分类:
过拟合问题over-fitting
处理过拟合问题
正则化。设置惩罚
上面的回归问题中如果我们的模型是: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 + θ 4 x 4 4 {h_\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}+{\theta_{3}}{x_{3}^3}+{\theta_{4}}{x_{4}^4} hθ(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44我们可以从之前的事例中看出,正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于0的话,我们就能很好的拟合了。修改后的代价函数如下:
min θ 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + 1000 θ 3 2 + 10000 θ 4 2 ] \underset{\theta }{\mathop{\min }}\,\frac{1}{2m}[\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}+1000\theta _{3}^{2}+10000\theta _{4}^{2}]} θmin2m1[i=1∑m(hθ(x(i))−y(i))2+1000θ32+10000θ42]
假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的能防止过拟合问题的假设: J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J\left( \theta \right)=\frac{1}{2m}[\sum\limits_{i=1}^{m}{{{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})}^{2}}+\lambda \sum\limits_{j=1}^{n}{\theta_{j}^{2}}]} J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2]
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}}) θ0:=θ0−am1i=1∑m((hθ(x(i))−y(i))x0(i))
θ j : = θ j − a [ 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}+\frac{\lambda }{m}{\theta_j}] θj:=θj−a[m1i=1∑m((hθ(x(i))−y(i))xj(i)+mλθj]
j = 1 , 2 , 3 , … , n j=1,2,3,\dots,n j=1,2,3,…,n
正规方程求解正则化线性回归模型 θ = ( X T X + λ [ 0 1 1 ⋱ 1 ] ) − 1 X T y \theta=\left(X^{T}X+\lambda \left[\begin{matrix}0 \\ &1 \\ &&1 \\ &&&\ddots \\ &&&&1 \end{matrix}\right]\right)^{-1}X^{T}y θ=⎝⎜⎜⎜⎜⎛XTX+λ⎣⎢⎢⎢⎢⎡011⋱1⎦⎥⎥⎥⎥⎤⎠⎟⎟⎟⎟⎞−1XTy
模型表示
多类分类
代价函数
反向传播(不太懂)
δ ( l ) = ( Θ ( l ) ) T δ ( l + 1 ) ∗ g ′ ( z ( l ) ) \delta^{(l)}=(\Theta^{(l)})^{T}\delta^{(l+1)}\ast g'(z^{(l)}) δ(l)=(Θ(l))Tδ(l+1)∗g′(z(l))
g ′ ( z ( l ) = a l ⋅ ( 1 − a l ) g'(z^{(l)}=a^{l}·(1-a^{l}) g′(z(l)=al⋅(1−al)
∂ ∂ Θ i j ( l ) J ( Θ ) = a j ( l ) δ i l + 1 \frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)=a_{j}^{(l)} \delta_{i}^{l+1} ∂Θij(l)∂J(Θ)=aj(l)δil+1
∂ ∂ Θ J ( Θ ) = δ l + 1 ( a ( l ) ) T \frac{\partial}{\partial\Theta}J(\Theta)=\delta^{l+1}(a^{(l)} )^{T} ∂Θ∂J(Θ)=δl+1(a(l))T
Δ \Delta Δ是大写的 δ \delta δ
在求出了 Δ i j ( l ) \Delta_{ij}^{(l)} Δij(l)之后,我们便可以计算代价函数的偏导数了
D i j ( l ) : = 1 m Δ i j ( l ) + λ Θ i j ( l ) , i f j ≠ 0 D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)}+\lambda\Theta_{ij}^{(l)}, {if} \; j \neq 0 Dij(l):=m1Δij(l)+λΘij(l),ifj=0
D i j ( l ) : = 1 m Δ i j ( l ) , i f j = 0 D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)},{if}\; j = 0 Dij(l):=m1Δij(l),ifj=0
∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta) ∂Θij(l)∂J(Θ)是 D i j ( l ) D_{ij}^{(l)} Dij(l)
l l l 代表目前所计算的是第几层。
j j j代表目前计算层中的激活单元的下标,也将是下一层的第 j j j个输入变量的下标。
i i i代表下一层中误差单元的下标,是受到权重矩阵中第 i i i行影响的下一层中的误差单元的下标。
梯度检验
一个只针对 θ 1 \theta_{1} θ1进行检验的示例:
∂ ∂ θ 1 = J ( θ 1 + ε 1 , θ 2 , θ 3 . . . θ n ) − J ( θ 1 − ε 1 , θ 2 , θ 3 . . . θ n ) 2 ε \frac{\partial}{\partial\theta_1}=\frac{J\left(\theta_1+\varepsilon_1,\theta_2,\theta_3...\theta_n \right)-J \left( \theta_1-\varepsilon_1,\theta_2,\theta_3...\theta_n \right)}{2\varepsilon} ∂θ1∂=2εJ(θ1+ε1,θ2,θ3...θn)−J(θ1−ε1,θ2,θ3...θn)
∂ ∂ θ i = J ( θ 1 , θ 2 , θ 3 , … , θ i + ε 1 . . . θ n ) − J ( θ 1 , θ 2 , θ 3 , … , θ i − ε 1 . . . θ n ) 2 ε \frac{\partial}{\partial\theta_i}=\frac{J\left(\theta_1,\theta_2,\theta_3,\dots,\theta_i+\varepsilon_1...\theta_n \right)-J \left( \theta_1,\theta_2,\theta_3,\dots,\theta_i-\varepsilon_1...\theta_n \right)}{2\varepsilon} ∂θi∂=2εJ(θ1,θ2,θ3,…,θi+ε1...θn)−J(θ1,θ2,θ3,…,θi−ε1...θn)
随机初始化
总结神经网络时的步骤:
当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以做什么?
运用一些机器学习诊断法来帮助我们知道哪些方法对我们的算法是有效的
避免过拟合和欠拟合
训练集和测试集
测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:
J t e s t ( θ ) = − 1 m t e s t ∑ i = 1 m t e s t [ log h θ ( x t e s t ( i ) ) + ( 1 − y t e s t ( i ) ) log h θ ( x t e s t ( i ) ) ] J_{test}{(\theta)} = -\frac{1}{{m}_{test}}\sum\limits_{i=1}^{m_{test}} [\log{h_{\theta}(x^{(i)}_{test})}+(1-{y^{(i)}_{test}})\log{h_{\theta}(x^{(i)}_{test})}] Jtest(θ)=−mtest1i=1∑mtest[loghθ(xtest(i))+(1−ytest(i))loghθ(xtest(i))]
误分类的比率,对于每一个测试集样本,计算:
(错误的标记为1)然后对计算结果求平均。
显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。
我们需要使用交叉验证集来帮助选择模型。 即:使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集
模型选择的方法为:
J t r a i n ( θ ) = 1 2 m t r a i n ∑ i = 1 m ( h θ ( x t r a i n ( i ) ) − y t r a i n ( i ) ) 2 J_{train}(\theta) = \frac{1}{2m_{train}}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)}_{train})-y^{(i)}_{train})^2 Jtrain(θ)=2mtrain1i=1∑m(hθ(xtrain(i))−ytrain(i))2
J c v ( θ ) = 1 2 m c v ∑ i = 1 m ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 J_{cv}(\theta) = \frac{1}{2m_{cv}}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)}_{cv})-y^{(i)}_{cv})^2 Jcv(θ)=2mcv1i=1∑m(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 c v ( i ) ) − y c v ( i ) ) 2 J_{test}(\theta)=\frac{1}{2m_{test}}\sum\limits_{i=1}^{m_{test}}(h_{\theta}(x^{(i)}_{cv})-y^{(i)}_{cv})^2 Jtest(θ)=2mtest1i=1∑mtest(hθ(xcv(i))−ycv(i))2
在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能会正则化的程度太高或太小了,即我们在选择λ的值时也需要思考与刚才选择多项式模型次数类似的问题。
我们选择一系列的想要测试 λ \lambda λ值,通常是 0-10之间的呈现2倍关系的值
选择 λ \lambda λ的方法为:
当 λ \lambda λ较小时,训练集误差较小(过拟合)而交叉验证集误差较,随着 λ \lambda λ的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加
学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的合理检验(sanity check)。
学习曲线是将训练集误差和交叉验证集误差作为训练集样本数量( m m m)的函数绘制的图表
思想:当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。
如何利用学习曲线识别高偏差/欠拟合:
如何利用学习曲线识别高方差/过拟合:
类偏斜情况表现为我们的训练集中有非常多的同一种类的样本,只有很少或没有其他类的样本。
正确肯定(True Positive,TP):预测为真,实际为真
正确否定(True Negative,TN):预测为假,实际为假
错误肯定(False Positive,FP):预测为真,实际为假
错误否定(False Negative,FN):预测为假,实际为真
查准率(Precision)=TP/(TP+FP) 预测为真中的正确率
查全率(Recall)=TP/(TP+FN) 预测为真占实际为真中的比例
假使,我们的算法输出的结果在0-1 之间,我们使用阀值0.5 来预测真和假。
如果我们希望只在非常确信的情况下预测为真,即我们希望更高的查准率,我们可以使用比0.5更大的阀值,如0.7,0.9。减少错误预测情况,同时却会增加未能成功预测情况。
如果我们希望提高查全率,尽可能地预测所有有可能是真的情况,我们可以使用比0.5更小的阀值,如0.3。
一个帮助我们选择这个阀值的方法。一种方法是计算F1 值(F1 Score),其计算公式为: F 1 S c o r e : 2 P R P + R {{F}_{1}}Score:2\frac{PR}{P+R} F1Score:2P+RPR,我们选择使得F1值最高的阀值。( P P P查准率, R R R查全率)
什么时候希望获得更多的数据而非修改算法
如果训练集比参数的数量还大,甚至是更多,那么这些算法就不太可能会过度拟合。也就是说训练误差有希望接近测试误差
值,如0.3。
一个帮助我们选择这个阀值的方法。一种方法是计算F1 值(F1 Score),其计算公式为: F 1 S c o r e : 2 P R P + R {{F}_{1}}Score:2\frac{PR}{P+R} F1Score:2P+RPR,我们选择使得F1值最高的阀值。( P P P查准率, R R R查全率)
返回目录