输入到precision_recall_curve - predict 或 predict_proba 输出?
Posted
技术标签:
【中文标题】输入到precision_recall_curve - predict 或 predict_proba 输出?【英文标题】:Input to precision_recall_curve - predict or predict_proba output? 【发布时间】:2013-08-23 06:15:55 【问题描述】:我正在使用高斯朴素贝叶斯从 Pandas 数据框训练模型,但在使用precision_recall_curve 时出现错误。文档说precision_recall_curve将预测概率作为输入(至少在我阅读时)所以我希望下面的工作(xtrain和xtest分别是具有736和184行的Pandas数据帧;ytrain / ytest是具有736和184的系列行):
nb = GaussianNB()
nb.fit(xtrain, ytrain)
predicted = nb.predict_proba(xtest)
precision, recall, threshold = precision_recall_curve(ytest, predicted)
我希望上述方法能够正常工作,但是我收到“IndexError:索引 230 超出大小 184 的范围”。如果我改为这样做:
predicted = nb.predict(xtest)
precision, recall, threshold = precision_recall_curve(ytest, predicted)
然后它会正确执行。 184 是 xtest 和 ytest 中的行数,但 230 不是任何这些结构的维度。有人可以解释其中的区别或我应该如何为此目的使用precision_recall_curve?
【问题讨论】:
我不知道 230 来自哪里,但你真的不应该在 Pandas 数据结构上使用 scikit-learn 估计器。 scikit-learn 需要 NumPy 约定,而 Pandas 违反了其中的一些约定(例如,将一维数组转换为列向量而不是行向量)。另外,这是一个二元分类任务吗? 【参考方案1】:如果这是二元分类,请尝试使用以下方法,
predicted = nb.predict_proba(xtest)
precision, recall, threshold = precision_recall_curve(ytest, predicted[:,1])
【讨论】:
以上是关于输入到precision_recall_curve - predict 或 predict_proba 输出?的主要内容,如果未能解决你的问题,请参考以下文章
使用precision_recall_curve 计算最大f1 分数?
在scikit的precision_recall_curve中,为啥threshold与recall和precision的维度不同?