일반적으로 분류기의 성능은 정확도를 사용하여 비교되며 올바르게 분류 된 인스턴스 수를 총 인스턴스 수로 나눈 값입니다. 그러나 훈련 데이터를 통해 앙상블 학습 또는 배깅 기술을 사용할 때 분류기에서 예상되는 오류를 더 잘 근사화 할 수 있습니다.
가방 부족 오류
xi
sklearn에서 oob을 구현하려면 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 계산
예, 당신은 이것을 할 수 있습니다! 그러나 코드가 정확히 어떻게 구성되는지에 달려 있습니다. 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