python - 为 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]
解决方案
你的问题源于此X_test=np.log(X_data)
为什么你log
在测试用例上应用而你没有在训练样本上应用它?
如果你np.log
完全去掉,即使是从目标(y),你会得到非常好的结果。我用你提供给我们的数据自己测试了它。
推荐阅读
- spring-boot - 如何在 solr 的多值字段中搜索并将结果映射到多值字段中?
- java - 并发修改异常在预期时间发生
- django - django send_email 未发送到主机域电子邮件地址
- python - 将列表中的元素转换为字典
- python - Python CGIHTTPServer 是否将 URL 中的加号(+)解码为空格?
- reactjs - TypeError:注销期间未定义历史记录
- flutter - ModalRoute.of(context).completed 的行为在 Flutter 2.x 中是出乎意料的
- google-cloud-platform - 使用 Google Cloud 零售 AP 和搜索时需要单独的数据库和微服务
- javascript - 为什么在这个打字机功能中有一个不需要的空间?
- php - 如何在 Prestashop 的购物车中更改产品名称?