关于python:一元线性回归原理及代码实现

42次阅读

共计 1238 个字符,预计需要花费 4 分钟才能阅读完成。

– coding: utf-8 –

“”” 一元线性回归及代码实现.ipynb
“””
import numpy as np
import matplotlib.pyplot as plt
“””# 一、数据集 ”””

读入数据集

data = np.genfromtxt(‘data.csv’, delimiter=’,’)
”’
np.genfromtxt(‘data.csv’, delimiter=’,’)
第一个参数是表格数组,能够简略了解为表格文件
第二个参数是文本之间的距离符号
”’
print(data[:5]) #
x = data[:,0]
y = data[:,1]
print(x,y)

将数据可视化

plt.scatter(x,y) # 散点图
plt.show()
“””# 二、建模 ”””

最小二乘法

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
lr = 0.0001 # 学习率

最大迭代次数

epochs = 50
def gradident_descent(lr,epochs):
k = 0 # 斜率
b = 0 # 截距
for epoch in range(epochs):

# b_grad = 0
# k_grad = 0
# m = float(len(x))
# for j in range(0, len(x)):
#   b_grad += (1/m) * (((k * x[j]) + b) - y[j])
#   k_grad += (1/m) * x[j] * (((k * x[j]) + b) - y[j])
k_grad = (x*(k*x+b-y)).mean()
b_grad = (k*x+b-y).mean()
# 同步更新 k 和 b,实现一次梯度降落算法
k -= lr * k_grad
b -= lr * b_grad
# 每迭代 5 次,[铂金](https://www.gendan5.com/nmetal/platinum.html)输入一次图像
# if epoch % 5 == 0:
#   print(f'epoch{epoch}')
#   plt.plot(x,y,'b.') # b. 是指以蓝色的点显示
#   plt.plot(x,k*x+b,'r')
#   plt.show()

return k,b
print(“Starting b = {0}, k = {1}, error = {2}”.format(b, k, compute_error(b, k, x, y)))
print(“Running…”)
k,b = gradident_descent(lr,epochs)
print(“After {0} iterations b = {1}, k = {2}, error = {3}”.format(epochs, b, k, compute_error(b, k, x, y)))

画图

plt.plot(x, y, ‘b.’)
plt.plot(x, k*x + b, ‘r’)
plt.show()

正文完
 0