机器学习算法:线性回归 - MBGD小批量梯度下降法 - 手写代码

线性回归模型表达式:
在这里插入图片描述

  • 其中theta.shape=(1,m),m=数据的特征数量。
  • 通过直接求导,可以得到theta的最优解,但是会遇到矩阵求逆的问题,而并不是所有的矩阵都可以求逆。
  • 由于矩阵求逆的不确定性,因而想到了用梯度下降法来逐步逼近最优解,梯度下降法又分为BGD、SGD、MBGD。
  • BGD每次更新需要用全部数据,计算量大且耗时;SGD每次更新需要用一条数据,计算量小速度快,但是可能在最小值附近波动,不收敛;MBGD每次更新用一部分数据(batch_size),计算速度并不会比SGD慢太多,每次使用一个batch_size可以大大减小收敛所需要的迭代次数。
  • batch_size根据GPU来选择,一般是32的倍数。
#coding=utf-8
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model

np.random.seed(4)

class LR:
    def __init__(self,iter_n=30,learn_rate=0.001,batch_size=2):
        self.iter_n = iter_n
        self.learn_rate = learn_rate
        self.batch_size = batch_size
    
    #线性回归算法模型:theta*x
    def model(self,x,theta):
        return np.dot(x,theta)
    
    #损失函数(目标函数):选用MSE均方误差
    def mse(self,y,y_hat):
        return sum((y-y_hat)**2)/len(y)
    
    #计算梯度
    def cal_gred(self,y,y_hat,x):
        #初始化梯度
        gred = np.zeros((x.shape[-1],1))
        #计算每个theta的梯度
        for index in range(len(gred)):
   
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值