机器学习算法基础——梯度下降法求一元线性回归

import numpy as np
import matplotlib.pyplot as plt

# 载入数据
data = np.genfromtxt("C:\\ML\\chapter-1\\data.csv",delimiter=",")
x_data = data[:,0]
y_data = data[:,1]
plt.scatter(x_data,y_data)
plt.show()

# 学习率 learning rate
lr = 0.0001
# 截距
b = 0
# 斜率
k = 0
# 最大迭代次数
epochs = 50

# 最小二乘法
def compute_error(b,k,x_data,y_data):
    totalError = 0
    for i in range(0,len(x_data)):
        totalError += (y_data[i] - (k*x_data[i]) + b) ** 2 #计算总的误差
    return totalError / float(len(x_data)) / 2.0

def gradient_descent_runner(x_data,y_data,b,k,lr,epochs):
    # 计算总数据量
    m = float(len(x_data))
    # 循环epochs次
    for i in range(epochs):
        b_grad = 0  # grad 梯度 求导
        k_grad = 0
        # 计算梯度的总和再求平均
        for j in range(0,len(x_data)):
            b_grad += -(1/m) * (y_data[j] - (k*x_data[j]) + b)
            k_grad += -(1/m) * x_data[j] * (y_data[j] - ((k*x_data[j]) + b))
        # 更新b和k
        b = b - (lr * b_grad)
        k = k - (lr * k_grad)
        # 每迭代五次,输出一次图像
        if i % 5 == 0:
            print("esochs:",i)
            plt.plot(x_data,y_data,'b.')
            plt.plot(x_data,k*x_data + b,"r")
            plt.show()
    return b,k    

print('Staring b = {0},k = {1},error = {2}'.format(b,k,compute_error(b,k,x_data,y_data)))
print('Running...')
b,k = gradient_descent_runner(x_data,y_data,b,k,lr,epochs) # 开始建模
print('After {0} iterations b = {1},k= {2},error = {3}'.format(epochs,b,k,compute_error(b,k,x_data,y_data)))

# 画图
# plt.plot(x_data,y_data,'b.') # b代表blue .表示用.画出来
# plt.plot(x_data,k*x_data + b, 'r') # 画线,r代表red
# plt.show()

数据的散点图
在这里插入图片描述
根据梯度下降法求得线性回归的过程
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiao黄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值