【问题标题】:First Time Using XGBoost Regressor第一次使用 XGBoost 回归器
【发布时间】:2020-08-07 11:33:34
【问题描述】:

一直在努力让它工作并能够找到 xgboost 的可靠指南。在 sklearn 上找不到任何东西,所以我正在尝试拼凑 xgboost 演练中的一些内容。

def gradientBoost():
    xg_reg = xgb.XGBRegressor(objective="reg:linear", max_depth=5, n_estimators=100, random_state=42)
    xg_reg.fit(x_train, y_train)
    preds = xg_reg.predict(x_train)
    rmse = np.sqrt(metrics.mean_squared_error(y_train,preds))
    print("RMSE: %f" % rmse)

使用此代码我得到一个错误:

y_true and y_pred have a different number of outputs (18!=1)

我知道您看不到我正在使用的数据,但是如果我在 x_train,y_train 上对其进行训练,那么当我尝试获得对我曾经使用过的数据的预测准确性时,尺寸怎么会有所不同训练它?

【问题讨论】:

  • 请发布您的y_trainpreds 的样本,以及完整 错误跟踪。
  • y_train 是一个 (6475,18) 数组。 preds 是一个 (6475,) 数组。我开始明白我需要使用目标“multi:softmax”,但在使用 num_class 参数时遇到了困难

标签: python machine-learning xgboost


【解决方案1】:

错误告诉您y_true 上有 18 个元素,而 y_pred 中只有 1 个元素,因此问题可能来自您的 y_pred。您应该尝试打印它并理解您的错误。我认为y_pred 是一个数组数组,类似的东西,也许y_pred[0] 会起作用,但只需打印它,看看你做错了什么,没有它我帮不了你......

【讨论】:

  • 所以在与我之前设置的完全相同的随机森林模型进行比较之后,y_pred(preds 变量) 是一个与输入 y_train 形状相同的数组(6475,18)。使用 xgboost 和 predict 函数,它将 y_pred 更改为数组(6475)。我不明白为什么具有不同回归量的相同函数在二维数组上训练时会产生不同的结果并生成一维数组?
  • xgboost 独立于 sklearn,因此它们的工作方式并不完全相同是可以理解的,但可以肯定的是,您的错误是由于输出的差异造成的。
  • 有没有比 predict() 更好的函数?一个相当于 sklearn 中的 predict() 的?
  • Idk,但请注意 xgboost 输出随“objective”参数而变化。参见this,“学习任务参数”一章,1.objective [default=reg:linear]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2016-05-10
  • 2017-01-25
  • 2017-03-08
  • 2021-11-27
相关资源
最近更新 更多