机器学习场景下向X数组追加时间戳失败及预测维度不匹配问题
问题解决方法
问题1:时间戳无法追加到X数组的解决
根因
np.append()不是原地修改函数,执行后会返回新数组,你没有将结果赋值回X,所以原数组不会发生任何变化- 你的原X是形状为
(n, 1)的二维数组,直接追加标量会默认把数组拍平为一维,不符合后续模型输入要求 - 你猜测的科学计数法问题完全是numpy的显示格式问题,内部存储的数值和你生成的时间戳完全一致,不影响实际使用
修复后的追加代码
import numpy as np from datetime import datetime dates = ["2021-12-23", "2022-12-24", "2023-12-25", "2024-12-26", "2025-12-27",] # 批量转换为时间戳 timestamps = [int(datetime.timestamp(datetime.strptime(dt, "%Y-%m-%d"))) for dt in dates] # 转为形状 (5,1) 的二维数组,和原X维度匹配 timestamps_arr = np.array(timestamps).reshape(-1, 1) # 追加到原X末尾,赋值回X才会生效 X = np.append(X, timestamps_arr, axis=0)
如果需要关闭numpy的科学计数法显示,可以额外添加一行配置:np.set_printoptions(suppress=True)
问题2:维度不匹配报错的解决
根因
你把新增的5个无标签样本追加到了原始带标签的X里,原始Y只有对应原来766个样本的标签,你用包含771个样本的X预测出来的结果去和766个Y计算均方误差,自然会出现维度不匹配的报错。待预测的5个样本本就没有对应Y值,不需要参与误差计算。
修复后的预测代码
import numpy as np from matplotlib import pyplot as plt from sklearn.tree import DecisionTreeRegressor from sklearn.metrics import mean_squared_error # 定义模型并训练 model = DecisionTreeRegressor() model.fit(X_train, Y_train) # 全量预测(包含原始766个样本和新增5个待预测样本) predictions = model.predict(X) # 计算MSE时只取前766个样本的预测结果,和对应Y匹配 print("模型均方误差:", mean_squared_error(Y, predictions[:766])) # 单独提取5个未来日期的预测结果 future_predictions = predictions[766:] print("未来日期的预测结果:", future_predictions)
内容的提问来源于stack exchange,提问作者Piotr Żak
相关产品推荐
相关产品推荐

