Nói chung, hiệu suất của các phân loại được so sánh bằng cách sử dụng độ chính xác, đây là thước đo số lượng các trường hợp được phân loại chính xác chia cho tổng số trường hợp. Tuy nhiên, từ dữ liệu đào tạo, chúng tôi có thể nhận được xấp xỉ tốt hơn các lỗi dự kiến từ trình phân loại của chúng tôi khi chúng tôi đang sử dụng các kỹ thuật học tập hoặc đóng gói.
Lỗi túi
xTôi
Để triển khai oob trong sklearn, bạn cần chỉ định nó khi tạo đối tượng Rừng ngẫu nhiên là
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Sau đó chúng ta có thể đào tạo mô hình
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Điểm: 0,979921928817
Như mong đợi độ chính xác của mô hình khi đánh giá tập huấn luyện là rất cao. Tuy nhiên, điều này là vô nghĩa vì bạn rất có thể đang quá tải dữ liệu của mình và do đó mô hình của bạn là rác rưởi. Tuy nhiên, chúng ta có thể sử dụng điểm số ngoài túi như
print(forest.oob_score_)
0,86453272101
Đây là độ chính xác trong khi đánh giá các thể hiện của chúng ta trong tập huấn luyện chỉ sử dụng các cây mà chúng bị bỏ qua. Bây giờ hãy tính điểm trên bộ thử nghiệm là
print('Score: ', forest.score(X_test, y_test))
Điểm: 0.86517733935
Chúng tôi thấy rằng độ chính xác được đo bằng oob rất giống với độ chính xác thu được với bộ thử nghiệm. Do đó, thông qua lý thuyết rằng độ chính xác oob là một số liệu tốt hơn để đánh giá hiệu suất của mô hình của bạn thay vì chỉ là điểm số. Đây là hậu quả của các mô hình đóng bao và không thể thực hiện được với các loại phân loại khác.
Tính oob bằng các số liệu khác nhau
Vâng, bạn có thể làm điều này! Tuy nhiên, nó phụ thuộc vào cách chính xác mã của bạn được cấu trúc. Tôi không chắc làm thế nào bạn có thể bao gồm oob và AUC cùng với cross_val_score
chức năng. Tuy nhiên, nếu bạn đang thực hiện các lần xác thực chéo một cách thủ công, bạn có thể thực hiện các thao tác sau, thuật toán rừng ngẫu nhiên trong sklearn cung cấp cho bạn chức năng quyết định của oob như
print(forest.oob_decision_function_)
Lớp có thể được lấy bằng cách sử dụng
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Sau đó, chúng ta có thể tính toán AUC bằng cách sử dụng như sau
metrics.roc_auc_score(y_train, pred_train)
0.86217157846471204