第五章 线性回归

# 线性回归
# y=kx+b
# --------------数据获取--------------
xs = [i for i in range(2008, 2023)]
ys = [
    5000,
    8000,
    12000,
    20000,
    32000,
    35000,
    40000,
    48000,
    53000,
    54000,
    57000,
    58000,
    59000,
    59900,
    60000,
]
# --------------数据处理--------------
# MIN-MAX 归一化 (x-min)/(max-min)
x_min = min(xs)
x_max = max(xs)

y_min = min(ys)
y_max = max(ys)

xs_normal = [(i - x_min) / (x_max - x_min) for i in xs]
ys_normal = [(i - y_min) / (y_max - y_min) for i in ys]
# --------------参数初始化--------------
k = 1  # 斜率
b = 0  # 截距

epoche = 100  # 迭代次数
lr = 0.2  # 学习率
# --------------模型训练--------------
for e in range(epoche):  # 迭代epoche次
    for x, y in zip(xs_normal, ys_normal):  # 遍历数据集
        # --------------模型预测(模型推理,求出预测值)--------------
        predict = k * x + b  # 预测值

        # 求出损失函数
        loss = (predict - y) ** 2  # 损失函数
        # 计算梯度值
        delta_k = (predict - y) * x  # 斜率的导数
        delta_b = (predict - y) * 1  # 截距的导数
        # 更新参数
        k = k - delta_k * lr  # 更新斜率
        b = b - delta_b * lr  # 更新截距
        print(loss)
# 模型上线及预测
while True:
    input_x = input("请输入要预测的年份:")  # 输入要预测的年份
    input_x_normal = (int(input_x) - x_min) / (x_max - x_min)  # 归一化
    p = k * int(input_x_normal) + b  # 预测值

    pp = p * (y_max - y_min) + y_min  # 反归一化
    print("预测值为:", pp)
posted @ 2025-08-20 21:19  李大嘟嘟  阅读(16)  评论(0)    收藏  举报