博客园相关内容值得一看。线性回归的模型是
f
(
x
i
)
=
w
T
x
i
+
b
f
(
x
i
)
∼
y
i
f(x_i)=w^Tx_i+b\quad f(x_i)\sim y_i
f(xi)=wTxi+bf(xi)∼yi,其中
x
i
x_i
xi是
n
×
1
n\times 1
n×1的向量(即有
n
n
n个特征),
w
w
w是
n
×
1
n\times 1
n×1的向量。若有
m
m
m个数据,形成
X
m
×
n
X_{m\times n}
Xm×n的数据集和
y
m
×
1
y_{m\times1}
ym×1的目标,
X
X
X的最后加一列全
1
1
1,
w
w
w把
b
b
b吸收,就可以得到简化的
f
(
X
)
=
X
m
×
(
n
+
1
)
w
(
n
+
1
)
×
1
f(X)=X_{m\times{(n+1)}}w_{(n+1)\times1}
f(X)=Xm×(n+1)w(n+1)×1。求
l
o
s
s
loss
loss均方误差是
l
=
(
y
−
X
w
)
T
(
y
−
X
w
)
l=(y-Xw)^T(y-Xw)
l=(y−Xw)T(y−Xw),对
w
w
w求偏导得到
2
X
T
(
X
w
−
y
)
2X^T(Xw-y)
2XT(Xw−y),令
X
T
(
X
w
−
y
)
=
0
X^T(Xw-y)=0
XT(Xw−y)=0得到
w
=
(
X
T
X
)
−
1
X
T
y
w=(X^TX)^{-1}X^Ty
w=(XTX)−1XTy
标量对向量或矩阵求偏导,得到的结果是分母布局,即对谁求偏导,结果的 shape 就和谁一样
向量对向量求偏导, y m × 1 y_{m\times 1} ym×1对 x n × 1 x_{n\times1} xn×1求偏导, ∂ y ∂ x \frac{\partial y}{\partial x} ∂x∂y 的结果维度是 m × n m\times n m×n
应用链式求导法则之前先看维度,转置调整到维度匹配再计算。此题例, ∂ l ∂ w \frac{\partial{l}}{\partial{w}} ∂w∂l 的结果是 ( n + 1 ) × 1 (n+1)\times1 (n+1)×1,令 z = y − X w z=y-Xw z=y−Xw, ∂ z ∂ w \frac{\partial{z}}{\partial{w}} ∂w∂z 的结果是 m × ( n + 1 ) m\times(n+1) m×(n+1), ∂ l ∂ z \frac{\partial{l}}{\partial{z}} ∂z∂l 的结果是 m × 1 m\times 1 m×1,要使用 ∂ l ∂ w = ∂ l ∂ z ∂ z ∂ w \frac{\partial{l}}{\partial{w}}=\frac{\partial{l}}{\partial{z}}\frac{\partial{z}}{\partial{w}} ∂w∂l=∂z∂l∂w∂z的链式法则,先调整到合适的 ∂ l ∂ w = ( ∂ z ∂ w ) T ∂ l ∂ z \frac{\partial{l}}{\partial{w}}=(\frac{\partial{z}}{\partial{w}})^T\frac{\partial{l}}{\partial{z}} ∂w∂l=(∂w∂z)T∂z∂l 再计算。 z = y − X w z=y-Xw z=y−Xw对 w w w求偏导,结果肯定是 − X -X −X或 − X -X −X的转置,根据布局要求应该是 − X -X −X; l = z T z l=z^Tz l=zTz对 z z z求导是 2 z 2z 2z或它的转置,布局要求确定是 2 z 2z 2z。因此 l l l对 w w w求偏导结果是 − 2 X T z = 2 X T ( X w − y ) -2X^Tz=2X^T(Xw-y) −2XTz=2XT(Xw−y)
实际数据大多数情况下 X T X X^TX XTX都不可逆,会产生多种多个 w w w的最优解,常见的做法是引入正则化项解决
xMat = mat(xArr); yMat = mat(yArr).T
xTx = xMat.T*xMat
if linalg.det(xTx) == 0.0:
print "This matrix is singular, cannot do inverse"
return
ws = xTx.I * (xMat.T*yMat)
return ws
随机变量 X X X和 Y Y Y的相关系数 ρ \rho ρ(皮尔逊相关系数)是 ρ = c o v ( X , Y ) ( v a r ( X ) ( v a r ( Y ) ) ) = c o v ( X , Y ) σ X σ Y \rho =\frac{cov(X,Y)}{\sqrt(var(X)(var(Y)))}=\frac{cov(X,Y)}{\sigma_X\sigma_Y} ρ=(var(X)(var(Y)))cov(X,Y)=σXσYcov(X,Y),只衡量线性关系,它是对协方差的标准化,可以用来衡量回归的优劣
期望的线性: E ( a g 1 ( X ) + b g 2 ( X ) + c ) = a E g 1 ( X ) + b E g 2 ( X ) + c E(ag_1(X)+bg_2(X)+c)=aEg_1(X)+bEg_2(X)+c E(ag1(X)+bg2(X)+c)=aEg1(X)+bEg2(X)+c,且 E [ X + Y ] = E [ X ] + E [ Y ] E[X+Y]=E[X]+E[Y] E[X+Y]=E[X]+E[Y],不要求 X X X和 Y Y Y独立
方差是 X X X的二次中心矩, V a r ( X ) = E [ ( X − μ X ) 2 ] = E [ X 2 ] − ( E [ X ] ) 2 Var(X)=E[(X-\mu_X)^2]=E[X^2]-(E[X])^2 Var(X)=E[(X−μX)2]=E[X2]−(E[X])2, V a r ( a X + b ) = a 2 V a r ( X ) Var(aX+b)=a^2Var(X) Var(aX+b)=a2Var(X)
C O V ( X , Y ) = E [ ( X − μ X ) ( Y − μ Y ) ] = E [ X Y − μ Y X − μ X Y + μ X μ Y ] = E [ X Y ] − μ Y E [ X ] − μ X E [ Y ] + μ X μ Y = E [ X Y ] − μ X μ Y COV(X,Y)=E[(X-\mu_X)(Y-\mu_Y)]=E[XY-\mu_YX-\mu_XY+\mu_X\mu_Y]=E[XY]-\mu_YE[X]-\mu_XE[Y]+\mu_X\mu_Y=E[XY]-\mu_X\mu_Y COV(X,Y)=E[(X−μX)(Y−μY)]=E[XY−μYX−μXY+μXμY]=E[XY]−μYE[X]−μXE[Y]+μXμY=E[XY]−μXμY
corrcoef(yHat.T,yMat)
岭回归在 X T X X^TX XTX的基础上加 λ I \lambda I λI使矩阵矩阵非奇异,进而能对 X T X + λ I X^TX+\lambda I XTX+λI求逆(第八点),它也是一种正则化方法,从贝叶斯优化角度看,相当于加入了高斯先验,用最大后验估计来估计参数,lasso回归加入了不可导项,需要使用特殊方法优化,比如前向逐步回归尝试对权重加加减减,如果 l o s s loss loss减少,就应用这种变化,也可以用其他方式优化(也介绍了岭回归的梯度下降优化,很值得一看)
for i in range(numIt):
print ws.T
lowestError = inf;
for j in range(n):
for sign in [-1,1]:
wsTest = ws.copy()
wsTest[j] += eps*sign
yTest = xMat*wsTest
rssE = rssError(yMat.A,yTest.A)
if rssE < lowestError:
lowestError = rssE
wsMax = wsTest
ws = wsMax.copy()
实际引入岭回归和lasso回归,是以偏差的代价换取低方差,欠拟合时偏差主导误差,过拟合时方差主导误差,被称为偏差-方差窘境