Почему мой показатель обнаружения высокий, несмотря на очевидные неправильные классификации во время прогнозирования? - PullRequest
0 голосов
/ 09 июня 2019

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

Я неправильно все тренирую или это просто проблема неправильной классификации из-за плохого выбора функций?

1 Ответ

0 голосов
/ 21 июня 2019

Вы не сравниваете эквивалентные результаты!Для матрицы путаницы вы тренируетесь (X_train, Y_train) и тестируете (X_test, Y_test).Тем не менее, перекрестное значение соответствует оценке в k-1 сгибах (X_test, Y_test) и проверяет его на оставшемся сгибе (X_test, Y_test), потому что crossvalscore выполняет свою собственную перекрестную проверку (с 10 сгибами здесь) для предоставленного вами набора данных.,Посмотрите документацию по кросс-баллам для более подробного объяснения.

Таким образом, вы не подходите и тестируете свой алгоритм на одних и тех же данных.Это может объяснить некоторую несогласованность результатов.

...