微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sklearn 精确召回曲线 pos_label 用于不平衡数据集的类别概率

如何解决Sklearn 精确召回曲线 pos_label 用于不平衡数据集的类别概率


我想使用精确召回分数来评估我的模型,因为我的数据是不平衡的。由于我有一个二元分类,我在我的神经网络末尾使用了一个 softmax输出分数和真实标签看起来像:

y_score = [[0.4,0.6],[0.6,0.4],[0.3,0.7],...   ]
y_true = [1,...]

其中y_score[:,0]对应类0的概率。
我的正面标签0,因此在我的情况下,负面标签1

由于我的数据集是未平衡的(负数多于正数),我想使用精确召回分数 (AUPRC) 来评估我的分类器。函数 sklearn.metrics.precision_recall_curve 接受一个参数 pos_label,我会将其设置为 pos_label = 0。但是参数probas_pred 接受形状概率的 ndarray (n_samples,)。

我的问题是,自从我设置了 y_score 后,我应该为 probas_pred 取哪一个 pos_label = 0 列?

我希望我的问题很清楚。
提前致谢!

解决方法

它应该是上面示例中的第一列,您可以通过以下方法进行检查以确保。

使用示例数据集:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.datasets import make_blobs
from sklearn.metrics import precision_recall_curve

X,y = make_blobs(n_samples=[400,2000],centers=None,n_features=5,random_state=999,cluster_std=5)

X_train,X_test,y_train,y_test = train_test_split(
    X,y,test_size=0.2,random_state=111)

训练分类器:

clf = MLPClassifier(hidden_layer_sizes=(3,3),random_state=999)
clf.fit(X_train,y_train)

检查课程:

clf.classes_
array([0,1])

您可以将其放在数据框上以查看它是否正确:

    0   1   actual
0   0.999734    0.000266    0
1   0.001253    0.998747    1
2   0.000137    0.999863    1
3   0.000113    0.999887    1
4   0.003173    0.996827    1
... ... ... ...
475 0.014316    0.985684    1
476 0.012767    0.987233    1
477 0.062735    0.937265    1
478 0.000048    0.999952    1
479 0.999733    0.000267    0

然后计算:

prec,recall,thres = precision_recall_curve(y_true=y_test,probas_pred= clf.predict_proba(X_test)[:,0],pos_label=0)

并绘制它......如果你翻转你的值,这看起来很奇怪,但低于它的正确性:

plt.plot(prec,recall)

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。