折腾了半年在线API才明白,股票数据还是本地落盘最省事|Python量化回测实战
2026/7/22 19:40:11
| 概念 | 一句话解释 |
|---|---|
| 特征 | 模型的输入数据 |
| 标签 | 模型要学习的正确答案 |
| 权重w | 控制输入对输出的影响大小 |
| 偏置b | 输入为0时的基础输出值 |
| 预测 | 模型根据当前参数给出的答案 |
| 损失 | 预测与真实值的差距 |
| 均方误差 | 预测误差平方的平均值 |
| 梯度 | 告诉参数该往哪个方向修改 |
| 学习率 | 每次修改参数的幅度 |
| 训练 | 不断修改参数让损失变小的过程 |
初始化w和b ↓ 对每组数据: 1. 前向计算:预测 = w*x + b 2. 计算损失:MSE = 平均(预测-真实)² 3. 计算梯度:告诉w和b该怎么改 4. 更新参数:w -= 学习率*梯度_w b -= 学习率*梯度_b ↓ 重复直到损失足够小 ↓ 用训练好的模型预测新数据# ============================================# 综合练习:预测员工工资# ============================================# 第1步:准备数据# 工作年限 → 月薪(千元)数据=[(1,8),(2,10),(3,13),(5,18),(8,25),]输入=[d[0]fordin数据]输出=[d[1]fordin数据]# 第2步:初始化参数w=0.0b=0.0学习率=0.01轮次=1000# 第3步:训练print("开始训练...\n")forepochinrange(轮次):# 前向计算预测值=[w*x+bforxin输入]# 计算损失损失=sum((p-t)**2forp,tinzip(预测值,输出))/len(输入)# 计算梯度n=len(输入)梯度_w=sum(2*(p-t)*xforx,t,pinzip(输入,输出,预测值))/n 梯度_b=sum(2*(p-t)forp,tinzip(预测值,输出))/n# 更新参数w=w-学习率*梯度_w b=b-学习率*梯度_b# 每200轮打印一次ifepoch%200==0:print(f" 轮次{epoch:4d}: 损失={损失:.4f}, w={w:.4f}, b={b:.4f}")print(f"\n训练完成!")print(f"最终参数: w={w:.4f}, b={b:.4f}")# 第4步:验证print("\n验证预测:")forx,y_trueinzip(输入,输出):y_pred=w*x+b 误差=abs(y_pred-y_true)print(f" 工作年限{x}年: 预测={y_pred:.2f}千, 真实={y_true}千, 误差={误差:.2f}千")# 第5步:预测新员工print("\n预测新员工:")新员工年限=[10,15,20]foryearsin新员工年限:预测工资=w*years+bprint(f" 工作{years}年: 预测月薪={预测工资:.2f}千")数据=[(1,8),(2,10),(3,13),(5,18),(8,25)]输入=[d[0]fordin数据]输出=[d[1]fordin数据]学习率列表=[0.001,0.01,0.1,0.5]forlrin学习率列表:w,b=0.0,0.0forepochinrange(500):预测值=[w*x+bforxin输入]n=len(输入)梯度_w=sum(2*(p-t)*xforx,t,pinzip(输入,输出,预测值))/n 梯度_b=sum(2*(p-t)forp,tinzip(预测值,输出))/n w-=lr*梯度_w b-=lr*梯度_b# 计算最终损失预测值=[w*x+bforxin输入]损失=sum((p-t)**2forp,tinzip(预测值,输出))/len(输入)print(f"学习率={lr:5.3f}: 最终损失={损失:.4f}, w={w:.4f}, b={b:.4f}")回答以下问题(能清晰回答才算掌握):