首页 > 解决方案 > 为 XGBoost 回归算法检索不同实例的相同输出

问题描述

我有以下数据使用 XGBoost 回归算法来执行预测。然而,问题是回归算法预测任何输入的相同输出,我不确定为什么。

data= pd.read_csv("depthwise_data.csv", delimiter=',', header=None, skiprows=1, names=['input_size','input_channels','conv_kernel','conv_strides','running_time'])

X = data[['input_size', 'input_channels','conv_kernel', 'conv_strides']]
Y = data[["running_time"]]

X_train, X_test, y_train, y_test = train_test_split(
    np.array(X), np.array(Y), test_size=0.2, random_state=42)

y_train_log = np.log(y_train)
y_test_log = np.log(y_test)

xgb_depth_conv = xgb.XGBRegressor(objective ='reg:squarederror',
                  n_estimators = 1000,
                   seed = 123,
                    tree_method = 'hist',
                    max_depth=10)

xgb_depth_conv.fit(X_train, y_train_log)
y_pred_train = xgb_depth_conv.predict(X_train)
#y_pred_test = xgb_depth_conv.predict(X_test)

X_data=[[8,576,3,2]] #instance
X_test=np.log(X_data)
y_pred_test=xgb_depth_conv.predict(X_test)
print(np.exp(y_pred_test))


MSE_test, MSE_train = mse(y_test_log,y_pred_test), mse(y_train_log, y_pred_train)
R_squared = r2_score(y_pred_test,y_test_log)
print("MSE-Train = {}".format(MSE_train))
print("MSE-Test = {}".format(MSE_test))
print("R-Squared: ", np.round(R_squared, 2))

第一个实例的输出

X_data=[[8,576,3,2]]
print(np.exp(y_pred_test))
[0.7050679]

第二个实例的输出

X_data=[[4,960,3,1]]
print(np.exp(y_pred_test))
[0.7050679]

标签: pythonmachine-learningdata-sciencexgboost

解决方案


你的问题源于此X_test=np.log(X_data)

为什么你log在测试用例上应用而你没有在训练样本上应用它?

如果你np.log完全去掉,即使是从目标(y),你会得到非常好的结果。我用你提供给我们的数据自己测试了它。


推荐阅读