机器学习算法基础--批量随机梯度下降法回归法

目录

1.算法流程简介

2.算法核心代码

3.算法效果展示

1.算法流程简介

"""
本节算法是梯度下降方法的小批量随机梯度下降法,算法的思路是从数中随机取出n个数据进行数梯度下降,再进行相应的迭代,
最后能够获得一个效果不错的回归方程/最优解.
算法的公式就不多说了,其实和普通的递归下降方法没有什么区别,公式也差不多,只有一点点改变和需要注意的地方.
"""
"""
1.读取数据集并且化为对应的xy数组
2.设置梯度下降的一些常见的参数,唯一需要额外设置的就是取多少个小批量样本
3.设置随机函数,进行随机梯度下降,不断地更新修正theta值
4.迭代到设定格式后,得到最终结果
5.绘制每个迭代值的回归效果图
"""
"""
PS:说实话,小批量随机递归下降还是比较不稳定的,如果真正想要获得比较精确的解,
我们还是需要将迭代次数尽可能多一些同时随机取出的数据点也要多一点,这样才能获得比较精确一些的解
"""

2.算法核心代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 样本数据
path="C:\\Users\\Zeng Zhong Yan\\Desktop\\py.vs\\.vscode\\数学建模\\梯度下降法材料包\\LinearRegression.xlsx"
# 读取excel文件
dataframe = pd.read_excel(path,  header=0)
data=np.array(dataframe)
X=data[:,0].reshape(-1,1)
y=data[:,1]
X_bias = np.insert(X, 0, 1, axis=1)
learning_rate = 0.01
batch_size = 128  # 小批量大小
theta = np.ones(X_bias.shape[1])  # 包括截距和特征系数
#小批量递归下降
num1 =[0,2,10,50,100,500,1000]
global num_iterations
 # 包括截距和特征系数
plt.figure(figsize=(24,8))
plt.subplot(2,4,1)
plt.scatter(X,y,color='blue',s=1)
fig1=plt.plot(X,y,'.',color='blue',label='Iris Data')
plt.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0.01, 0.85))
for i in range(len(num1)):
    num_iterations=num1[i]
    theta = np.zeros(X_bias.shape[1]) 
    X_bias = np.insert(X, 0, 1, axis=1)
    for _ in range(num_iterations):
    # 随机选择一个小批量样本
      batch_indices = np.random.choice(len(X_bias), batch_size, replace=False)
      X_batch = X_bias[batch_indices]
      y_batch = y[batch_indices]    
      gradient = X_batch.T.dot(X_batch.dot(theta) - y_batch) / len(X_batch)
      theta -= learning_rate * gradient
    plt.subplot(2,4,i+2)
    plt.scatter(X,y,color='blue',s=1)
    Y=theta[1]*X+theta[0]
    plt.plot(X,Y,color='r')
    plt.xlabel("X")
    plt.ylabel("Y")
    fig3=plt.plot(X,Y,'white',label="iterations={}".format(num_iterations))
    fig1=plt.plot(X,y,'.',color='blue',label='Iris Data')
    fig2=plt.plot(X,Y,'r',label='Regression Curve')
    plt.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0.01, 0.75))
plt.savefig('C:\\Users\\Zeng Zhong Yan\\Desktop\\py.vs\\.vscode\\数学建模\\梯度下降法材料包\\梯度下降法效果图.png', dpi=500, bbox_inches='tight')
plt.show()

3.算法效果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔济沧海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值