如何解决XGBRegressor 训练和测试得分高,但预测很差
我是数据科学领域的新手,遇到了一个问题。 这是我的训练和测试成绩
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)
解决方法
首先,训练准确率大于测试,这是完全合理的(正如你已经说过的)。
其次,让我们检查您在预测时的相对误差(误差/实际):
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,则这是一个巨大的误差。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。