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

问题描述 投票:1回答:1

我有一个二进制分类任务,我在其中使用XGBClassifier分类器对模型进行拟合,并尝试使用测试集预测'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值,但似乎此值是使用此my_cls.predict_proba(x_tst)[:, 1]的一类的,如果我将其更改为my_cls.predict_proba( x_tst)[:, 0],它给我另一个值作为auc值。我的第一个问题是如何直接获得auc的加权平均值?我的第二个问题是如何选择正确的切入点以构建具有不平衡数据的混淆矩阵?这是因为默认情况下,分类器使用50%作为构建矩阵的阈值,但是由于我的数据非常不平衡,看来我们需要选择一个正确的阈值。我需要计算TP和FP,这就是为什么我需要这个切入点。

如果我使用权重类来训练模型,它是否可以解决问题(我的意思是默认情况下可以使用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一起使用!有解决问题的主意吗?

我有一个二进制分类任务,我在其中使用XGBClassifier分类器对模型进行拟合,并尝试使用测试集预测'1'和'0'。在此任务中,我的数据多数是非常不平衡的'0'...

machine-learning xgboost weighted-average auc xgbclassifier
1个回答
0
投票

要回答第一个问题,您只需使用roc_auc_score函数的参数weighted

© www.soinside.com 2019 - 2024. All rights reserved.