本文总结机器学习基石的第三次作业,主要包括误差函数、特征转换、二阶泰勒展开,以及线性回归,逻辑回归的实现。


问题1和问题2:关于线性回归问题中 E i n E_{in} Ein​和 E o u t E_{out} Eout​的理解。

关于含有噪声的目标 y = w f T x + ϵ y=w^T_fx+\epsilon y=wfT​x+ϵ,其中的噪声 ϵ \epsilon ϵ均值为0,方差为 σ 2 \sigma^2 σ2,且相互独立。根据PPT上的讲解可知,闭式解 w l i n w_{lin} wlin​的 E i n E_{in} Ein​为:
E i n ( w l i n ) = 1 N ∣ ∣ y − y ^ ∣ ∣ 2 = 1 N ∣ ∣ ( I − X X † ) y ∣ ∣ 2 = 1 N ∣ ∣ ( I − H ) y ∣ ∣ 2 E_{in}(w_{lin})=\frac{1}{N}||\mathbb{y}-\hat{\mathbb{y}}||^2=\frac{1}{N}||(I-XX^{\dagger})\mathbb{y}||^2=\frac{1}{N}||(I-H)\mathbb{y}||^2 Ein​(wlin​)=N1​∣∣y−y^​∣∣2=N1​∣∣(I−XX†)y∣∣2=N1​∣∣(I−H)y∣∣2

从上图可知, ( I − H ) y = ( I − H ) n o i s e (I-H)\mathbb{y}=(I-H)noise (I−H)y=(I−H)noise(这是基于只有 f ( x ) f(x) f(x)含有噪声, x x x不含噪声的前提),从而问题转换为 E i n ( w l i n ) = 1 N ∣ ∣ ( I − H ) n o i s e ∣ ∣ 2 E_{in}(w_{lin})=\frac{1}{N}||(I-H)noise||^2 Ein​(wlin​)=N1​∣∣(I−H)noise∣∣2。为了简化起见,令 A = ( I − H ) , B = n o i s e → ∣ ∣ A B ∣ ∣ 2 = s c a l e r A=(I-H),B=noise\to ||AB||^2=scaler A=(I−H),B=noise→∣∣AB∣∣2=scaler,从而可以获得下面的式子(其中用到 B B T = s c a l e r BB^T=scaler BBT=scaler):
∣ ∣ A B ∣ ∣ 2 = t r a c e ( ( A B ) T A B ) = t r a c e ( B B T A T A ) = B B T t r a c e ( A T A ) = ∣ ∣ n o i s e ∣ ∣ 2 t r a c e ( A T A ) ||AB||^2=trace((AB)^TAB)=trace(BB^TA^TA)\\ =BB^Ttrace(A^TA)=||noise||^2trace(A^TA) ∣∣AB∣∣2=trace((AB)TAB)=trace(BBTATA)=BBTtrace(ATA)=∣∣noise∣∣2trace(ATA)
根据 H H H的性质(具体证明等见Q2)可得:
t r a c e ( ( I − H ) T ( I − H ) ) = t r a c e ( I − H ) = N − ( d + 1 ) trace((I-H)^T(I-H))=trace(I-H)=N-(d+1) trace((I−H)T(I−H))=trace(I−H)=N−(d+1)
所以,综上所述可得:
E i n ( w l i n ) = ( 1 − d + 1 N ) ∣ ∣ n o i s e ∣ ∣ 2 E_{in}(w_{lin})=(1-\frac{d+1}{N})||noise||^2 Ein​(wlin​)=(1−Nd+1​)∣∣noise∣∣2




当 σ = 0.1 , d = 8 \sigma=0.1,\ d=8 σ=0.1, d=8时,使得 E i n E_{in} Ein​的数学期望 ≥ 0.008 \ge0.008 ≥0.008的样本数是多少?(从选项中选择满足条件情况下最小的)

E i n E_{in} Ein​的数学期望为:
E D [ E i n ( w l i n ) ] = ( 1 − d + 1 N ) σ 2 \mathbb{E}_D[E_{in}(w_{lin})]=(1-\frac{d+1}{N})\sigma^2 ED​[Ein​(wlin​)]=(1−Nd+1​)σ2
从而相当于 ( 1 − 9 / N ) ∗ 0.01 ≥ 0.0008 → N = 45 (1-9/N)*0.01\ge 0.0008\to N=45 (1−9/N)∗0.01≥0.0008→N=45,从而选择N=100。

针对hat matrix H = X ( X T X ) − 1 X T H=X(X^TX)^{-1}X^T H=X(XTX)−1XT性质的探究,以下哪些性质是 H H H所具有的?

结论: H H H是①对称 ②幂等性 ③半正定 ④有d+1个特征值为1。

证明:

  • ①对称性: H = ( X ( X T X ) − 1 X T ) T = X ( X T X ) − 1 X T = H H=(X(X^TX)^{-1}X^T)^T=X(X^TX)^{-1}X^T=H H=(X(XTX)−1XT)T=X(XTX)−1XT=H(其中有用到 ( ( A B ) − 1 ) T = ( ( A B ) T ) − 1 ((AB)^{-1})^T=((AB)^T)^{-1} ((AB)−1)T=((AB)T)−1,这条式子有可逆作为先决条件);
  • ②幂等性: H 2 = X ( X T X ) − 1 X T X ( X T X ) − 1 X T = X ( X T X ) − 1 X T = H H^2=X(X^TX)^{-1}X^TX(X^TX)^{-1}X^T=X(X^TX)^{-1}X^T=H H2=X(XTX)−1XTX(XTX)−1XT=X(XTX)−1XT=H;
  • ③半正定:假设存在特征值和特征向量 H w = λ w Hw=\lambda w Hw=λw,则 λ w = H w = H 2 w = λ H w = λ 2 w \lambda w=Hw=H^2w=\lambda Hw=\lambda^2w λw=Hw=H2w=λHw=λ2w,从而 λ 2 w = λ w → λ = 0 o r 1 \lambda^2w=\lambda w\to \lambda=0\ or \ 1 λ2w=λw→λ=0 or 1,所以全部特征值均 ≥ 0 \ge 0 ≥0;
  • ④存在d+1个特征值为1: t r a c e ( H ) = t r a c e ( X ( X T X ) − 1 X T ) = t r a c e ( ( X T X ) − 1 X T X ) = t r a c e ( I d + 1 × d + 1 ) = d + 1 trace(H)=trace(X(X^TX)^{-1}X^T)=trace((X^TX)^{-1}X^TX)=trace(I_{d+1\times d+1})=d+1 trace(H)=trace(X(XTX)−1XT)=trace((XTX)−1XTX)=trace(Id+1×d+1​)=d+1,又根据 t r a c e ( H ) = ∑ λ i trace(H)=\sum\lambda_i trace(H)=∑λi​(该项需要半正定和对称性作为条件,具体证明可见AI圣经PRML),从而可知 λ = 1 \lambda=1 λ=1对应有 d + 1 d+1 d+1个。

这些结论可以用来证明 t r a c e ( I − H ) = N − ( d + 1 ) trace(I-H)=N-(d+1) trace(I−H)=N−(d+1)。


问题3-5:主要考察损失判据和随机梯度下降。


上述损失判据中,哪个是0/1判据 s i g n ( w T x ) ≠ y sign(w^Tx)\ne y sign(wTx)​=y的上界( y ∈ { − 1 , + 1 } y\in \{-1,+1\} y∈{−1,+1})?

通过上述图像易知,err3(本题D项,绘图存疑)即为0/1判据的上界。



上述损失判据中,哪个并不是处处可微分的?

由上图得,err2(本题D项)即在0处不可微分。



对上述损失判据计算SGD(忽略不可微分的情况),哪个损失判据恰好是PLA中采用的(即其求梯度函数恰好为PLA中更新参数时用到的)?

由第二节课件可知,PLA的参数更新方程为 w ← w + y x i f s i g n ( w T x ) ≠ y w\gets w+yx\ \ if\ sign(w^Tx)\neq y w←w+yx  if sign(wTx)​=y,可等价为 y w T x > 0 , ∇ E = 0 , y w T x < 0 , ∇ E = − y x yw^Tx\gt 0,\ \nabla E=0,\ \ \ \ yw^Tx\lt 0,\ \nabla E=-yx ywTx>0, ∇E=0,    ywTx<0, ∇E=−yx,从而推出 e r r ( w ) = m a x ( 0 , − y w T x ) err(w)=max(0,-yw^Tx) err(w)=max(0,−ywTx)


问题6-10:主要考查二元情况下的导数和二阶泰勒展开。

一阶导数: ∇ f ( x , y ) = [ ∂ f ∂ x , ∂ f ∂ y ] T \nabla f(x,y)=[\frac{\partial f}{\partial x},\frac{\partial f}{\partial y}]^T ∇f(x,y)=[∂x∂f​,∂y∂f​]T
二阶导数: ∇ 2 f ( x , y ) = [ ∂ 2 f ∂ x 2 , ∂ 2 f ∂ y ∂ x ; ∂ 2 f ∂ y ∂ x , ∂ 2 f ∂ y 2 ] \nabla^2 f(x,y)=[\frac{\partial^2 f}{\partial x^2},\frac{\partial^2 f}{\partial y\partial x}; \frac{\partial^2 f}{\partial y\partial x},\frac{\partial^2 f}{\partial y^2}] ∇2f(x,y)=[∂x2∂2f​,∂y∂x∂2f​;∂y∂x∂2f​,∂y2∂2f​]
二阶泰勒展开:
f ( x + Δ x , y + Δ y ) = f ( x , y ) + Δ x ∂ f ( x , y ) ∂ x + Δ y ∂ f ( x , y ) ∂ y + 1 2 ! [ ( Δ x ) 2 ∂ 2 f ( x , y ) ∂ x 2 + 2 Δ x Δ y ∂ 2 f ( x , y ) ∂ x ∂ y + ( Δ y ) 2 ∂ 2 f ( x , y ) ∂ y 2 ] f(x+\Delta x, y+\Delta y)=f(x,y)+\Delta x\frac{\partial f(x,y)}{\partial x}+\Delta y\frac{\partial f(x,y)}{\partial y}\\ +\frac{1}{2!}\big[(\Delta x)^2\frac{\partial^2 f(x,y)}{\partial x^2}+2\Delta x\Delta y\frac{\partial^2 f(x,y)}{\partial x\partial y}+(\Delta y)^2\frac{\partial^2 f(x,y)}{\partial y^2}\big] f(x+Δx,y+Δy)=f(x,y)+Δx∂x∂f(x,y)​+Δy∂y∂f(x,y)​+2!1​[(Δx)2∂x2∂2f(x,y)​+2ΔxΔy∂x∂y∂2f(x,y)​+(Δy)2∂y2∂2f(x,y)​]
题设表达式:
E ( u , v ) = e u + e 2 v + e u v + u 2 − 2 u v + 2 v 2 − 3 u − 2 v E(u,v)=e^u+e^{2v}+e^{uv}+u^2-2uv+2v^2-3u-2v E(u,v)=eu+e2v+euv+u2−2uv+2v2−3u−2v

∇ E ( u , v ) \nabla E(u,v) ∇E(u,v)在 ( u , v ) = ( 0 , 0 ) (u,v)=(0,0) (u,v)=(0,0)处的值时多少?

根据一阶导数可得:
∂ E ( u , v ) ∂ u = e u + v e u v + 2 u − 2 v − 3 ∂ E ( u , v ) ∂ v = 2 e 2 v + u e u v − 2 u + 4 v − 2 \frac{\partial E(u,v)}{\partial u}=e^u+ve^{uv}+2u-2v-3\\ \frac{\partial E(u,v)}{\partial v}=2e^{2v}+ue^{uv}-2u+4v-2 ∂u∂E(u,v)​=eu+veuv+2u−2v−3∂v∂E(u,v)​=2e2v+ueuv−2u+4v−2
将 ( u , v ) = ( 0 , 0 ) (u,v)=(0,0) (u,v)=(0,0)代入可得 ∇ E ( 0 , 0 ) = ( − 2 , 0 ) \nabla E(0,0)=(-2,0) ∇E(0,0)=(−2,0)。



根据梯度下降算法(如下式所示),对参数进行迭代更新,求 η = 0.01 , ( u 0 , v 0 ) = ( 0 , 0 ) \eta=0.01,(u_0,v_0)=(0,0) η=0.01,(u0​,v0​)=(0,0)经过五次迭代后的结果 ( u 5 , v 5 ) (u_5,v_5) (u5​,v5​)和 E ( u 5 , v 5 ) E(u_5,v_5) E(u5​,v5​)?
( u t + 1 , v t + 1 ) = ( u t , v t ) − η ∇ E ( u t , v t ) (u_{t+1},v_{t+1})=(u_t,v_t)-\eta \nabla E(u_t,v_t) (ut+1​,vt+1​)=(ut​,vt​)−η∇E(ut​,vt​)
由程序推出: u = 0.0941 , v = 0.0018 , E = 2.825 u= 0.0941,v= 0.0018,E=2.825 u=0.0941,v=0.0018,E=2.825。



如果采用二阶泰勒展开 E ^ 2 ( Δ u , Δ v ) \hat{E}_2(\Delta u,\Delta v) E^2​(Δu,Δv)来近似 E ( u + Δ u , v + Δ v ) E(u+\Delta u, v+\Delta v) E(u+Δu,v+Δv),求下述表达式中的参数在 ( u , v ) = ( 0 , 0 ) (u,v)=(0,0) (u,v)=(0,0)处的值?
E ^ 2 ( Δ u , Δ v ) = b u u ( Δ u ) 2 + b v v ( Δ v ) 2 + b u v ( Δ u ) ( Δ v ) + b u Δ u + b v Δ v + b \hat{E}_2(\Delta u,\Delta v)=b_{uu}(\Delta u)^2+b_{vv}(\Delta v)^2+b_{uv}(\Delta u)(\Delta v)+b_u\Delta u+b_v\Delta v+b E^2​(Δu,Δv)=buu​(Δu)2+bvv​(Δv)2+buv​(Δu)(Δv)+bu​Δu+bv​Δv+b
根据二阶导数的情况:
∂ 2 E ∂ u 2 = e u + v 2 e u v + 2 ∂ 2 E ∂ v 2 = 4 e 2 v + u 2 e u v + 4 ∂ 2 E ∂ u ∂ v = e u v + v u e u v − 2 \frac{\partial^2 E}{\partial u^2}=e^u+v^2e^{uv}+2\\ \frac{\partial^2 E}{\partial v^2}=4e^{2v}+u^2e^{uv}+4\\ \frac{\partial^2 E}{\partial u\partial v}=e^{uv}+vue^{uv}-2 ∂u2∂2E​=eu+v2euv+2∂v2∂2E​=4e2v+u2euv+4∂u∂v∂2E​=euv+vueuv−2
将上式代入二阶泰勒展开,推出: ( 1.5 , 4 , − 1 , − 2 , 0 , 3 ) (1.5,4,-1,-2,0,3) (1.5,4,−1,−2,0,3)。



将黑塞/海森矩阵(Hessian Matrix)表示为 ∇ 2 E ( u , v ) \nabla^2E(u,v) ∇2E(u,v),并假设该矩阵是正定的。以下哪个时最佳的 ( Δ u , Δ v ) (\Delta u,\Delta v) (Δu,Δv)使得 E ^ 2 \hat E_2 E^2​取到最小值?(这个方向称之为Newton Direction)

找使得 E ^ 2 \hat E_2 E^2​最小的 ( Δ u , Δ v ) (\Delta u,\Delta v) (Δu,Δv),可以直接通过求导获得。分别对 Δ u \Delta u Δu和 Δ v \Delta v Δv求导,结果如下:
∂ E 2 ∂ Δ u = ∂ E ∂ u + Δ u ∂ 2 E ∂ u 2 + Δ v ∂ 2 E ∂ u ∂ v = 0 ∂ E 2 ∂ Δ v = ∂ E ∂ v + Δ v ∂ 2 E ∂ v 2 + Δ u ∂ 2 E ∂ u ∂ v = 0 \frac{\partial E_2}{\partial \Delta u}=\frac{\partial E}{\partial u}+\Delta u\frac{\partial^2 E}{\partial u^2}+\Delta v\frac{\partial^2 E}{\partial u\partial v}=0\\ \frac{\partial E_2}{\partial \Delta v}=\frac{\partial E}{\partial v}+\Delta v\frac{\partial^2 E}{\partial v^2}+\Delta u\frac{\partial^2 E}{\partial u\partial v}=0 ∂Δu∂E2​​=∂u∂E​+Δu∂u2∂2E​+Δv∂u∂v∂2E​=0∂Δv∂E2​​=∂v∂E​+Δv∂v2∂2E​+Δu∂u∂v∂2E​=0
联立上述两式,并将 ( Δ u , Δ v ) (\Delta u,\Delta v) (Δu,Δv)以向量形式提取出来可以化简为:
( Δ u , Δ v ) T = − ( ∇ 2 E ) − 1 ∇ E (\Delta u,\Delta v)^T=-(\nabla^2E)^{-1}\nabla E (Δu,Δv)T=−(∇2E)−1∇E



对 ( u 0 , v 0 ) (u_0,v_0) (u0​,v0​)利用Newton Direction(无 η \eta η)进行参数更新,五轮更新后 ( u 5 , v 5 ) (u_5,v_5) (u5​,v5​)和 E E E 结果为?

通过简单的程序可得: u = 0.6118 , v = 0.0705 , E = 2.3608 u= 0.6118,v= 0.0705,E=2.3608 u=0.6118,v=0.0705,E=2.3608。

从该结果可以看出,Newton Direction更新速度更快,但是代价是求Hessian矩阵引入的复杂性。


问题11-12:关于特征转换的问题。

考虑二维空间上的6个点,采用含有二次函数,线性函数的hypotheses集合,最多能shatter其中的几个点。shatter的意思是说将输入样本点完全二分。看下图:

使用上述六条线可以将六个样本点shatter。



假设转换之前预先“偷看”了所有 N N N个数据,并定义一种特殊的特征转换,将 x ∈ R d → z ∈ R N x\in \mathbb{R}^d\to z\in\mathbb{R}^N x∈Rd→z∈RN
( Φ ( x ) ) n = z n = [ x = x n ] (\Phi(x))_n=z_n=[x=x_n] (Φ(x))n​=zn​=[x=xn​]
这题的关键在于理解这种“奇葩”的特征转换,举个例子,如第1个数据 x 1 x_1 x1​,根据上述规则则变为 [ 1 , 0 , . . . , 0 ] T [1,0,...,0]^T [1,0,...,0]T,(矩阵大小 N × 1 N\times1 N×1)就是将第几个数对应的行置为1,其他行均为0。显然,不管多少数,其转换后的向量是两两正交的,正交的向量一定是线性无关的,因此均可以被shatter,所以 d v c ( H Φ ) = ∞ d_{vc}(H_\Phi)=\infty dvc​(HΦ​)=∞。所以答案为C。


问题13-15:主要关于线性回归问题和特征转换。

数据产生:数据集大小 N = 1000 N=1000 N=1000,且 X = [ − 1 , 1 ] × [ − 1 , 1 ] \mathcal{X}=[-1,1]\times[-1,1] X=[−1,1]×[−1,1],每个数据的 x \mathbb{x} x均等概率的从 X \mathcal{X} X中提取。而对应的 y y y则根据 f ( x 1 , x 2 ) = s i g n ( x 1 2 + x 2 2 − 0.6 ) f(x_1,x_2)=sign(x_1^2+x_2^2-0.6) f(x1​,x2​)=sign(x12​+x22​−0.6)来确定,且对数据集中的 10 % 10\% 10%的数据的 y y y进行反转(相当于添加噪声)。

先对线性回归算法进行简单的说明:

函数集: y = w T x y=w^T\mathbb{x} y=wTx

损失函数: E i n ( w ) = 1 N ∑ n = 1 N ( w T x n − y n ) 2 E_{in}(w)=\frac{1}{N}\sum_{n=1}^N(w^T\mathbb{x}_n-y_n)^2 Ein​(w)=N1​∑n=1N​(wTxn​−yn​)2

梯度: ∇ E i n ( w ) = 2 N ( X T X w − X T y ) \nabla E_{in}(w)=\frac{2}{N}(X^TXw-X^T\mathbb{y}) ∇Ein​(w)=N2​(XTXw−XTy)

“目的”:寻找 w w w使得损失函数最小

Linear Regression

①获得数据 ( x 1 , y 1 ) , . . . , ( x N , y N ) (\mathbb{x}_1,y_1),...,(\mathbb{x}_N,y_N) (x1​,y1​),...,(xN​,yN​)
②采用闭式解公式求出最佳 w w w: w l i n = ( X T X ) − 1 X T y w_{lin}=(X^TX)^{-1}X^T\mathbb{y} wlin​=(XTX)−1XTy
③返回 w l i n w_{lin} wlin​

如果还有预测过程,直接 y ^ = w l i n T x \hat{y}=w_{lin}^Tx y^​=wlinT​x



不进行特征转换,只采用特征 ( 1 , x 1 , x 2 ) (1, x_1,x_2) (1,x1​,x2​),利用Linear Regression获得最佳的 w l i n w_{lin} wlin​。将其直接运用到分类问题上面(利用 s i g n ( w T x ) sign(w^Tx) sign(wTx)),在利用 0 / 1 0/1 0/1判据来衡量训练样本误差 E i n E_{in} Ein​。进行1000次实验,取误差的平均。

Ein: 0.5036

通过上面结果可知,直接利用Linear Regression(利用square error)再运用到分类问题上结果很差!


问题14-15:将数据的特征进行转换,转换为 ( 1 , x 1 , x 2 , x 1 x 2 , x 1 2 , x 2 2 ) (1,x_1,x_2,x_1x_2,x_1^2,x_2^2) (1,x1​,x2​,x1​x2​,x12​,x22​)这6项,再利用Linear Regression获得最佳的 w l i n w_{lin} wlin​,求该 w l i n w_{lin} wlin​以及将其运用到测试集上的测试误差 E o u t E_{out} Eout​(衡量方式与Q13相同)。

theta:[[-1.01626639 0.07325707 0.02834912 -0.0155599 1.63387468 1.52477431]]
选项中最接近的为:
g ( x 1 , x 2 ) = s i g n ( − 1 − 0.05 x 1 + 0.08 x 2 + 0.13 x 1 x 2 + 1.5 x 1 2 + 1.5 x 2 2 ) g(x_1,x_2)=sign(-1-0.05x_1+0.08x_2+0.13x_1x_2+1.5x_1^2+1.5x_2^2) g(x1​,x2​)=sign(−1−0.05x1​+0.08x2​+0.13x1​x2​+1.5x12​+1.5x22​)



在14题得到的最优w的基础上,产生1000个测试样本,计算误差。重复1000次求平均。

Eout: 0.125225


问题16-17:关于多类别logistics regression问题。针对K类别分类问题,我们定义输出空间 Y = { 1 , 2 , . . . , K } \mathcal{Y}=\{1,2,...,K\} Y={1,2,...,K},MLR的函数集可以视为由一系列(K个)权值向量 ( w 1 , . . . , w K ) (w_1,...,w_K) (w1​,...,wK​)构成,其中每个权值向量均为 d + 1 d+1 d+1维。每种假设函数可以表示为:
h y ( x ) = e x p ( w y T x ) ∑ i = 1 K e x p ( w i T x ) h_y(x)=\frac{exp(w^T_y\mathbb{x})}{\sum_{i=1}^Kexp(w_i^T\mathbb{x})} hy​(x)=∑i=1K​exp(wiT​x)exp(wyT​x)​
且可以用来近似潜在的目标分布函数 P ( y ∣ x ) P(y|\mathbb{x}) P(y∣x)。MLR的“目标”就是从假设函数集中寻找使得似然函数最大的额假设函数。

类似Lecture10中最小化 − l o g ( l i k e l i h o o d ) -log(likelihood) −log(likelihood)一样,推导 E i n ( w 1 , . . . , w K ) E_{in}(w_1,...,w_K) Ein​(w1​,...,wK​)。

采用同样的处理方式
m a x 1 N ∏ i = 1 N h y ( x ) → m i n − 1 N ∑ i = 1 N l o g ( h y ( x ) ) max\ \frac{1}{N}\prod_{i=1}^Nh_y(\mathbb{x})\to min\ -\frac{1}{N}\sum_{i=1}^Nlog(h_y(\mathbb{x})) max N1​i=1∏N​hy​(x)→min −N1​i=1∑N​log(hy​(x))
将MLR的假设函数代入上式并化简可得:
1 N ∑ n = 1 N ( l n ( ∑ i = 1 K e x p ( w i T x n ) ) − w y n T x n ) \frac{1}{N}\sum_{n=1}^N\big(ln(\sum_{i=1}^Kexp(w_i^T\mathbb{x}_n))-w^T_{y_n}\mathbb{x}_n\big) N1​n=1∑N​(ln(i=1∑K​exp(wiT​xn​))−wyn​T​xn​)



针对上述的 E i n E_{in} Ein​,它的一阶导数 ∇ E i n \nabla E_{in} ∇Ein​可以表示为 ( ∂ E i n ∂ w 1 , ∂ E i n ∂ w 2 , , . . . , ∂ E i n ∂ w K ) \big(\frac{\partial E_{in}}{\partial w_1},\frac{\partial E_{in}}{\partial w_2,},...,\frac{\partial E_{in}}{\partial w_K}\big) (∂w1​∂Ein​​,∂w2​,∂Ein​​,...,∂wK​∂Ein​​),求 ∂ E i n ∂ w i \frac{\partial E_{in}}{\partial w_i} ∂wi​∂Ein​​。

直接对A16的答案的式子进行求导,就可以得到下式:
1 N ∑ n = 1 N ( ( h i ( x n ) − [ y n = i ] x n ) \frac{1}{N}\sum_{n=1}^N\big((h_i(\mathbb{x}_n)-[y_n=i]\mathbb{x}_n\big) N1​n=1∑N​((hi​(xn​)−[yn​=i]xn​)


问题18-20:关于logistic regression实现的问题。

首先看一下算法:

函数集: s = ∑ i = 0 d w i x i s=\sum_{i=0}^dw_ix_i s=∑i=0d​wi​xi​, h ( x ) = θ ( s ) = 1 1 + e − s h(\mathbb{x})=\theta(s)=\frac{1}{1+e^{-s}} h(x)=θ(s)=1+e−s1​

损失函数: E i n ( w ) = 1 N ∑ i = 1 N l n ( 1 + e x p ( − y n w T x n ) ) E_{in}(w)=\frac{1}{N}\sum_{i=1}^Nln(1+exp(-y_nw^T\mathbb{x}_n)) Ein​(w)=N1​∑i=1N​ln(1+exp(−yn​wTxn​))

梯度: ∇ E i n = 1 N ∑ i = 1 N θ ( − y n w T x n ) ( − y n x n ) \nabla E_{in}=\frac{1}{N}\sum_{i=1}^N\theta\big(-y_nw^T\mathbb{x}_n\big)(-y_n\mathbb{x}_n) ∇Ein​=N1​∑i=1N​θ(−yn​wTxn​)(−yn​xn​)

目标:寻找一个最佳假设函数使得损失函数最小

(注: h ( x ) h(\mathbb{x}) h(x)来近似 P ( y ∣ x ) P(y|\mathbb{x}) P(y∣x)上述的损失函数通过cross-entropy可推导出来)

Logistic Regression:

初始化 w w w
For t=0,1,…
① 计算 ∇ E i n ( w ) \nabla E_{in}(w) ∇Ein​(w)
② 更新参数: w ← w − η ∇ E i n ( w ) w\gets w-\eta\nabla E_{in}(w) w←w−η∇Ein​(w)
返回 w w w

(上述 η \eta η可以视为一个超参数,可以通过cross-validation来确定)



针对 η = 0.001 , T = 2000 \eta=0.001,\ T=2000 η=0.001, T=2000的情况,采用梯度下降法获得 w w w后,在测试集上的错误率是多少?(利用0/1判据)

Ein = 0.466;Eout = 0.475。



针对 η = 0.01 , T = 2000 \eta=0.01,\ T=2000 η=0.01, T=2000的情况,采用梯度下降法获得 w w w后,在测试集上的错误率是多少?(利用0/1判据)

Ein = 0.197;Eout = 0.22。



针对 η = 0.001 , T = 2000 \eta=0.001,\ T=2000 η=0.001, T=2000的情况,采用随机梯度下降法(此处采用按顺序每次选择元素,更通常的做法是随机选择元素)获得 w w w后,在测试集上的错误率是多少?(利用0/1判据)

Ein = 0.464;Eout = 0.473。


import numpy as np
import pandas as pd
import math
import scipy.linalg as lin # 该模块包含线性代数的函数
import matplotlib.pyplot as plt# Q3:4种不同的误差衡量和0/1误差
plt.figure(dpi=150)
plt.style.use('science')
z = np.arange(-2, 2, 0.01)err0 = z.copy()
err0[err0 >= 0] = 0
err0[err0 < 0] = 1err1 = 1-z.copy()
err1[err1 < 0] = 0err2 = -z.copy()
err2[err2 < 0] = 0err3 = 1-z.copy()
err3[err3 < 0] = 0
err3 = np.power(err3, 2)err4 = 1/2 * (np.exp(-z))plt.plot(z, err0, label='err0/1')
plt.plot(z, err1, label='err1')
plt.plot(z, err2, label='err2')
plt.plot(z, err3, label='err3')
plt.plot(z, err4, label='err4')plt.legend()
plt.show()
# Q7
u = 0
v = 0
eta = 0.01
for i in range(5):du = math.exp(u) + v*math.exp(u*v) + 2*u-2*v-3dv = 2*math.exp(2*v) + u*math.exp(u*v) - 2*u + 4*v-2u -= eta*duv -= eta*dv
print('u=', np.round(u,decimals=4))
print('v=', np.round(v,decimals=4))
E = math.exp(u)+math.exp(2*v)+math.exp(u*v)+u**2-2*u*v+2*v**2-3*u-2*v
print(np.round(E,decimals=4))
# Q10
u = 0; v = 0
uv = np.array([[0], [0]])for i in range(5):du = math.exp(u) + v*math.exp(u*v) + 2*u - 2*v - 3dv = 2*math.exp(2*v) + u*math.exp(u*v) - 2*u + 4*v-2du2 = math.exp(u) + v**2*math.exp(u*v) + 2dv2 = 4*math.exp(2*v) + u**2*math.exp(u*v) + 4dudv = math.exp(u*v) + v*u*math.exp(u*v) - 2ddE = np.array([[du2, dudv], [dudv, dv2]])dE = np.array([[du], [dv]])uv = uv-lin.inv(ddE).dot(dE) # linalg.inv():矩阵求逆u = uv[0, 0]v = uv[1, 0]
print('u and v: ',uv.T)
E = math.exp(u) + math.exp(2*v) + math.exp(u*v) + u**2 - 2*u*v + 2*v**2 - 3*u -2*v
print('E: ',E)
# 数据生成函数
def generate_data(num):axeX = np.random.uniform(-1, 1, num) # 在[-1,1)内随机采样axeY = np.random.uniform(-1, 1, num)# np.c_:按【列】连接两个矩阵,要求行数相等。np.r_:按【行】连接两个矩阵,要求列数相等;Xtemp = np.c_[axeX, axeY]X = np.c_[np.ones((num, 1)), Xtemp]Ytemp = np.sign(np.power(axeX, 2)+np.power(axeY, 2)-0.6)Ytemp[Ytemp == 0] = -1pos = np.random.permutation(num)Ytemp[pos[0: round(0.1*num)]] *= -1Y = Ytemp.reshape((num, 1))return X, Y
totalerr = 0
for i in range(1000):X, Y = generate_data(1000)theta = lin.pinv(X.T.dot(X)).dot(X.T).dot(Y) # linalg.pinv矩阵伪逆ypred = np.sign(X.dot(theta))err = np.sum(ypred!=Y)/1000totalerr += errprint('Ein: ', totalerr/1000)
# 特征转换函数
def transform(X):row, col = X.shapeXback = np.zeros((row, 6))Xback[:, 0:col] = XXback[:, col] = X[:, 1]*X[:, 2]Xback[:, col+1] = X[:, 1]**2Xback[:, col+2] = X[:, 2]**2return Xback# Q14
totalerr = 0
for i in range(1000):X, Y = generate_data(1000)Xtran = transform(X)theta = lin.pinv(Xtran.T.dot(Xtran)).dot(Xtran.T).dot(Y)Xtest, Ytest = generate_data(1000)Xback = transform(Xtest)ypred = np.sign(Xback.dot(theta))err = np.sum(ypred!=Ytest)/1000totalerr += errprint('theta: ', theta.T)
print('Ein: ', totalerr/1000)
# sigmoid函数
def sigmoid(z):zback = 1/(1+np.exp(-1*z))return zback# Logistic Regression
def logistic_regression(X, Y, eta, numiter, flag=0):row, col = X.shapetheta = np.zeros((col, 1))num = 0for i in range(numiter):if flag == 0:derr = (-1*X*Y).T.dot(sigmoid(-1*X.dot(theta)*Y))/rowelse:if num >= row:num = 0derr = -Y[num, 0]*X[num: num+1, :].T*sigmoid(-1*X[num, :].dot(theta)[0]*Y[num, 0])num += 1theta -= eta*derrreturn theta# 导入数据函数
def load_data(filename):data = pd.read_csv(filename, sep='\s+', header=None)col, row = data.shapeX = np.c_[np.ones((col, 1)), data.iloc[:, 0: row-1]]Y = data.iloc[:, row-1:row].valuesreturn X, Y# 误差计算函数
def mistake(X, Y, theta):yhat = X.dot(theta)yhat[yhat > 0] = 1yhat[yhat <= 0] = -1err = np.sum(yhat != Y)/len(Y)return errX, Y = load_data('hw3_train.dat')
testX, testy = load_data('hw3_test.dat')
# Q18
eta = 0.001; T = 2000; flag = 0
theta = logistic_regression(X, Y, eta, T, flag)
errin = mistake(X, Y, theta)
errout = mistake(testX, testy, theta)
print(f'Ein = {errin};', 'Eout = ', errout)
# Q19
eta = 0.01; T = 2000; flag = 0
theta = logistic_regression(X, Y, eta, T, flag)
errin = mistake(X, Y, theta)
errout = mistake(testX, testy, theta)
print(f'Ein = {errin};', 'Eout = ', errout)
# Q20
eta = 0.001; T = 2000; flag = 1
theta = logistic_regression(X, Y, eta, T, flag)
errin = mistake(X, Y, theta)
errout = mistake(testX, testy, theta)
print(f'Ein = {errin};', 'Eout = ', errout)

参考:
机器学习基石作业3:https://github.com/AceCoooool/MLF-MLT

机器学习基石作业03:二阶泰勒展开,特征转换,逻辑回归相关推荐

  1. 机器学习基石-作业三-第2题分析以及通过H证明EIN的讨论

    题目: 这是机器学习基石作业三种的第二小题,额,在网上看了很多解答(解答也不多)感觉都没有说清楚为什么,所以励志清楚滴解决一下这个问题,经过努力,自认为得到了详细的解答,内容如下: (一)解决选项(e ...

  2. Interview:算法岗位面试—10.24下午—上海某软件公司(机器学习,上市)电话面试—考察SVM、逻辑回归、降低过拟合、卷积网络基础等

    Interview:算法岗位面试-10.24下午-上海某软件公司(机器学习,上市)电话面试-考察SVM.逻辑回归.降低过拟合.卷积网络基础等 导读:当时电话来的非常快,我刚做完一家公司的笔试,接着来了 ...

  3. 机器学习算法——以癌症分类为例子介绍 逻辑回归(sklearn实现)

    目录 1.逻辑回归介绍 1.1.逻辑回归的应用场景 1.2.逻辑回归的原理 1.2.1 输入: 1.2.2 激活函数 1.3.损失以及优化 1.3.1 损失 1.3.2 优化 总结: 2.逻辑回归ap ...

  4. 《机器学习实战》学习总结(四)逻辑回归原理

    概述 逻辑回归要求数据类型为数值型. 逻辑回归与线性回归的区别: 逻辑回归的迭代过程就是为每个特征寻找一个系数,这些系数也叫做回归系数,如果直接计算∑θixi那么就是线性回归,要转化为逻辑回归,则需要 ...

  5. 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答

    今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到很多困难,当我在网上寻找答案时却找不到,而林老 ...

  6. 机器学习基石-作业四-代码部分

    这次的作业内容主要就是对带正则化项的线性规划的闭式解做各种操作:选择.把数据分成训练集和交叉验证.k-折交叉验证.完全套公式就可以了,这里唯一的一个问题就是偏移量参不参加正则化: 在林老师的课程中,最 ...

  7. 吴恩达机器学习作业(4):正则化逻辑回归

    目录 1)数据可视化 2)创建多项式特征 3)正则化成本函数 4)正则化梯度下降 4)准确度 5)Scikit-learn实现 正则化是成本函数中的一个术语,它使算法更倾向于"更简单&quo ...

  8. 机器学习(一)——线性回归、分类与逻辑回归

    http://antkillerfarm.github.io/ 序 这是根据Andrew Ng的<机器学习讲义>,编写的系列blog. http://www.cnblogs.com/jer ...

  9. 春节充电 | 文科生都能看懂的机器学习教程:梯度下降、线性回归、逻辑回归(附动图解释)...

    来源:新智元 本文约4200字,建议阅读10+分钟. 本文浅显易懂的方式讲解机器学习,力求让没有理科背景的读者都能看懂. [ 导读 ]虽然在Coursera.MIT.UC伯克利上有很多机器学习的课程, ...

最新文章

  1. CIKM2021 知识图谱、推荐系统相关论文
  2. 华为手机获取状态栏高度是错误的_华为后置指纹这么多功能,你不会还以为只能解锁和支付吧...
  3. 分布式事务 常见方法
  4. spark用scala读取hive表数据(不同版本区别)
  5. 学霸真的比学渣更讨女孩子欢心吗?
  6. java soot_正确执行3个地址代码的SOOT API
  7. 在Linux中创建静态库.a和动态库.so
  8. Unity面试题精选(1)
  9. python中的fft带通滤波器
  10. 物联网数据分发利器DPS
  11. 计算机五笔教案ppt,计算机应用基础课件(五笔字型课件).ppt
  12. 软件等于计算机程序加数据加什么,南航计算机软件数据结构上机实践报告
  13. screentogif能录制声音吗_一款免费且强大的gif动画录制工具,再也不愁录动画!...
  14. win10无法打开匿名级安全令牌_无法打开匿名级安全令牌
  15. 怎么实现微信多公众号管理?
  16. 判断三维空间两线段是否相交(附代码)
  17. Java实现利用在线的API对IP地址进行解析(内部代码分享)
  18. 贪心法和动态规划法的区别
  19. 陕西广电 HGU B2 光猫获取超级密码 改桥接模式 提升网速
  20. 电梯卡数据分析修改延期梯控

热门文章

  1. java和javascript区别_java和javascript之间有什么区别
  2. 属性动画实现旋转入场效果
  3. 众多番红花高清图片素材一键即可获取
  4. 几款免费在线甘特图工具
  5. 找回光猫超级管理员密码(烽火HG220G-U)
  6. 蓝桥杯矩阵翻转java_矩阵翻转硬币 蓝桥杯
  7. 浏览器缓存的简单介绍和实践
  8. 东方青苍的头饰有多贵?目测人均可入手....
  9. C++小游戏(第一弹)
  10. 请求tapd的时出现timeout的处理方案