Точность модели составляет 0% в матрице путаницы Python - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь предсказать двоичный результат, используя логистическую регрессию в Python, и мой классификационный отчет показывает, что моя модель прогнозирует с точностью 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)

Я хочу знать, есть ли какие-то ошибки, которые влияют на мои результаты.

1 Ответ

0 голосов
/ 23 сентября 2019

Ваша матрица путаницы:

[  0,  92]
[  0, 614]

говорит о том, что в вашем наборе тестов 92 элемента класса 0 и 614 класса 1.

Кажется, что независимо от того, какие данные вынапишите свой классификатор, он говорит: 1.

Не видя ваших данных, мы можем только догадываться, что не так ...

У вас есть данные, которые "не содержат" достаточно информации, чтобы предсказать вашу меткуа ваш классификатор просто «угадывает» самый частый класс.Или у вас гораздо больше данных класса 1, чем класса 0, поэтому точность лучше, если вы всегда угадываете 1, а не пытаетесь правильно классифицировать.

Что вы можете сделать:

1.) Вы пытаетесь удалить некоторые элементы класса 1 из ваших данных, чтобы у вас было одинаковое количество строк данных класса 1 и класса 2 в вашемОбучающий набор.(или получить больше данных класса 0 откуда-нибудь)

2.) Возможно, для ваших данных другой классификатор может подойти лучше, чем логистическая регрессия, вы можете попробовать деревья решений / svm / adaboost / ... и посмотреть результаты.

3.) Если это реальная проблема, вы пытаетесь получить больше и лучше данных, возможно, с лучшими датчиками, из разных источников или с помощью разработки функций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...