编程语言
首页 > 编程语言> > 线性回归,python语法实现

线性回归,python语法实现

作者:互联网

找了很多资料发现好像大家的线性回归都是用sklearn来实现的,作为一个不会用sklearn的小白,寻找了多篇无果后 决定自己用一些比较基础的模块来实现线性回归的梯度下降算法。

import matplotlib.pyplot as plt
import numpy as np

x_data = np.array([1,2,3,4,5])
y_data = np.array([1,2,3,4,5])

a = 0.163
b = np.random.random()
k = np.random.random()
epochs = 1000

设置最简单的y=x函数来进行拟合,设置学习率为0.163,训练次数1000次。

# 计算代价函数
def compute_error(b, k, x_data, y_data):
    total_error = 0
    for i in range(0, len(x_data)):
        total_error += (y_data[i] - (k * x_data[i] + b)) ** 2
    return total_error / len(x_data) / 2.0


def gradient_descent_runner(x_data, y_data, k, b, a, epochs):
    m = len(x_data)
    for i in range(epochs):  # 循环epochs次
        new_b = 0  # 初始化截距
        new_k = 0  # 初始化斜率
        # 计算梯度的总和再求平均
        for j in range(0, len(x_data)):
            new_b += (1 / m) * (((k * x_data[j]) + b) - y_data[j])
            new_k += (1 / m) * x_data[j] * (((k * x_data[j]) + b) - y_data[j])
        # 更新b和k
        b = b - (a * new_b)
        k = k - (a * new_k)

    else:
            plt.plot(x_data, y_data, 'b.')
            plt.plot(x_data, k * x_data + b, 'r')
            plt.show()
    return b, k


print("Starting 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, a, epochs)
print("After {0} iterations b = {1}, k = {2}, error = {3}".format(epochs, b, k, compute_error(b, k, x_data, y_data)))

第十次训练:
在这里插入图片描述
二十次
在这里插入图片描述
三十次
在这里插入图片描述

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

接近100%拟合,错误率小于10^-26,基本上可以满足需求了。

标签:epochs,python,random,语法,np,error,线性,new,data
来源: https://blog.csdn.net/m0_52830188/article/details/114038901