Проблема модели прогнозирования логистической регрессии Sklearn - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь предсказать вероятность того, является ли инцидент IS_Slight основанным на времени суток.Однако у меня есть ощущение, что я где-то сделал неправильный шаг, поскольку моя матрица путаницы в MultinomialNB и LogisticRegression дает странные результаты, то есть только ложные положительные и истинные положительные.Я чувствую, что должно быть несколько Истинных Отрицательных и Ложных Отрицательных.Низкое roc_auc_score также сбивает меня с толку, не должно ли оно быть высоким?Я знаю, что это много, чтобы просмотреть, но спасибо за любой совет.

#if word slight found then set to 1 else set to 0
df['IS_SLIGHT'] = df['Accident_Severity'].apply(lambda x: 1 if 'Slight' in x else 0)

cvec = CountVectorizer()
X = df.Time
y = df.IS_SLIGHT
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=1)

cvec = CountVectorizer()
cvec.fit(X_train)
RT_train = pd.DataFrame(cvec.transform(X_train).todense(),columns=cvec.get_feature_names())
RT_test = pd.DataFrame(cvec.transform(X_test).todense(),columns=cvec.get_feature_names())

print(RT_train)

Out:

      afternoon   evening   morning   night  
 --- ----------- --------- --------- ------- 
  0           0         1         0       0  
  1           0         1         0       0  
  2           0         0         1       0 

...

print(RT_train.shape) 

Out:(1390029, 4)

print(RT_test.shape)

Out: (463344, 4)

print(y_train.shape)

Out: (1390029,)

print(y_test.shape)

Out: (463344,)

lr = LogisticRegression()
lr.fit(RT_train,y_train)

lrypred = lr.predict(RT_test)
print(metrics.accuracy_score(y_test, lrypred))

Выход: 0,8502969715805104

print(metrics.confusion_matrix(y_test, lrypred))

Выход: [[0 69364] [0 393980]]

nb = MultinomialNB()

nb.fit(RT_train,y_train)
ypred = nb.predict(RT_test)

print(metrics.accuracy_score(y_test,ypred))

Выход: 0,8502969715805104

print(metrics.confusion_matrix(y_test,ypred))

Out: [[0 69364] [0 393980]]

y_pred_prob = nb.predict_proba(RT_test)[:,1]
lry_pred_prob = lr.predict_proba(RT_test)[:, 1]
print(y_pred_prob)

Out: [0.85453109 0.85453109 0.78504675 ... 0.85453109 0.78504675 0.86917669]

print(metrics.roc_auc_score(y_test,y_pred_prob))

Out:0.5436548840102361

print(metrics.roc_auc_score(y_test,lry_pred_prob))

Out: 0.5436548840102361

print(classification_report(y_test, lrypred))

Out:

                 precision   recall     f1-score      support  
 -------------- ----------- ---------- ------------ ---------- 
  0                   0.00       0.00         0.00      69364  
  1                   0.85       1.00         0.92     393980  
  micro avg           0.85       0.85         0.85     463344  
  macro avg           0.43       0.50         0.46     463344  
  weighted avg        0.72       0.85         0.78     463344 
...