梯度下降:一种最优化算法,就是沿着函数的梯度方向寻找函数的最小值
线性回归模型:
最终的目标就是利用 (梯度下降法) 求出使 (误差函数) 最小的线性函数的系数值
梯度下降算法有两种
1.批量梯度下降(Batch gradient descent)
2.随机梯度下降(Stochastic gradient descent)
练习题目
import numpy as np
def stochastic_gradient_descent(x, y, theta, alpha,m,max_iter):
"""随机梯度下降法,每一次梯度下降只使用一个样本。
:param x: 训练集种的自变量
:param y: 训练集种的因变量
:param theta: 待求的权值
:param alpha: 学习速率
:param m: 样本总数
:param max_iter: 最大迭代次数
"""
deviation = 1
iter = 0
flag = 0
while True:
for i in range(m): #循环取训练集中的一个
deviation = 0
h = theta[0] * x[i][0] + theta[1] * x[i][1]
theta[0] = theta[0] - alpha * (y[i] - h)*x[i][0]
theta[1] = theta[1] - alpha * (y[i] - h)*x[i][1]
iter = iter + 1
#计算误差
for i in range(m):
deviation = deviation + (y[i] - (theta[0] * x[i][0] + theta[1] * x[i][1])) ** 2
if deviation <alpha or iter >max_iter:
flag = 1
break
if flag == 1 :
break
return theta, iter
x =np.array([[1,2],[2,5],[5,1],[2,4]])
y =np.array([19,26,19,20])
theta=[1,1]
ALPHA=0.001
MAX_ITER=5000
result,iters=stochastic_gradient_descent(x,y,theta,ALPHA,4,MAX_ITER)
print(result,iters)