python|随机梯度下降和Adagard python 手推公式代码讲解以线性回归为例
梯度下降算法两个步骤:得到梯度下降的目标函数,得到梯度表达式
利用sgd对线性回归进行梯度下降的目标函数为:
文章图片
利用Adagard对线性回归进行梯度下降的目标函数为:
文章图片
而后求梯度即可
1.创建数据
import numpy as np
x=np.random.randn(1000,2)
x=np.concatenate((x,np.ones([1000, 1])),axis=1)#增加一列常数项
r=np.random.randn(1000,1)
y=0.5*x[:,0]+3*x[:,1]+r[:,0]/10000+1.5
y=y.reshape(1000,1)
2.sgd实现:每次随机选取一个数据进行梯度下降
def sgd_compute_max(x,y,alpha):
dim=x.shape[1]
w = np.zeros([1, dim])
for i in range(1000):
index=np.random.randint(0,len(y[:,0])-1)
gradient=np.dot(np.array(x[index,:],ndmin =2).transpose(),np.dot(x[index,:],w.transpose())-y[index,0])
w-=alpha*gradient
return w
【python|随机梯度下降和Adagard python 手推公式代码讲解以线性回归为例】3.Adagard实现:每次将全部样本进行梯度下降,且learning_rate需除以梯度平方的累加开方
def adagrad_compute(x,y,alpha):
alpha=0.01
dim=x.shape[1]
w = np.zeros([dim,1 ])
n=len(y[:,0])
eps=0.00001#避免分子为0
adagrad = np.zeros([dim, 1])
for i in range(1000):
gradient=np.dot(x.transpose(), np.dot(x, w) - y)
gradient2=gradient*gradient
adagrad+=gradient2
w-=alpha*n*gradient/np.sqrt(adagrad + eps)
return w
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- Python数据分析(一)(Matplotlib使用)