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,这是一个巨大的误差。
我是数据科学领域的新手,遇到了问题。 这是我的训练和考试成绩
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,这是一个巨大的误差。