基于Random Forest Regression的预测异常:预测值全部相同求助
问题排查与修复方案
核心问题1:标签格式错误
你的trainY是二维数组(通过Y.reshape(-1,1)生成),但RandomForestRegressor的fit方法要求标签为一维数组。传入二维数组会干扰模型的学习逻辑,导致模型无法正确拟合特征与目标的关联关系,最终输出重复预测值。
修复方式
将trainY和testY转换为一维数组:
# 修改Y的处理逻辑,替换reshape(-1,1) X1,X2,X3,Y=df['Close Lag1'],df['Close Lag2'],df['Close Lag3'],df['Close'] X1,X2,X3,Y=np.array(X1),np.array(X2),np.array(X3),np.array(Y) X1,X2,X3=X1.reshape(-1,1),X2.reshape(-1,1),X3.reshape(-1,1) Y = Y.flatten() # 转为一维数组 X = np.concatenate((X3,X2,X1),axis=1) # 后续分割数据直接使用一维标签 trainY = Y[:-70] testY = Y[-70:]
核心问题2:模型参数设置不合理
你设置了max_features=3,但特征总数正好是3,这意味着每棵决策树都会使用全部特征,完全失去了随机森林的"随机选择特征子集"特性。这种情况下模型容易陷入局部最优,输出重复值。
修复方式
调整max_features参数,引入随机性:
# 使用sqrt规则选择特征子集,或指定具体数值(如2) model = RandomForestRegressor(n_estimators=100, max_features='sqrt', random_state=1)
辅助优化:特征维度不足
仅使用3个滞后特征,对于时间序列预测来说信息密度太低,模型难以捕捉价格的趋势和波动。可以尝试:
- 增加更多滞后特征(如Lag4到Lag10)
- 添加衍生特征:滞后特征的差值、移动平均值(MA)、相对强弱指数(RSI)等技术指标
- 补充时间维度特征(如星期几、月份,若原始数据包含日期字段)
完整修复后的关键代码片段
# 读取数据与特征构建 import pandas as pd import numpy as np import warnings warnings.filterwarnings('ignore') df=pd.read_csv(r'C:\Users\Krish Ghosh\Desktop\BSE Sensex.csv', usecols=[1]) df['Close Lag1']=df['Close'].shift(+1) df['Close Lag2']=df['Close'].shift(+2) df['Close Lag3']=df['Close'].shift(+3) df=df.dropna() # 特征与标签处理 X1,X2,X3,Y=df['Close Lag1'],df['Close Lag2'],df['Close Lag3'],df['Close'] X1,X2,X3,Y=np.array(X1),np.array(X2),np.array(X3),np.array(Y) X1,X2,X3=X1.reshape(-1,1),X2.reshape(-1,1),X3.reshape(-1,1) Y = Y.flatten() X = np.concatenate((X3,X2,X1),axis=1) # 数据分割 trainX = X[:-70] testX = X[-70:] trainY = Y[:-70] testY = Y[-70:] # 模型训练与预测 from sklearn.ensemble import RandomForestRegressor model=RandomForestRegressor(n_estimators=100, max_features='sqrt', random_state=1) model.fit(trainX,trainY) predX = model.predict(testX) print(predX)
内容的提问来源于stack exchange,提问作者Tarun Sharma
相关产品推荐
相关产品推荐

