Python混淆矩阵中的模型精度为0%
Posted
技术标签:
【中文标题】Python混淆矩阵中的模型精度为0%【英文标题】:Model precision is 0% in Python confusion matrix 【发布时间】:2020-01-23 15:25:23 【问题描述】:我正在尝试使用 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_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)
我想知道我是否有一些错误会影响我的结果。
【问题讨论】:
我不确定。我在测试集中将其随机拆分为 20%。它可能只在该测试集中放置 1。有没有办法确保测试集同时包含 1 和 0?但是,CSV 文件包含 3,094 (1) 和 437 (0) 【参考方案1】:你的混淆矩阵:
[ 0, 92]
[ 0, 614]
告诉你测试集中有 92 个 0 类元素和 614 个 1 类元素。
似乎无论您向分类器提供什么数据,它都会显示 1。
在没有看到您的数据的情况下,我们只能猜测出了什么问题......
您的数据要么没有“包含”足够信息来预测您的标签,而您的分类器只是“猜测”最常见的类别。或者,您的 1 类数据比 0 类数据多得多,如果您总是猜测 1 而不是尝试正确分类,那么准确度会更好。
你可以做的事情:
1.) 您尝试删除数据中的一些 1 类元素,以便在训练集中拥有相同数量的 1 类和 2 类数据行。 (或从某处获取更多 0 类数据)
2.) 也许对于您的数据,另一个分类器可能比逻辑回归更适合,您可以尝试决策树/svm/adaboost /... 并查看结果。
3.) 如果这是一个现实生活中的问题,您可以尝试使用更好的传感器、来自不同来源或通过特征工程获得更多更好的数据
【讨论】:
以上是关于Python混淆矩阵中的模型精度为0%的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Python 中的混淆矩阵中获取精度、召回率和 f 度量 [重复]