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