基于Python的NFL胜场线性回归预测:如何获取32支球队的预测值
解决NFL新赛季32支球队胜场预测的调整方案
当前代码得到128个预测值的原因是:你用train_test_split把2003-2023年的所有球队赛季样本(每支球队每年算一个样本)按20%的比例拆分出了测试集,这128个值是测试集中历史赛季球队的胜场预测,并非新赛季32支球队的结果。要得到目标结果,需要调整如下:
核心思路
训练好模型后,用新赛季32支球队的对应特征数据作为输入,而非历史测试集数据,就能得到32个匹配的预测值。
具体调整步骤
1. 准备新赛季特征数据
首先明确你训练模型时用到的特征(即nfl.drop('wins', axis=1)包含的所有列,比如上赛季进攻码数、防守失分、休赛期引援数据等),然后收集新赛季32支球队的这些特征数据,整理成形状为(32, 特征数量)的数组或DataFrame,命名为X_new。
2. 修改代码完成预测
保留模型训练逻辑(如需验证模型性能可保留train_test_split,否则可直接用全部历史数据训练),新增对新赛季数据的预测:
# 加载历史数据集 nfl = ... # 替换为你的数据集加载代码 # 分离历史特征与目标变量 X = nfl.drop('wins', axis=1) y = nfl['wins'] # 训练线性回归模型 model = LinearRegression() model.fit(X, y) # 若需验证模型,可改用X_train训练,不影响新赛季预测 # 准备新赛季32支球队的特征数据 # X_new = ... # 在这里填充整理好的新赛季特征数据 # 生成新赛季胜场预测 new_season_predictions = model.predict(X_new) print(new_season_predictions.shape) # 输出应为(32,),对应32支球队
3. 关键注意事项
- 特征一致性:新赛季数据的特征必须和训练时的特征完全匹配,包括数量、顺序、数据类型。
- 特征缩放(若有):如果训练前对历史特征做了标准化/归一化处理(比如用
StandardScaler),新赛季数据必须使用同一缩放器转换,避免预测偏差:
from sklearn.preprocessing import StandardScaler # 训练时的缩放处理 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) model.fit(X_scaled, y) # 新赛季数据的缩放转换 X_new_scaled = scaler.transform(X_new) new_season_predictions = model.predict(X_new_scaled)
内容的提问来源于stack exchange,提问作者Tee
相关产品推荐
相关产品推荐

