线性回归linear regression梯度下降算法的python代码实现

#导入相关包
import pandas as pd
import numpy as np
#定义梯度下降函数,并传入x,y,迭代次数n_iterations,惩罚度alpha和学习率learning_rate
def gd(x,y,n_iterations,alpha,learning_rate):
	x = np.insert(x,0,1,axis=1)  #在x中添加偏置项,并将其全部设为1
	W = np.random.randn(x.shape[1])   #初始化权重项
	#进行迭代
	for i in range(n_iterations):
		y_pred = np.dot(x,W)
		error = y_pred-y
		#定义损失函数并加入L2正则化惩罚
		loss = np.mean(0.5*(error**2) + alpha * 0.5 * np.dot(W.T,W)
		print("Iteration{0} | loss is {1}".format(i,loss))
		#求解梯度
		grad = np.dot(x.T,error) + alpha * W
		#更新权重
		W = W - learning_rate * grad
	return W

以上就是线性回归梯度下降算法的python代码实现。
根据我们前面文章的推导过程,可能有一点容易迷惑,按照我们推导出损失函数的梯度为:
Δ = α ( θ x y ) x \Delta=\alpha(\theta x-y)x
而在代码中,我们在计算梯度的时候却加上了一项:alpha*W,这是因为我们在损失函数中加入了L2正则化惩罚,在计算梯度时,也要对正则化惩罚项进行梯度求解,其实也就是岭回归。加入L1正则化惩罚就是lasso回归,同时加入L1和L2正则化惩罚项就是Elastic Net,正则化惩罚项的主要作用是为了避免数据过拟合,具体以后再说。

发布了20 篇原创文章 · 获赞 10 · 访问量 1452

猜你喜欢

转载自blog.csdn.net/Jerry_Chang31/article/details/103763093