Я работаю над проблемой классификации вторжений, используя набор данных NSL-KDD. Я использовал 10 функций (из 42) для обучения после применения техники исключения рекурсивных объектов с использованием классификатора случайного леса в качестве параметра оценки и индекса Джини в качестве критерия для разделения дерева решений. После обучения классификатора я использую тот же классификатор для прогнозирования классов тестовых данных. Моя оценка перекрестной проверки (Точность, точность, отзыв, f-оценка) с использованием cross_val_score of sklearn дала более 99% оценок для всех четырех оценок. Но построение матрицы путаницы показало обратное с более высокими значениями, видимыми в ложных положительных и ложных отрицательных значениях. Ясно, что они не соответствуют точности и всем этим оценкам. Где я сделал не так?
# Train set contain X_train (dataframe of features) and Y_train (series
# of target labels)
# Test set contain X_test and Y_test
# Classifier variable
clf = RandomForestClassifier(n_estimators = 10, criterion = 'gini')
#Training
clf.fit(X_train, Y_train)
# Testing
Y_pred = clf.predict(X_test)
pandas.crosstab(Y_test, Y_pred, rownames = ['Actual'], colnames =
['Predicted'])
# Scoring
accuracy = cross_val_score(clf, X_test, Y_test, cv = 10, scoring =
'accuracy')
print("Accuracy: %0.5f (+/- %0.5f)" % (accuracy.mean(), accuracy.std() *
2))
precision = cross_val_score(clf, X_test, Y_test, cv = 10, scoring =
'precision_weighted')
print("Precision: %0.5f (+/- %0.5f)" % (precision.mean(), precision.std()
* 2))
recall = cross_val_score(clf, X_test, Y_test, cv = 10, scoring =
'recall_weighted')
print("Recall: %0.5f (+/- %0.5f)" % (recall.mean(), recall.std() * 2))
f = cross_val_score(clf, X_test, Y_test, cv = 10, scoring = 'f1_weighted')
print("F-Score: %0.5f (+/- %0.5f)" % (f.mean(), f.std() * 2))
Я получил точность, точность, отзыв и f-оценка
Accuracy 0.99825
Precision 0.99826
Recall 0.99825
F-Score 0.99825
Однако матрица путаницы показала иначе
Predicted 9670 41
Actual 5113 2347
Я неправильно все тренирую или это просто проблема неправильной классификации из-за плохого выбора функций?