You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XGBoost滚动验证(Walk Forward Validation)出现feature_names mismatch错误及分类任务指标选择咨询

股票趋势预测滚动验证问题解答

一、先解决特征不匹配的错误

你遇到的ValueError: feature_names mismatch是数据输入维度错误导致的,核心问题是传入模型的特征数量和训练时不匹配:

  • 你的输入特征有3个:收盘价、成交量、当日趋势,所以模型训练时期望输入是3维特征(对应['f0','f1','f2'])
  • 但你在代码里写了pred = xgb_predict(history, test_x[0]),这里的test_x[0]只取了test_x的第一个特征,把3维特征硬生生砍成了1维,模型自然会抛出特征不匹配的错误

修复方法:

把test_x[0]改成完整的test_x,确保传入模型的是全部3个特征:

pred = xgb_predict(history, test_x)

另外检查你的xgb_predict函数,里面已经用了val = np.array(val).reshape(1, -1),这个处理是对的,修改参数后会自动把输入转换成(1,3)的形状,完全符合模型的要求。

二、评估指标的选择:必须用准确率而非RMSE

你的任务是二分类任务(预测次日股票涨跌,0/1是分类标签),RMSE(均方根误差)是专门用于回归任务(比如预测具体股价这类连续数值)的指标,完全不适合你的分类场景。

推荐的分类评估指标:

  • 准确率(Accuracy):最直观的指标,计算正确预测的样本数占总样本数的比例,适合涨跌样本分布比较均衡的情况
  • 精确率/召回率:如果涨跌天数差异很大(比如上涨天数远多于下跌),准确率会有误导性,这时候用精确率(预测上涨的样本中实际上涨的比例)和召回率(实际上涨的样本中被正确预测的比例)更合适
  • F1分数:精确率和召回率的调和平均,能综合反映模型的分类表现

准确率的代码实现:

首先你需要修正predictions的存储逻辑(你现在存的是test[i],这是测试集的原始数据,不是预测结果),然后用sklearn的accuracy_score计算:

from sklearn.metrics import accuracy_score

def validate(data, perc):
    predictions = []
    train, test = train_test_split(data, perc)
    history = [x for x in train]
    for i in range(len(test)):
        test_x, test_y = test[i, :-1], test[i, -1]
        pred = xgb_predict(history, test_x)  # 修正这里的参数
        predictions.append(pred)  # 存储预测结果,不是test[i]
    # 计算准确率
    accuracy = accuracy_score(test[:, -1], predictions)
    return accuracy, test[:, -1], predictions

# 调用并打印结果
accuracy, y, pred = validate(data, 0.2)
print(accuracy)

另外注意你代码里的小笔误:print(rsme)应该改成print(rmse)(变量名拼写错误)。

内容的提问来源于stack exchange,提问作者user16561849

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:57:48