Sklearn中线性回归正常但GradientBoostingRegressor报形状错误咨询
解决GradientBoostingRegressor多目标回归的形状错误问题
我来帮你搞定这个困扰多日的问题!核心原因其实很简单:LinearRegression天然支持多目标回归,但GradientBoostingRegressor默认只处理单目标回归任务,所以当你传入形状为(样本数, 38)的二维数组y时,它就会抛出形状不匹配的错误。
为什么LinearRegression能正常运行?
LinearRegression的fit方法会自动处理二维的y——它会为每一列目标变量(也就是每种货币)独立拟合一个线性模型,所以无需额外配置就能直接运行。
两种可行的解决方案
方案1:用MultiOutputRegressor包装GradientBoostingRegressor
如果你需要同时预测所有38种货币的汇率,推荐使用MultiOutputRegressor,它会为每个目标列单独训练一个GradientBoostingRegressor模型:
from sklearn.ensemble import GradientBoostingRegressor from sklearn.multioutput import MultiOutputRegressor n = 1 X = rates[:-n] y = rates[n:] # 包装GBR以支持多输出 reg = MultiOutputRegressor(GradientBoostingRegressor(loss="lad")).fit(X, y)
方案2:只预测单一货币(如果需求允许)
如果你的目标只是预测某一种特定货币的汇率,可以把y转换成一维数组:
from sklearn.ensemble import GradientBoostingRegressor n = 1 X = rates[:-n] # 比如选择第1列货币(根据你的需求修改列索引或列名) y = rates[n:].iloc[:, 0] reg = GradientBoostingRegressor(loss="lad").fit(X, y)
补充说明
如果你使用的是较新版本的scikit-learn(0.23及以上),也可以直接设置GradientBoostingRegressor的multi_output=True参数来支持多输出,但MultiOutputRegressor的兼容性更好,尤其是在需要对每个目标模型单独调整参数的场景下。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

