简单回归问题实战

数据表:链接: https://pan.baidu.com/s/1sSz7F_yf_JeumXcP4EjE5g?pwd=753f 提取码: 753f

核心流程:

python 复制代码
import numpy as np
# 计算误差函数 points是数据集中数据的位置
def compute_error_for_line_given_points(b,w,points):
    totalError=0
    for i in range(0,len(points)):
        x=points[i,0]
        y=points[i,1]
        totalError+=(y-(w*x+b))**2          # 公式
    return totalError/float(len(points))    # 均方误差

# 梯度下降的参数更新
def step_gradient(b_current,w_current,points,learningRate):
    b_gradient=0
    w_gradient=0
    N=float(len(points))
    for i in range(0,len(points)):
        x=points[i,0]
        y=points[i,1]
        b_gradient+=(2*(w_current*x+b_current-y))/N     # loss函数对b求导  学习率的公式!
        w_gradient+=(2*(w_current*x+b_current-y)*x)/N   # loss函数对w求导
    new_b=b_current-learningRate*b_gradient
    new_w=w_current-learningRate*w_gradient
    return [new_b,new_w]

def gradient_descent_runner(points,starting_b,starting_w,learing_rate,num_iterations):
    b=starting_b
    w=starting_w

    min_error = float('inf')  # 初始化为正无穷大
    best_b = b
    best_w = w

    for i in range(num_iterations):
        b,w=step_gradient(b,w,np.array(points),learing_rate)
        error = compute_error_for_line_given_points(b, w, points)

        # 如果当前误差小于之前记录的最小误差,则更新最小误差和最佳参数
        if error < min_error:
            min_error = error
            best_b = b
            best_w = w
    return [b,w,best_b,best_w]

def run():
    points=np.genfromtxt("E:/first/project/resource/pytorch/simple-regression/data.csv",delimiter=",")
    learning_rate=0.0001
    initial_b=0
    initial_w=0
    num_iterations=1000
    print("Starting gradient descent at b={0},w={1},error={2}".format(initial_b,initial_w,compute_error_for_line_given_points(initial_b,initial_w,points)))
    [b,w,best_b,best_w]=gradient_descent_runner(points,initial_b,initial_w,learning_rate,num_iterations)
    print("After {0} interations b={1},w={2},error={3}".format(num_iterations,b,w,compute_error_for_line_given_points(b,w,points)))
    print("After {0} interations best_b={1},best_w={2},error={3}".format(num_iterations,best_b,best_w,compute_error_for_line_given_points(best_b,best_w,points)))
run()

当梯度下降法逐渐接近损失函数的最小值时,损失函数对参数的梯度(即导数)会趋近于零。这是因为在最小值点处,损失函数的变化率(即斜率)是最小的。因此,当 b_gradient 和 w_gradient 变得非常小时,更新量 learningRate * b_gradient 和 learningRate * w_gradient 也会变得非常小,导致 b 和 w 的变化几乎可以忽略不计。所以一般线性模型只有一个最低点的时候,会出现这种情况,找到最合适的b w后,后续迭代参数几乎不会变化

的变化几乎可以忽略不计。所以一般线性模型只有一个最低点的时候,会出现这种情况,找到最合适的b w后,后续迭代参数几乎不会变化

相关推荐
开MINI的工科男1 小时前
深蓝学院-- 量产自动驾驶中的规划控制算法 小鹏
人工智能·机器学习·自动驾驶
waterHBO1 小时前
python 爬虫 selenium 笔记
爬虫·python·selenium
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
AI大模型知识分享2 小时前
Prompt最佳实践|如何用参考文本让ChatGPT答案更精准?
人工智能·深度学习·机器学习·chatgpt·prompt·gpt-3
AIAdvocate4 小时前
Pandas_数据结构详解
数据结构·python·pandas
小言从不摸鱼4 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
FreakStudio6 小时前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
python·嵌入式·面向对象·电子diy
redcocal7 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
artificiali8 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
RaidenQ8 小时前
2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘
图像处理·python·算法·课程设计