xgb model.predict 與 model.get_booster() 方法預(yù)測結(jié)果為什么不一樣呢窥淆?
1. 親測0.71版本訓(xùn)練出來的模型,用0.90版本的xgb預(yù)測阐滩,結(jié)果不一致
2. 同一版本下model.get_booster().predict與model.predict預(yù)測結(jié)果為什么不一致呢?
看上去也沒有問題,xgb不是已經(jīng)設(shè)置缺失值了嗎砸西,為什么預(yù)測結(jié)果不一樣呢叶眉?
習(xí)慣性的有問題直接看源碼址儒,走進(jìn)源碼我們一起探討真相芹枷。
解析源碼先看看model.predict與model.get_booster().predict有什么區(qū)別?細(xì)品
通過源碼能夠看出來model.predict 底層也會調(diào)用get_booster().predict方法莲趣,那到底差哪了呢鸳慈,繼續(xù)向上扒,發(fā)現(xiàn)model.predict在調(diào)用model.get_booster方法之前多了一步DMatrix方法調(diào)用喧伞,model將自帶缺失值傳給了DMatrix中的missing參數(shù)走芋,對比code中我們單獨(dú)調(diào)用model.get_booster().predict方法有什么不同呢,少了給數(shù)據(jù)填充缺失值E琐辍N坛选!8嚷亍挖函!
接下來我們在DMatrix中設(shè)置缺失值后,重新調(diào)用model.predict與model.get_booster().predict方法預(yù)測結(jié)果會是什么樣子的呢浊竟?結(jié)果終于一樣了怨喘,都是25.863