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.) 如果这是一个现实生活中的问题,你会尝试从不同的来源或通过特征工程获得更多更好的数据,也许使用更好的传感器
我试图在 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.) 如果这是一个现实生活中的问题,你会尝试从不同的来源或通过特征工程获得更多更好的数据,也许使用更好的传感器