如何处理 AUC 的加权平均值并选择正确的阈值来构建混淆矩阵?

How to handle weighted average for AUC and selecting the right threshold for building the confusion matrix?

我有一个二进制 classification 任务,我使用 XGBClassifier classifier 拟合模型并尝试使用测试集预测“1”和“0”。在这个任务中,我在训练数据中有一个非常不平衡的数据多数“0”和少数“1”(在测试集中粗略相同)。我的数据如下所示:

           F1         F2        F3   ….   Target
    S1     2          4         5    ….     0
    S2     2.3        4.3       6.4         1
    …       …          …         ….         ..
  S4000    3           6         7          0

我使用以下代码训练模型并计算roc值:

  my_cls=XGBClassifier()
  X=mydata_train.drop(['target'])
  y= mydata_train['target']
  x_tst=mydata_test.drop['target']
  y_tst= mydata_test['target']
  my_cls.fit(X, y)

  pred= my_cls.predict_proba(x_tst)[:,1]
  auc_score=roc_auc_score(y_tst,pred)

上面的代码给了我一个 auc_score 的值,但这个值似乎是一个 class 使用 my_cls.predict_proba(x_tst )[:,1],如果我把它改成my_cls.predict_proba(x_tst)[:,0],它给了我另一个值作为 auc 值。我的第一个问题是如何直接获得 auc 的加权平均值?我的第二个问题是如何 select 正确的切点来构建具有不平衡数据的混淆矩阵?这是因为默认情况下,classifier 使用 50% 作为构建矩阵的阈值,但由于我的数据非常不平衡,因此我们似乎需要 select 一个正确的阈值。我需要计算 TP 和 FP,这就是为什么我需要这个切点。

如果我使用权重 class 来训练模型,它能解决问题吗(我的意思是我可以默认使用 50% 的切点)?例如这样的事情:

My_clss_weight=len(X) / (2 * np.bincount(y))

然后尝试用这个来拟合模型:

my_cls.fit(X, y, class_weight= My_clss_weight)

但是上面的代码my_cls.fit(X,y,class_weight=My_clss_weight) 不适用于 XGBClassifier 并给我错误。这适用于 LogessticRegression,但我想申请 XGBClassifier!有解决问题的想法吗?

要回答您的第一个问题,您可以简单地使用 roc_auc_score 函数的参数 weighted

例如 -

roc_auc_score(y_test, pred, average = 'weighted')

为了回答你问题的后半部分,能否请你详细说明一下。我可以帮你。