【问题标题】:XGBRegressor high train and test score but predicts is badXGBRegressor 训练和测试得分高,但预测不好
【发布时间】:2021-04-03 12:31:39
【问题描述】:

我是数据科学的新手,遇到了一个问题。 这是我的训练和考试成绩

Train Score : 99.99319245627736
Test Score  : 94.20448487131814

这是我的实际价格和预测

            Actual_price  predict_price  Error
4928          162000         165994  -3994.343750
11272         31000          50525   -19525.128906
7894          110000         117209  -7209.609375
4382          59500          75478   -15978.164062
345           500000         482369   17630.968750
...             ...            ...           ...
3348          42750          38110    4639.328125
8993          74000          96511   -22511.226562
8270          83750          74911    8838.210938
2757          77500          89780   -12280.585938
6538          95000          92607    2392.765625

我的分数很高,但预测很差,我做错了。这是我的代码

data_train, data_test, label_train, label_test = train_test_split(X,Y, test_size=0.3,random_state=782)
model = xgb.XGBRegressor(learning_rate=0.1,max_depth=14)
model.fit(data_train, label_train)
print(model)
print("Train Score:"+str(model.score(data_train, label_train) * 100))
print("Test Score:"+str(model.score(data_test, label_test) * 100))
pre = model.predict(data_test)
out = pd.DataFrame({'Actual_price': label_test, 'predict_price': pre.astype(int), 'Error': (label_test - pre)})
print(out)

【问题讨论】:

  • 你为什么感到惊讶?训练性能通常总是优于测试性能。
  • 我知道训练分数应该高于测试分数我并不感到惊讶。我的问题是真实价格和预测价格之间的巨大差异。我应该用这些分数得到更小的误差值。我错了吗?
  • 如果没有实际的数据集很难判断。
  • 误差大多比值小一个数量级。如果您想关注默认 score(R 平方)以外的其他度量,那么报告这些分数,并考虑为该分数调整超参数?

标签: python machine-learning scikit-learn data-science xgboost


【解决方案1】:

首先,训练准确率大于测试,这是完全合理的(正如你已经说过的)。

其次,让我们检查一下您在预测时所做的相对误差(Error/Actual):

            Actual_price  predict_price  Error          Relative Error
4928          162000         165994  -3994.343750         2.5%
11272         31000          50525   -19525.128906        62,9%
7894          110000         117209  -7209.609375         6,5%
4382          59500          75478   -15978.164062        26,5%
345           500000         482369   17630.968750        3,5%
...             ...            ...           ...
3348          42750          38110    4639.328125         10,8%
8993          74000          96511   -22511.226562        30%
8270          83750          74911    8838.210938         10%
2757          77500          89780   -12280.585938        15%
6538          95000          92607    2392.765625         2,5%

通过这个计算的度量,我们可以说您获得的 94% 的准确度是合理的(样本 11272 除外)。 显然,这个相对误差与 R 平方不同,但它是指示性的。 (要计算de R平方,需要所有数据集)

作为结论,您获得的 R 平方似乎是正确的。并考虑到相对性,例如,当您的实际值为 1,000,000 时,1,000 的误差就足够了,但如果您的实际值为 2,000,则这是一个巨大的误差。

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 2020-10-25
    • 2020-11-06
    • 2023-03-08
    • 1970-01-01
    • 2019-07-09
    • 2020-04-05
    • 2018-11-03
    • 2018-06-17
    相关资源
    最近更新 更多