我正在使用Python的逻辑回归来预测二元结果,我的分类报告显示我的模型在目标变量为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_matrixX=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 706weighted avg 0.76 0.87 0.81 706
confusion_matrix (y_test, predictions) # 不预测0array([[ 0, 92], [ 0, 614]], dtype=int64)
我想知道是否有错误影响了我的结果。
回答:
您的混淆矩阵:
[ 0, 92][ 0, 614]
告诉您在测试集中有92个类别0的元素和614个类别1的元素。
看起来无论您向分类器输入什么数据,它都只会输出1。
在没有看到您的数据的情况下,我们只能猜测问题出在哪里…
要么您的数据不包含足够的信息来预测标签,您的分类器只是“猜测”最常见的类别。要么您有太多类别1的数据而类别0的数据太少,以至于准确率在总是猜测1时会更好,而不是试图正确分类。
您可以尝试做以下几件事:
1.) 您可以尝试从数据中删除一些类别1的元素,以便训练集中类别1和类别0的数据行数量相同。(或者从其他地方获取更多类别0的数据)
2.) 对于您的数据,可能其他分类器比逻辑回归更适合,您可以尝试决策树/SVM/Adaboost/…等,看看结果如何。
3.) 如果这是现实生活中的问题,您可以尝试获取更多更好的数据,也许通过更好的传感器,从不同来源或通过特征工程。