机器学习之简单线性回归算法(一)Python代码实现

实现单变量简单线性回归

# 导入科学计算工具
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()

你可能感兴趣的:(机器学习项目练习)