【问题标题】:How to use a GradientBoostingRegressor in scikit-learn with 3 output dimensions如何在 scikit-learn 中使用具有 3 个输出维度的 GradientBoostingRegressor
【发布时间】:2022-06-13 14:53:54
【问题描述】:

我正在尝试使用 scikit-learn 的 RandomForest 和 GradientBoostingRegressor 将 13 维输入数据映射到 3 维输出数据。虽然对于 RandomForest 回归器这工作正常,但我得到 GradientBoostingRegressor 的 ValueError 声明 ValueError: y should be a 1d array, got an array of shape (16127, 3) instead.

我真的不明白为什么在使用 GradientBoostingRegressor 而不是在使用 RandomForestRegressor 时出现此错误。据我了解,它们都使用决策树作为弱学习器并将它们组合起来以获得良好的结果。当然我知道我可以将 3 维输出标签转换为 1 维数组,但这没有意义,因为我想映射到 3 维输出向量。知道如何使用 GradientBoostingRegressor 做到这一点吗?

这是我的代码:

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor

# Read data from  csv files
Input_data_features = pd.read_csv("C:/Users/wi9632/Desktop/TestData_InputFeatures.csv", sep=';')
Input_data_labels = pd.read_csv("C:/Users/wi9632/Desktop/TestData_OutputLabels.csv", sep=';')
Input_data_features = Input_data_features.values
Input_data_labels = Input_data_labels.values


# standardize input features X and output labels Y
scaler_standardized_X = StandardScaler()
Input_data_features = scaler_standardized_X.fit_transform(Input_data_features)

scaler_standardized_Y = StandardScaler()
Input_data_labels = scaler_standardized_Y.fit_transform(Input_data_labels)


# Split dataset into train, validation, an test
index_X_Train_End = int(0.7 * len(Input_data_features))
index_X_Validation_End = int(0.9 * len(Input_data_features))

X_train = Input_data_features[0: index_X_Train_End]
X_valid = Input_data_features[index_X_Train_End: index_X_Validation_End]
X_test = Input_data_features[index_X_Validation_End:]

Y_train = Input_data_labels[0: index_X_Train_End]
Y_valid = Input_data_labels[index_X_Train_End: index_X_Validation_End]
Y_test = Input_data_labels[index_X_Validation_End:]


#Define a random forest model and train it
model_randomForest = RandomForestRegressor( )
model_randomForest.fit(X_train, Y_train)

#Predict the test data with Random Forest
Y_pred_randomForest = model_randomForest.predict(X_test)
print(f"Random Forest Prediction: {Y_pred_randomForest}")


#Define a gradient boosting  model and train it (-->Here I get the ValueError)
model_gradientBoosting = GradientBoostingRegressor( )
model_gradientBoosting.fit(X_train, Y_train)

#Predict the test data with Random Forest
Y_pred_gradientBoosting = model_gradientBoosting.predict(X_test)
print(f"Gradient Boosting Prediction: {Y_pred_gradientBoosting}")

这里是测试数据:https://filetransfer.io/data-package/ABCrGPzt#link

提醒:由于我无法解决我的问题,我想就这个问题提醒您。有人知道如何解决这个问题吗?

【问题讨论】:

  • 你的成本函数是多少?是多目标优化设置吗?
  • @Learningisamess:感谢“学习一团糟”的评论。实际上,我使用默认的成本函数,即平方误差 (scikit-learn.org/stable/modules/generated/…)。所以应该是预测输出和实际输出的差。
  • 均方误差适用于一维目标空间。您想在 3d 中使用欧几里得距离吗?
  • @Learningisamess:感谢您的评论。实际上,我想在 3d 中使用均方误差(欧几里得距离)。但是我不明白为什么对于 RandomForestRegressor 我没有收到此错误。这里我也使用了默认的错误,也就是平方错误(见scikit-learn.org/stable/modules/generated/…
  • @Learningisamess:感谢您的评论和努力。对此,我真的非常感激。这个问题很奇怪。正如所指出的,我完全不明白为什么在使用 RandomForest 时不会出现这个问题。但我明白你不能再帮助我了。希望其他人可以回答这个问题。

标签: python scikit-learn boosting


猜你喜欢
  • 2019-06-03
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 2015-08-06
相关资源
最近更新 更多