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

我有一个二元分类任务,我使用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中应用!有什么办法来处理这些问题吗?


回答:

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

例如 –

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

回答你问题的第二部分,你能详细说明一下吗?我可以帮你解决这个问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注