您当前的位置: 首页 >  回归

风间琉璃•

暂无认证

  • 1浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

线性回归的实现

风间琉璃• 发布时间:2022-01-20 19:39:38 ,浏览量:1

文章目录
  • 前言
  • 一、计算损失函数
  • 二、梯度下降算法
  • 三、循环执行
  • 总结

一、计算损失函数

在这里插入图片描述 在上式中,xi,yi 是数据集提供的,w,b是初始时设定的,并且随时要更新的,也是我们最终要求的参数,所以损失函数可以计算出一个结果来(数据集是100个数组存在.csv文件中)

def compute_error_for_line_given_points(b, w, points):
    totalError = 0
    for i in range(0, len(points)):
        x = points[i, 0]     # points[i][0]
        y = points[i, 1]
        # computer mean-squared-error
        totalError += (y - (w * x + b)) ** 2
    # average loss for each point
    return totalError / float(len(points))  # 代价函数

二、梯度下降算法

在这里插入图片描述 原理参考上面文章,lr是指学习率,计算代价函数的梯度,更新w,b

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]
        # grad_b = 2(wx+b-y)  // 就是求偏导
        b_gradient += (2 / N) * ((w_current * x + b_current) - y)
        # grad_w = 2(wx+b-y)*x
        w_gradient += (2 / N) * x * ((w_current * x + b_current) - y)
    # update 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, learning_rate, num_iterations):
    b = starting_b
    w = starting_w
    # update for several times   num_iterations 重复执行次数
    for i in range(num_iterations):
        b, w = step_gradient(b, w, np.array(points), learning_rate)
    return [b, w]

打印开始的代价函数和最后的代价函数

def run():
    points = np.genfromtxt("data.csv", delimiter=",")
    learning_rate = 0.0001
    initial_b = 0  # initial y-intercept guess
    initial_w = 0  # initial slope guess
    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))
          )
    
    print("Running...")  
    [b, w] = gradient_descent_runner(points, initial_b, initial_w, learning_rate, num_iterations)
    print("After {0} iterations b = {1}, w = {2}, error = {3}".
          format(num_iterations, b, w,
                 compute_error_for_line_given_points(b, w, points))
          )

运行结果: 在这里插入图片描述

关注
打赏
1665385461
查看更多评论
立即登录/注册

微信扫码登录

0.1132s