监督学习应用(LinearRegression)与梯度下降
变量定义
m = 训练数据数目
x = 输入变量(特征) features
y = 输出变量(目标) target
(x, y) 训练数据
ith trainning example= {x(i),y(i)} 第i份训练数据
算法流程
graph TD
A[Trainning Set]-->B[Learning Algorithm]
B-->C[H, hypothesis 目标函数]
subgraph
D[X_test]-->C
C-->E[Y_test]
end
Linear Regression
假设x0=1, 则:
线性回归的假设函数为:
{h(x)=∑ni=0θixi=ΘTXn=features 特征数目
于是,我们的目标就是使得:
∑i=1m(hθ(x(i))−y(i))2
最小
为了后期的计算方便,我们的目标修改为:
J(θ)=12∑i=1m(hθ(x(i))−y(i))2
search Algorithm使得J(θ)最小
- 假设,初始化Θ=0⃗
- 保持改变Θ,直到使得J(θ)最小
那么,如何改变Θ ??
梯度下降算法
为了使得J(θ)最小,我们求其偏导,则可以以此确定每一个参数的前进方向。
Θi:=Θi−αddΘiJ(Θi)
简单的推导:
dJ(Θi)dΘidJ(Θi)dΘi=2⋅12∑i=1m(hθ(x(i))−y(i))d∑mi=1(hθ(x(i))−y(i))dΘi∵h(x)=∑i=0nθixi=ΘTX,y is real∴d∑mi=1(hθ(x(i))−y(i))dΘi=xi=∑i=1m(hθ(x(i)−y(i)))xi
从而:
Θi:=Θi−α∑mi=1(hθ(x(i)−y(i)))xi
其中
α是控制“步长”,控制前进的幅度。
如何确定J(θ)已经最小?
当J(θ)的值变化不大或者足够小的时候,我们可以认为他已经收敛,那么算法停止。
随机梯度下降算法(增量梯度下降算法)
当m很大的时候,梯度下降算法将消耗大量的时间和内存。而增量梯度下降算法则是可以节约大量的时间。
Repeat}{for j=1 to m{for all i Θi:=Θi−α(hθ(x(j))−y(j))x(j)}
随机梯度算法通常得到一个接近于全局最优解的可行解,但是一般不会差距太大。
一种更加广泛的表达方式
令:
ΔθJ=⎡⎣⎢⎢⎢dJdθ0⋮dJdθn⎤⎦⎥⎥⎥
则:
{Θ:=Θ−αΔθJ Θ∈Rn+1 ΔθJ∈Rn+1
设函数f是一个m×n空间到一维空间的映射:
f:Rm×n↦R ,则f(A),A∈Rm×n
ΔAf(A)=⎡⎣⎢⎢⎢⎢dfdA11⋮dfdAm1⋯⋱⋯dfdA1n⋮dfdAmn⎤⎦⎥⎥⎥⎥
tr(A)=∑ni=1Aii ,也写作:trA
Facts:trAB=trBAtrABC=trCAB=trBCAf(A)=trABΔAtrAB=BTtrA=trATΔAtrABATC=CAB+CTABT
由以上的定理,我们可以进行以下的推导:
X⋅Θ=⎡⎣⎢⎢(x(1))T⋮(x(n))T⎤⎦⎥⎥Θ=⎡⎣⎢⎢⎢x(1)TΘ⋮x(n)TΘ⎤⎦⎥⎥⎥=⎡⎣⎢⎢hθ(x(1))⋮hθ(x(m))⎤⎦⎥⎥
同理,
y⃗ =⎡⎣⎢⎢(y(1))⋮(y(n))⎤⎦⎥⎥$,则:$X⋅Θ−y⃗ =⎡⎣⎢⎢h(x(1)−y(1))⋮h(x(m)−y(m))⎤⎦⎥⎥
矩阵转置再相乘:
12(X⋅Θ−y⃗ )T(X⋅Θ−y⃗ )=12∑mi=1(h(x(i))−y(i))2
于是:
ΔθJ(θ)=Δθ12(XΘ−y⃗ )T(XΘ−y⃗ )=12Δθ(ΘTXTXΘ−ΘTXTy⃗ −y⃗ TXΘ+y⃗ Ty⃗ )=12Δθtr(ΘTXTXΘ−ΘTXTy⃗ −y⃗ TXΘ+y⃗ Ty⃗ )=12Δθ(trΘTXTXΘ−2try⃗ TXΘ)=12(XTXΘ+XTXΘ−XTy⃗ )=XTXΘ−XTy⃗
因为目标是使得
Jθ最小,则,我们令其最小为0:
XTXΘΘ=XTy⃗ =XTy⃗ XTX
参考自【斯坦福】机器学习(Machine Learning)- 吴恩达(Andrew Ng)