Điểm oob tốt cho các khu rừng ngẫu nhiên với sklearn, phân loại ba lớp là gì? [bản sao]


8

Tôi có dữ liệu học tập bao gồm ~ 45k mẫu, mỗi mẫu có 21 tính năng. Tôi đang cố gắng đào tạo một trình phân loại rừng ngẫu nhiên trên dữ liệu này, được gắn nhãn cho 3 lớp (-1, 0 và 1). Các lớp ít nhiều bằng nhau về kích thước của chúng.

Mô hình phân loại rừng ngẫu nhiên của tôi đang sử dụng ginilàm tiêu chí chất lượng phân chia của nó, số lượng cây là 10 và tôi không giới hạn độ sâu của cây.

Hầu hết các tính năng đã cho thấy tầm quan trọng không đáng kể - giá trị trung bình là khoảng 5%, một phần ba trong số đó có tầm quan trọng 0, một phần ba trong số đó có tầm quan trọng cao hơn giá trị trung bình.

Tuy nhiên, có lẽ thực tế nổi bật nhất là điểm oob (ngoài túi): ít hơn 1% một chút. Nó khiến tôi nghĩ rằng mô hình thất bại, và thực sự, thử nghiệm mô hình trên một bộ kích thước độc lập mới ~ 40k, tôi đã đạt được số điểm 63% (nghe có vẻ tốt), nhưng kiểm tra sâu hơn về ma trận nhầm lẫn đã cho tôi thấy rằng mô hình chỉ thành công cho lớp 0 và thất bại trong khoảng 50% trường hợp khi quyết định giữa 1 và -1.

Đầu ra của Python được đính kèm:

array([[ 7732,   185,  6259],
       [  390, 11506,   256],
       [ 7442,   161,  6378]])

Điều này là tự nhiên bởi vì lớp 0 có các thuộc tính đặc biệt giúp dễ dự đoán hơn nhiều. Tuy nhiên, có đúng là điểm oob mà tôi tìm thấy đã là một dấu hiệu cho thấy mô hình không tốt? Điểm oob tốt cho rừng ngẫu nhiên là gì? Có một số định luật giúp xác định xem một mô hình là "tốt" hay không, chỉ sử dụng điểm oob hoặc kết hợp với một số kết quả khác của mô hình?


Chỉnh sửa: sau khi xóa dữ liệu xấu (khoảng một phần ba dữ liệu), các nhãn nhiều hơn hoặc ít hơn 2% cho 0 và 49% cho mỗi -1 / + 1. Điểm oob là 0,011 và điểm trên dữ liệu kiểm tra là 0,49, với ma trận nhầm lẫn hầu như không thiên về lớp 1 (khoảng 3/4 dự đoán).


2
Làm rõ. Bạn đang sử dụng scikit tìm hiểu ? Và nó đang báo cáo số điểm oob <.001? Sau đó, sử dụng hàm .score trên dữ liệu mới mà bạn nhận được .63? Nói chung, tôi đã tìm thấy điểm oob để phản ánh hoặc đánh giá thấp điểm xác nhận chéo. Tôi nghĩ rằng điểm số trong phân loại học scikit có nghĩa là độ chính xác trung bình giữa các lớp (nếu tôi đang đọc tài liệu đúng không?) Vì vậy chúng không nên được so sánh trực tiếp với độ chính xác tổng thể / không có nghĩa nhưng điều này phụ thuộc vào việc thực hiện và không nên gây ra điều này sự khác biệt lớn
Ryan Bressler

Có, tôi đang sử dụng scikit learn, điểm oob thấp hơn 0,01 và điểm trên dữ liệu kiểm tra là khoảng 0,63.
Bạch

Các hàng của bạn có độc lập hay bạn có các phép đo lặp lại của cùng một trường hợp (hoặc dữ liệu phân cấp / cụm khác)? Ngoài ra: vui lòng làm rõ: "điểm" oob của bạn là thước đo lỗi hay thước đo thỏa thuận?
cbeleites không hài lòng với SX

Hàng của tôi không lặp lại nhưng chúng có thể phụ thuộc. Tôi tin rằng scikitđó oob_scorelà một điểm số, nghĩa là một thước đo của sự đồng ý. Tôi không thể tìm thấy nó tài liệu, tuy nhiên.
Bạch

Một tìm kiếm nhanh đã đưa tôi đến trang người rừng ngẫu nhiên, trong đó có ghi "oob_score: bool Có nên sử dụng các mẫu ngoài túi để ước tính lỗi tổng quát hóa" vì vậy đây có vẻ như là một biện pháp lỗi đối với tôi. Nếu điều này là đúng, ước tính oob của bạn bị quá mức quá mức - đó sẽ là một "triệu chứng" dự kiến ​​của các hàng phụ thuộc.
cbeleites không hài lòng với SX

Câu trả lời:


4

sklearn's RF oob_score_(lưu ý dấu gạch dưới) thực sự không dễ hiểu so với R, sau khi đọc tài liệu và mã nguồn của sklearn. Lời khuyên của tôi về cách cải thiện mô hình của bạn như sau:

  1. RF của sklearn đã từng sử dụng mặc định khủng khiếp của max_features=1(như trong "thử mọi tính năng trên mỗi nút"). Sau đó, nó không còn thực hiện cột ngẫu nhiên (/ tính năng) - giống như một khu rừng ngẫu nhiên. Thay đổi điều này thành ví dụ max_features=0.33(như R's mtry) và chạy lại. Hãy cho chúng tôi điểm số mới.

  2. "Hầu hết các tính năng đã cho thấy tầm quan trọng không đáng kể" . Sau đó, bạn cần thực hiện Lựa chọn tính năng, theo tài liệu - để phân loại. Xem tài liệu và các bài viết khác ở đây trên CrossValidated.SE. Thực hiện FS trên một bộ giữ chỗ khác (giả sử 20-30%) so với phần còn lại của khóa đào tạo, sử dụng ví dụ sklearn.cross_validation.train_test_split()(có, tên này hơi sai lệch). Bây giờ hãy cho chúng tôi biết điểm số bạn nhận được sau khi FS?

  3. Bạn đã nói "sau khi xóa dữ liệu xấu (khoảng một phần ba dữ liệu), các nhãn nhiều hơn hoặc ít hơn 2% cho 0 và 49% cho mỗi -1 / + 1" ; sau đó bạn có một sự mất cân bằng lớp nghiêm trọng . Ngoài ra: "ma trận nhầm lẫn cho thấy mô hình chỉ thành công cho lớp 0 và thất bại trong khoảng 50% các trường hợp giữa +1 và -1" . Đây là một triệu chứng của sự mất cân bằng lớp học. Hoặc bạn sử dụng lấy mẫu phân tầng hoặc huấn luyện bộ phân loại với các ví dụ cho lớp +1 và -1. Bạn có thể thực hiện phân loại OAA (Một lần chống lại tất cả) hoặc phân loại (Một lần nữa). Hãy thử ba phân loại OAA, một cho mỗi lớp. Cuối cùng cho chúng tôi biết những điểm số?


6
Chỉ cần FYI, trong scikit 0.16.1 , mặc định cho max_features là "auto" chứ không phải 1 trong đó "auto" dịch sang sqrt (number_features).
firefly2442

1

Không có thứ gọi là oob_score tốt, sự khác biệt giữa valid_score và oob_score mới là vấn đề.

Hãy nghĩ về oob_score như một điểm số cho một số tập hợp con (giả sử oob_set) của tập huấn luyện. Để tìm hiểu làm thế nào nó tạo ra tham khảo này .

oob_set được lấy từ tập huấn luyện của bạn. Và bạn đã có bộ xác thực của mình (giả sử, valid_set).

Giả sử một kịch bản trong đó, verify_score của bạn là 0,7365 và oob_score là 0,8329

Trong kịch bản này, mô hình của bạn hoạt động tốt hơn trên oob_set, được lấy trực tiếp từ tập dữ liệu đào tạo của bạn. Cho biết, verify_set dành cho một khoảng thời gian khác. (giả sử training_set có các bản ghi cho tháng "tháng 1" và verify_set có các bản ghi cho tháng "tháng 7"). Vì vậy, hơn cả một bài kiểm tra về hiệu suất của mô hình, oob_score là bài kiểm tra cho "mức độ đại diện của bạn là Validation_set".

Bạn phải luôn đảm bảo rằng bạn có một xác nhận đại diện tốt, bởi vì điểm số được sử dụng làm chỉ số cho hiệu suất của mô hình của chúng tôi. Vì vậy, mục tiêu của bạn là, để có ít sự khác biệt giữa oob_score và valid_score càng tốt.

Tôi thường sử dụng oob_score với verify_score để xem tính hợp lệ của tôi. Tôi đã học được kỹ thuật này từ Jeremy Howard .


0

Q: Điểm oob tốt cho các khu rừng ngẫu nhiên với sklearn, phân loại ba lớp là gì?

A: Phụ thuộc. Theo quan điểm của tôi, nếu các mẫu học tập và kiểm tra được rút ra từ cùng một phân phối, thì - trong quan điểm của tôi - OOB bằng với xác thực chéo khoảng 3 lần. Vì vậy, nếu chúng tôi lặp lại cùng một câu hỏi nhưng với "xác thực chéo 3 lần", câu trả lời sẽ giống nhau, đó là "nói chung, độ chính xác cao nhất của merrier, trừ khi bạn sợ điều chỉnh quá mức việc học của mình vì ai đó nói với bạn rằng các mẫu thử nghiệm thực sự là của một phân phối khác nhau ".

Bạn có thể cho tôi dữ liệu của bạn? Tôi có thể có một chút niềm vui với nó và cho bạn biết những gì tôi quản lý để làm với nó miễn phí.


0

một cách khác nhau cho câu hỏi: để bắt đầu, bạn phải liên kết một mất mát với mỗi phân loại sai bạn làm. Mức chi trả / tổn thất / hình phạt này đối với việc phân loại sai sẽ (có thể) khác với Sai tích cực (FP) so với Âm tính giả (FN). Một số phân loại, cho biết phát hiện ung thư, thà có nhiều FP hơn FN. Một số khác, giả sử bộ lọc thư rác, thà cho phép một số thư rác (FN) hơn là chặn thư (FP) từ bạn của bạn. Dựa trên logic này, bạn có thể sử dụng điểm F1 hoặc Độ chính xác, bất cứ điều gì phù hợp với mục đích của bạn. Mặt khác, người khác có thể không hài lòng với .9 (90% thư rác được lọc). Thế nào sẽ là điểm tốt?)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.