我正在使用LogisticRegression从学习包,并有一个关于分类的快速问题。我为我的分类器建立了一个ROC曲线,结果是我的训练数据的最佳阈值在0.25左右。我假设创建预测时的默认阈值是0.5。在进行10倍交叉验证时,如何更改此默认设置,以了解模型中的准确性?基本上,我想让我的模型预测大于0.25,而不是0.5的人的“1”。我已经翻阅了所有的文档,似乎什么也找不到。
发布于 2015-07-14 21:42:31
这不是一个内置的功能。您可以“添加”它,方法是将LogisticRegression类包装在自己的类中,并添加在自定义
predict()
方法中使用的
threshold
属性。
然而,有些人警告说:
LogisticRegression.decision_function()
返回到选定的分离超平面的有符号距离。如果您查看的是
predict_proba()
,那么您将看到超平面距离的
logit()
,阈值为0.5。但计算起来要昂贵得多。
class_weight
,如果您有一个不平衡的问题,而不是手动设置阈值。这将迫使分类器选择远离感兴趣类的超平面。
发布于 2018-09-10 08:12:53
我想给出一个实际的答案。
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, recall_score, roc_auc_score, precision_score
import numpy as np
X, y = make_classification(
n_classes=2, class_sep=1.5, weights=[0.9, 0.1],
n_features=20, n_samples=1000, random_state=10
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
clf = LogisticRegression(class_weight="balanced")
clf.fit(X_train, y_train)