В целом, производительность классификаторов сравнивается с использованием точности, это мера количества правильно классифицированных экземпляров, деленная на общее количество экземпляров. Тем не менее, из данных обучения мы можем получить лучшее приближение ожидаемой ошибки от нашего классификатора, когда мы используем ансамблевое обучение или методы упаковки.
Ошибка вне пакета
Этот показатель является точностью примеров использующих все деревья в ансамбле случайных лесов, для которых он был опущен во время обучения. Таким образом, он действует как пример полу-тестирования. Вы можете понять, насколько хорошо ваш классификатор может обобщать, используя эту метрику.Икся
Чтобы реализовать oob в sklearn, вам нужно указать его при создании объекта Random Forests как
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Тогда мы можем обучить модель
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Оценка: 0,979921928817
Как и следовало ожидать, точность модели при оценке тренировочного набора очень высока. Тем не менее, это бессмысленно, потому что вы вполне можете перегружать свои данные и, следовательно, ваша модель является мусором. Тем не менее, мы можем использовать счет «из сумки» как
print(forest.oob_score_)
+0,86453272101
Это точность при оценке наших экземпляров в обучающем наборе с использованием только деревьев, для которых они были опущены. Теперь давайте посчитаем оценку на тестовом наборе как
print('Score: ', forest.score(X_test, y_test))
Оценка: 0,86517733935
Мы видим, что точность, измеренная oob, очень похожа на точность, полученную с помощью тестового набора. Таким образом, из теории следует, что точность oob является лучшим показателем, с помощью которого можно оценить производительность вашей модели, а не просто оценку. Это является следствием моделей мешков и не может быть сделано с другими типами классификаторов.
Расчет работы с использованием различных метрик
Да, ты можешь это сделать! Однако это зависит от того, как именно ваш код структурирован. Я не уверен, как вы можете включить OOB и AUC вместе с cross_val_score
функцией. Однако, если вы выполняете перекрестную сверку вручную, вы можете сделать следующее, алгоритм случайных лесов в sklearn предоставляет вам функцию решения oob как
print(forest.oob_decision_function_)
Класс может быть получен с помощью
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Затем мы можем рассчитать AUC с помощью следующего
metrics.roc_auc_score(y_train, pred_train)
+0,86217157846471204