Загалом, ефективність класифікаторів порівнюється за допомогою точності, це показник кількості правильно класифікованих екземплярів, поділених на загальну кількість екземплярів. Однак із даних тренінгу ми можемо краще наблизити очікувану помилку від нашого класифікатора, коли ми використовуємо методики ансамблевого навчання або мішковини.
Помилка поза сумкою
Цей показник є точністю прикладів використанням усіх дерев у випадковому лісовому ансамблі, для якого він був пропущений під час навчання. Таким чином, він виступає як напівтестовий екземпляр. Ви можете зрозуміти, наскільки добре ваш класифікатор може узагальнити за допомогою цього показника.хi
Щоб реалізувати 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
Як очікувалося, точність моделі при оцінці навчального набору дуже висока. Однак це безглуздо, тому що ви дуже добре можете переозброїти свої дані, і, отже, ваша модель є сміттям. Однак ми можемо використати оцінку "out of-bag" як
print(forest.oob_score_)
0,86453272101
Це точність при оцінці наших випадків у навчальному наборі, використовуючи лише дерева, для яких вони були пропущені. Тепер давайте обчислимо бал на тестовому наборі як
print('Score: ', forest.score(X_test, y_test))
Оцінка: 0,86517733935
Ми бачимо, що точність, виміряна oob, дуже схожа на ту, отриману з тестовим набором. Таким чином, з теорії випливає, що точність 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