线性回归:梯度下降法优化

一、线性回归

  关于线性回归的详细介绍可以参见我的上一篇博文《线性回归:最小二乘法优化》。在《线性回归:最小二乘法优化》中已经说明了线性回归模型建立的关键在于求解:
( w ∗ , b ∗ ) = arg min ⁡ ∑ i = 1 m ( f ( x i ) − y i ) 2 (w^*, b^*)=\argmin\sum^{m}_{i=1}{{(f(x_i)-y_i)^2}} (w,b)=argmini=1m(f(xi)yi)2
  这里再介绍另一种求解算法:梯度下降法。

二、梯度下降法的数学原理

  假设有以下问题:
w = arg min ⁡ f ( w ) w=\argmin f(w) w=argminf(w)
  通过泰勒一阶展开则有:
f ( w ) = f ( w 0 ) + ( w − w 0 ) ∇ f ( w 0 ) f(w)=f(w_0)+(w-w_0)∇f(w_0) f(w)=f(w0)+(ww0)f(w0)
  图示如下:
在这里插入图片描述
  这里的 w − w 0 w-w_0 ww0表示了移动的步长和方向,那么可以有 w − w 0 = η γ w-w_0=\eta\gamma ww0=ηγ η \eta η为实数,表示移动的步长, γ \gamma γ为一个单位向量,表示步长移动的方向。 f ( w 0 ) + ( w − w 0 ) ∇ f ( w 0 ) f(w_0)+(w-w_0)∇f(w_0) f(w0)+(ww0)f(w0)则是 f ( w ) f(w) f(w) w w w处的邻近估计,此处要求 η \eta η较小,否则将导致估计的精确度降低。
  梯度下降算法的目的是让优化函数 f ( w ) f(w) f(w)尽快到达全局最小值,所以便有了第一个条件:
c o n d i t i o n 1 : f ( w ) − f ( w 0 ) = η γ ∇ f ( w 0 ) ≤ 0 condition1:f(w)-f(w_0)=\eta\gamma∇f(w_0)≤0 condition1:f(w)f(w0)=ηγf(w0)0
  由于 η \eta η是一个大于0的常数,所以可以暂不考虑。那么就需要满足 η γ ∇ f ( w 0 ) ≤ 0 \eta\gamma∇f(w_0)≤0 ηγf(w0)0并且尽可能小。又有:
γ ∇ f ( w 0 ) = ∣ γ ∣ ∣ ∇ f ( w 0 ) ∣ cos ⁡ α \gamma∇f(w_0)=|\gamma||∇f(w_0)|\cos \alpha γf(w0)=γf(w0)cosα
所以想要使 η γ ∇ f ( w 0 ) ≤ 0 \eta\gamma∇f(w_0)≤0 ηγf(w0)0并且尽可能小则需要满足条件:
c o n d i t i o n 2 : cos ⁡ α = − 1 condition2:\cos \alpha=-1 condition2:cosα=1
  换句话说,也就是要求单位向量 γ \gamma γ ∇ f ( w 0 ) ∇f(w_0) f(w0)方向完全相反,所以便可以得到以下结论:
c o n d i t i o n 3 : γ = − ∇ f ( w 0 ) ∣ ∇ f ( w 0 ) ∣ condition3:\gamma=\frac{-∇f(w_0)}{|∇f(w_0)|} condition3:γ=f(w0)f(w0)
  将 c o n d i t i o n 3 condition3 condition3带入 w − w 0 = η γ w-w_0=\eta\gamma ww0=ηγ,则有:
c o n d i t i o n 4 : w − w 0 = η − ∇ f ( w 0 ) ∣ ∇ f ( w 0 ) ∣ condition4:w-w_0=\eta\frac{-∇f(w_0)}{|∇f(w_0)|} condition4:ww0=ηf(w0)f(w0)
  由于 η \eta η ∣ ∇ f ( w 0 ) ∣ |∇f(w_0)| f(w0)都是大于0的实数,所以可以合并为新的 η ∗ = η ∣ ∇ f ( w 0 ) ∣ \eta^*=\frac{\eta}{|∇f(w_0)|} η=f(w0)η,再对等式进行移项便可以得到:
c o n d i t i o n 5 : w = w 0 − η ∇ f ( w 0 ) condition5:w=w_0-\eta∇f(w_0) condition5:w=w0ηf(w0)
   c o n d i t i o n 5 condition5 condition5便是梯度下降算法中 f ( w ) f(w) f(w)的参数 w w w的更新公式。同时这也解释了为什么需要以梯度的反方向来更新权重。

三、梯度下降法优化

  下面就用梯度下降算法来对线性回归模型进行优化。这里将线性回归模型的代价函数E写为如下形式(方便运算):
E = 1 2 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E=\frac{1}{2m}\sum^{m}_{i=1}{(f(x_i)-y_i)^2} E=2m1i=1m(f(xi)yi)2
对其求导:
∂ E ∂ w = 1 m ∑ i = 1 m ( w x i − y i ) ∂ ( w x i − y i ) ∂ w = 1 m ∑ i = 1 m ( w x i − y i ) x i \frac{\partial E}{\partial w}=\frac{1}{m}\sum^{m}_{i=1}{(wx_i-y_i)\frac{\partial (wx_i-y_i)}{\partial w}}=\frac{1}{m}\sum^{m}_{i=1}{(wx_i-y_i)x_i} wE=m1i=1m(wxiyi)w(wxiyi)=m1i=1m(wxiyi)xi
  由前面的 c o n d i t i o n 5 condition5 condition5可以得到权重的更新公式: w ∗ = w + Δ w w^*=w+\Delta w w=w+Δw,此处的 Δ w = − η ∇ f ( w 0 ) \Delta w=-\eta∇f(w_0) Δw=ηf(w0)。所以最终可以得到权重的更新公式为:
w ∗ = w + η m ∑ i = 1 m ( y i − w x i ) x i w^*=w+\frac{\eta}{m}\sum^{m}_{i=1}{(y_i-wx_i)x_i} w=w+mηi=1m(yiwxi)xi

四、Python实现

  由之前推导出的更新公式可以实现出以下拟合算法:

def _gradient_descent(self, X, y):
	for i in range(max_iter):
		delta = y - self._linear_func(X)
		self.W[0] += self.eta * sum(delta) / X.shape[0] # 第一列全部为1
		self.W[1:] += self.eta * (delta @ X) / X.shape[0]

  导入波士顿数据集进行测试:

if __name__ == "__main__":
    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import MinMaxScaler
    boston = datasets.load_boston()
    X = boston.data
    y = boston.target
    scaler = MinMaxScaler().fit(X)
    X = scaler.transform(X)
    X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, test_size=0.3)
    lr = LinearRegression().fit(X_train, y_train)
    y_pred = lr.predict(X_test)
    from sklearn.metrics import mean_squared_error
    print(mean_squared_error(y_test, y_pred))
    plt.figure()
    plt.plot(range(len(y_test)), y_test)
    plt.plot(range(len(y_pred)), y_pred)
    plt.legend(["test", "pred"])
    plt.show()

均方误差:
均方误差
代价曲线:
代价曲线
拟合曲线:
拟合曲线

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值