MNIST RandomForestClassifier точность уменьшается при масштабировании данных? - PullRequest
0 голосов
/ 28 января 2019

Я занимаюсь классификацией с набором данных MNIST (используя справочную книгу Аурелиена Жерона "Hands-On").После обучения различных моделей я остановился на RandomForestClassifier, который был приспособлен к обучающему набору, который был расширен с дополнительными изображениями (смещенными версиями исходных изображений) и масштабирован.После проверки точности модели на тестовом наборе она показала результат примерно на 4% хуже, чем при использовании cross_val_score с 3 сгибами на тренировочном наборе.Почему это может быть?

Так как я нашел это странным, я решил проверить точность прогнозирования набора тестов с некоторыми другими моделями, которые я обучал, включая SGD с использованием OvA, SGD с использованием OvO и RandomForestClassifier.Для каждого я проверял, как модель, которая была обучена с масштабированным обучающим набором, выполнялась с масштабированным тестовым набором, по сравнению с тем, как модель, обученная с немасштабированным обучающим набором, выполнялась с немасштабированным тестовым набором.

Модели SGD работали примерно так, как и ожидалось (примерно так же, как cross_val_score обучающего набора), включая в каждом случае модель, обученную на масштабированных данных, работала лучше, чем модель, обученная на немасштабированных данных;даже RandomForestClassifier, обученный с немасштабированными данными, выполнялся, как и ожидалось, на тестовом наборе - только RandomForestClassifier, обученный с масштабированными данными, обнаружил значительное падение (несмотря на то, что показал наилучшие результаты с помощью cross_val_score).

#Showing the cross_val_score results of the RandomForestClassifier with scaled data during training
forest_clf_accuracies_scaled_expanded = cross_val_score(forest_clf_scaled_expanded, X_train_scaled_expanded, y_train_expanded, cv=3, scoring = 'accuracy')
forest_clf_accuracy_mean_scaled_2 = forest_clf_accuracies_scaled_2.mean()
print(forest_clf_accuracies_scaled_2)
print(forest_clf_accuracy_mean_scaled_2)
OUTPUT: [0.93771246 0.94149707 0.94169125]
OUTPUT: 0.9403002620167648

#Testing that model on the test set returns worse than expected result
final_model = forest_clf_scaled_expanded

prepared_test_set = scaler.fit_transform(X_test.astype(np.float64))

final_predictions = final_model.predict(prepared_test_set)

final_accuracy = final_model.score(prepared_test_set, y_test)
final_accuracy
OUTPUT: 0.9036

#Out of curiosity, I see how the RandomForestClassifier trained on non-scaled data performs; it performs as expected (it's cross_val_score had been ~.94)
forest_clf_2.score(X_test, y_test)
OUTPUT: 0.9475

#Now I wanted to see how scaled and non-scaled data performed with the other classifiers; here are the test set results for SGD using OvO; they both perform on par with their cross_val_scores, with the scaled data performing a bit better than the unscaled
ovo_clf_scaled_expanded.score(prepared_test_set, y_test)
OUTPUT: 0.9265
ovo_clf_expanded.score(X_test, y_test)
OUTPUT: 0.9189

Я ожидал выхода RandomForestClassifierпо масштабированным данным примерно 0,94, но вместо этого результат был примерно 0,90.

Спасибо.

...