XGBRegressor 高训练和测试分数但预测不好

XGBRegressor high train and test score but predicts is bad

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

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)

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

其次,让我们检查一下您在预测时的相对误差(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,这是一个巨大的误差。