2017-06-17 45 views
0

因此,我正在用逻辑回归算法逼近分类问题,并获得了类“1”的测试集的所有预测。该集合非常不平衡,因为它具有超过200k的输入,92%的集合来自类“1”。如果P(Y = 1 | X)> 0.5,Logistic回归通常将输入分类为类“1”。因此,由于测试集中的所有观察值都被归类为1类,我认为可能有一种方法来改变该阈值并将其设置为例如0.75,以便只有P(Y = 1 | X)> 0.75的观察值归类到类1,否则归类0.如何在python中实现它?python中的逻辑回归。概率阈值

model= LogisticRegression(penalty='l2', C=1) 
model.fit(X_train, y_train) 
score=accuracy_score(y_test, model2.predict(X_test)) 
fpr, tpr, thresholds = roc_curve(y_test, model2.predict_proba(X_test)[:,1]) 
roc=roc_auc_score(y_test, model2.predict_proba(X_test)[:,1]) 
cr=classification_report(y_test, model2.predict(X_test)) 

PS。由于来自测试集的所有观察结果都被归类为1类,因此F1分数和分类报告中的召回率为0.可能通过更改阈值来解决此问题。

回答

2

您可能想要尝试的一件事是平衡类而不是更改阈值。 Scikit-learn通过class_weights支持这一点。例如,您可以尝试model = LogisticRegression(penalty='l2', class_weight='balanced', C=1)。看看文件的更多细节:

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

+0

谢谢。有效。你知道如何处理MLP分类器中的相同问题吗?在这种情况下,f1分数和召回也是0。 –

+1

如果您使用keras,您可以在这里找到答案:https://datascience.stackexchange.com/questions/13490/how-to-set-class-weights-for-imbalanced-classes-in-keras。它的工作原理类似Scikit-learn的MLPClassifier不支持这一点。或者,您可以对最小的类进行过采样,或对最大的类进行欠采样。 – Simon