我是数据科学的新手,遇到了一个问题。这是我的训练和测试得分
Train Score : 99.99319245627736Test Score : 94.20448487131814
这是我的实际价格和预测价格
Actual_price predict_price Error4928 162000 165994 -3994.34375011272 31000 50525 -19525.1289067894 110000 117209 -7209.6093754382 59500 75478 -15978.164062345 500000 482369 17630.968750... ... ... ...3348 42750 38110 4639.3281258993 74000 96511 -22511.2265628270 83750 74911 8838.2109382757 77500 89780 -12280.5859386538 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 Error4928 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方不同,但它是有指示性的。(要计算R方,需要整个数据集)
总的来说,你获得的R方似乎是真实的。并且要考虑到相对性,例如,当你的真实值是1,000,000时,1,000的误差是可以接受的,但如果你的真实值是2,000,这是一个巨大的误差。