Я пытаюсь использовать 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%, а Recall - 99%. . Для меня это неприемлемо, поскольку данные очень несбалансированы.