实现单变量简单线性回归
# 导入科学计算工具
import numpy as np
# 导入画图工具
from matplotlib import pyplot as plt
# 训练函数
def fitSLR(X,Y):
X_avg = np.mean(X)
Y_avg = np.mean(Y)
n = len(X)
# 定义分子和分母
fen_zi = 0
fen_mu = 0
# 核心算法
for i in range(0,n):
fen_zi += (X[i] - X_avg) * (Y[i] - Y_avg)
fen_mu += (X[i] - X_avg) ** 2
b1 = fen_zi / float(fen_mu)
b0 = Y_avg - X_avg * b1
return b0,b1
def predict(x,b0,b1):
return b0 + x * b1
# X = np.array([1,3,2,1,3])
# Y = np.array([14,24,18,17,27])
X=[1.5,0.8,2.6,1.0,0.6,2.8,1.2,0.9,0.4,1.3,1.2,2.0,1.6,1.8,2.2]
Y=[3.1,1.9,4.2,2.3,1.6,4.9,2.8,2.1,1.4,2.4,2.4,3.8,3.0,3.4,4.0]
b0,b1 = fitSLR(X,Y)
print('k = ',b1)
print('b = ',b0)
# 生成画板
plt.figure()
# 画散点图
plt.scatter(X,Y)
# 求出X参数的最小值
X_min = min(X)
# 求出X参数的最大值
X_max = max(X)
# 根据求得的b1,b0得到Y的最小值
Y_min = b0 + b1 * X_min
# 分局求得b1,b0得到Y的最大值
Y_max = b0 + b1 * X_max
# 画出预测的线性回归模型
plt.plot([X_min,X_max],[Y_min,Y_max],'r')
# 展示最终的效果
plt.show()