调整 sklearn 的逻辑回归模型的概率阈值

机器算法验证 机器学习 物流 Python scikit-学习 不平衡类
2022-03-17 06:34:14

我是一名 10 年级学生,正在研究二元分类问题,我决定使用 Scikit-Learn 的逻辑回归模型。我希望根据一天中的时间、一周中的一天或两者来预测患者的依从性。我已经模拟了数据,并且已经使某些时间段有更多的 0(意味着患者没有服药)来模拟趋势,但我的模型仍然为每个输入预测“1”。我相信我的数据非常不平衡,并且没有任何类权重,模型将每个输入都放入“1”类。显然,这会导致可怕的准确性、AUC 以及介于两者之间的所有内容。Sklearn 确实有一个 class_weight 参数,但由于这是二分法并且只给出“平衡”选项,它确实没有帮助,并且在某些情况下使准确性比假设所有内容都在 1 类中要差得多。鉴于我从数据中看到的情况,我认为将阈值更改为 0.75 会起作用,但我在任何文档中都找不到有关调整阈值的任何信息。

无论如何调整这个阈值?或者任何其他方式来处理我的不平衡数据?

如果您希望我详细说明我的数据的细节,请告诉我。

2个回答

几乎没有充分的理由这样做!正如 Kjetil 上面所说,请参见此处。

你应该能够从'predict_proba'得到概率输出,然后你可以写

decisions = (model.predict_proba() >= mythreshold).astype(int)

请注意,逻辑回归本身没有阈值。然而,不幸的是,sklearn 确实有一个“决策函数”,可以直接在“预测”函数中实现阈值。因此,不幸的是,他们认为逻辑回归是一个分类器。

假设您的自定义阈值为 0.6。它应该是:

y_pred_new_threshold = (logreg.predict_proba(X_test)[:,1]>=0.6).astype(int)