线性回归的全批次、MiniBatch以及随机梯度下降方法
线性回归
线性回归是机器学习中最简单的一个方法,关于详细的公式推导网上很多,我就不详细展开,可
以在周志华老师的西瓜书上找到详尽的推理。对于线性回归的求逆的方法也不再次做介绍,有可
能以后会搞一搞,但在第一篇博客中就不做介绍。本篇就记录下本人对全批次梯度下降方法、
MiniBatch梯度下降方法以及随机梯度下降方法的代码实现。仅作为记录!
关于理论性的推导懒得再手写了,有个老哥写的真是不错,几乎把西瓜书上的搬了下来,在这边附个链接
https://www.cnblogs.com/geo-will/p/10468253.html
全批次梯度下降方法
把所有训练样本都放入进行训练
MiniBatch梯度下降方法
随机生成一个样本list,打乱list,用一个MiniBatch的样本数进行训练,计算损失,每一次循环一整个样本容量,但是不重复。
随机梯度下降方法
每次从样本中抽出随机的一个进行训练,提高收敛速度。
年轻人要讲码德,上代码
import matplotlib.pyplot as plt
import numpy as np
import random
class LinearRegressionClass(object):
def __init__(self, X, Y, learningRate, loopNum):
# X为输入的矩阵,一行代表一份数据,行数代表样本的数量,列数代表样本的维数
# Y为对应的结果值
# learningRate表示学习率
# loopNum表示训练的次数
self.dataX = X
self.dataY = Y
self.learningRate = learningRate
self.loopNum = loopNum
self.y = np.array([self.dataY]).T
self.X = np.column_stack((X, np.repeat(1, X.shape[0]))) # 扩充矩阵一列全1,变成广义矩阵,作用是与偏置项进行乘积
self.parameter = np.array([np.ones(self.X.shape[1])]).T # 最后一位为偏置项
def Overall_Linear_Regression(self):
for i in range(self.loopNum):
# 迭代训练
predict_y = np.dot(self.X, self.parameter)
error_y = pr