我正在尝试使用Python中的逻辑回归来预测二进制结果,而我的classification_report显示我的模型对于目标变量= 0的预测精度为0%。我的目标变量= 1的预测精度为87%
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 :(得分:0)
您的混淆矩阵:
[ 0, 92]
[ 0, 614]
告诉您在测试集中有92个0类元素和614个1类元素。
似乎无论您使用什么数据输入分类器,它都显示为1。
在没有看到您的数据的情况下,我们只能猜测出了什么问题...
您的数据都不“包含”足够的信息来预测标签,而分类器仅“猜测”了最频繁的课程。或者,您拥有的类别1的数据比类别0的多得多,因此如果您总是猜测1而不是尝试正确分类,则准确性会更高。
您可以做的事情:
1。)您尝试删除数据的某些1类元素,以便在训练集中拥有相同数量的1类和2类数据行。 (或从某处获取更多的0类数据)
2。)也许对于您的数据,另一个分类器可能比逻辑回归更适合,您可以尝试决策树/ svm / adaboost / ...并查看结果。
3。)如果是现实生活中的问题,则尝试从不同来源或通过特征工程获取更多更好的数据,也许使用更好的传感器