Python 混淆矩阵中的模型精度为 0%

Model precision is 0% in Python confusion matrix

我试图在 Python 中使用逻辑回归预测二元结果,而我的 classification_report 显示我的模型以 0% 的精度预测我的目标变量 = 0。它以 87% 的精度预测我的目标变量=1

from sklearn.linear_model import LogisticRegression 
from sklearn.model_selection import train_test_split 
from sklearn.metrics import classification_report 
from sklearn.metrics import confusion_matrix

X=df[['RegDec', 'SchoolDiv', 'SEX', 'Honor', 'TestOptional', 'TERRITORY', 'AcadamicIndex',
     'INSTAward','NEED', 'TOTAWD', 'ETHN3', 'IR_Total', 'pell']]
y= df ['Retained']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)


logmodel = LogisticRegression()
logmodel.fit(X_train,y_train) 

predictions=logmodel.predict (X_test)
print (classification_report(y_test,predictions)) 

为什么我的“0”精度为 0?这是输出

 precision    recall  f1-score   support

           0       0.00      0.00      0.00        92
           1       0.87      1.00      0.93       614

    accuracy                           0.87       706
   macro avg       0.43      0.50      0.47       706
weighted avg       0.76      0.87      0.81       706
confusion_matrix (y_test, predictions) # not predicting 0s

array([[  0,  92],
       [  0, 614]], dtype=int64)

我想知道是否有一些错误影响了我的结果。

你的混淆矩阵:

[  0,  92]
[  0, 614]

告诉您在您的测试集中有 92 个 class 0 的元素和 614 个 class 1 的元素。

似乎无论您向 classifier 提供什么数据,它都会显示 1。

在没有看到您的数据的情况下,我们只能猜测出了什么问题...

要么您的数据 "contain" 没有足够的信息来预测您的标签,而您的 classifier 只是 "guesses" 最常见的 class。或者你的 class 1 的数据比 class 0 多得多,所以如果你总是猜测 1 而不是尝试正确地 classify,那么准确性会更好。

您可以做的事情:

1.) 您尝试删除数据的一些 class-1 元素,以便在您的数据行中具有相同数量的 class 1 和 class 2 数据行训练集。 (或从某处获取更多 class 0 数据)

2.) 也许对于您的数据,另一个 classifier 可能比逻辑回归更适合,您可以尝试决策树/svm/adaboost /...并查看结果。

3.) 如果这是一个现实生活中的问题,你会尝试从不同的来源或通过特征工程获得更多更好的数据,也许使用更好的传感器