簡體   English   中英

XGBoost Model性能

[英]XGBoost Model performance

我正在嘗試使用 XGBoost 進行分類。 我很懷疑它的准確性。 我已經使用默認參數應用它,精度為 100%。

xg_cl_default = xgb.XGBClassifier()
xg_cl_default.fit(trainX, trainY)
preds = xg_cl_default.predict(testX)

precision_score(testY,preds)
# 1.0

但是我的數據不平衡,所以我使用 scale_pos_weight 參數以及下面給出的一些其他參數:

ratio = int(df_final.filter(col('isFraud')==0).count()/df_final.filter(col('isFraud')==1).count())    

xg_cl = xgb.XGBClassifier(scale_pos_weight = ratio, n_estimators=50)

eval_set = [(valX, valY.values.ravel())]
xg_cl.fit(trainX, trainY.values.ravel(),eval_metric="error", early_stopping_rounds=10,eval_set=eval_set, verbose=True)

preds = xg_cl_default.predict(testX)

precision_score(testY,preds)
# 1.0

在這兩種情況下,我的准確率都是 100%,召回率是 99%。 這對我來說是不可接受的,因為數據高度不平衡。

對於不平衡的數據集,更合適的評估指標是precision-recall曲線下的面積,因此設置eval_metric="aucpr"

此外,您應該使用交叉驗證來調整 XGBoost 的參數,再次以精確召回曲線下的面積作為評估指標。 交叉驗證可以通過多種方式完成,快速搜索應該會為您提供許多代碼示例。 根據您共享的代碼,除非您的問題是微不足道的,否則您不太可能在不仔細調整參數的情況下獲得有意義的 model。

最后,您可以使用 Scikit-Learn 從真實標簽和預測標簽中 plot 混淆矩陣,以了解 model 是否進行有意義的預測。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM