Python中的Spark ML Logistic回归:设置模型阈值以最大化F-Measure

时间:2017-12-07 00:03:43

标签: apache-spark classification logistic-regression prediction threshold

我使用管道在Spark中训练了逻辑回归。它跑了,我正在看模型诊断。

我创建了我的模型摘要(lr_summary = lrModel.stages [-1] .summary)。 之后我几乎复制了this webpage的代码。这一切都有效,直到我尝试使用此示例Python代码确定基于F-measure的最佳阈值:

# Set the model threshold to maximize F-Measure
fMeasure = lr_summary.fMeasureByThreshold
maxFMeasure = fMeasure.groupBy().max('F-Measure').select('max(F-Measure)').head()
bestThreshold = fMeasure.where(fMeasure['F-Measure'] == maxFMeasure['max(F-Measure)']).select('threshold').head()['threshold']
lr.setThreshold(bestThreshold)

不幸的是,我在第3行收到错误(bestThreshold =): TypeError:' NoneType'对象没有属性' getitem '

有什么建议吗?

非常感谢你!

1 个答案:

答案 0 :(得分:1)

我无法重现此问题,但模型可能没有摘要(在这种情况下,我会期望maxFMeasure = ...行中的属性错误)。您可以检查模型是否有一个:

lrModel.stages[-1].hasSummary

此外,您可以使此代码更简单:

bestThreshold = fMeasure.orderBy(fMeasure['F-Measure'].desc()).first().threshold