2017-06-17 84 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