Dự đoán xác suất rừng ngẫu nhiên so với phiếu bầu đa số


10

Scikit learn dường như sử dụng dự đoán xác suất thay vì bỏ phiếu đa số cho kỹ thuật tổng hợp mô hình mà không có lời giải thích về lý do (1.9.2.1. Rừng ngẫu nhiên).

Có một lời giải thích rõ ràng cho lý do tại sao? Hơn nữa có một bài báo hay bài viết đánh giá tốt cho các kỹ thuật tổng hợp mô hình khác nhau có thể được sử dụng để đóng gói Rừng ngẫu nhiên?

Cảm ơn!

Câu trả lời:


10

Những câu hỏi như vậy luôn được trả lời tốt nhất bằng cách xem mã, nếu bạn thông thạo Python.

RandomForestClassifier.predict, ít nhất là trong phiên bản hiện tại 0.16.1, dự đoán lớp có ước tính xác suất cao nhất, như được đưa ra bởi predict_proba. ( dòng này )

Các tài liệu cho predict_probabiết:

Xác suất lớp dự đoán của một mẫu đầu vào được tính là xác suất lớp dự đoán trung bình của các cây trong rừng. Xác suất lớp của một cây là một phần mẫu của cùng một lớp trong một chiếc lá.

Sự khác biệt so với phương pháp ban đầu có lẽ chỉ là để predictđưa ra dự đoán phù hợp predict_proba. Kết quả đôi khi được gọi là "bỏ phiếu mềm", thay vì bỏ phiếu đa số "cứng" được sử dụng trong bài báo gốc của Breiman. Tôi không thể tìm kiếm nhanh để tìm một so sánh thích hợp về hiệu suất của hai phương pháp, nhưng cả hai đều có vẻ khá hợp lý trong tình huống này.

Các predicttài liệu tốt nhất là khá sai lệch; Tôi đã gửi yêu cầu kéo để sửa nó.

Thay vào đó, nếu bạn muốn thực hiện dự đoán phiếu bầu đa số, đây là một chức năng để thực hiện. Gọi nó là thích predict_majvote(clf, X)hơn là clf.predict(X). (Dựa trên predict_proba; chỉ thử nghiệm nhẹ, nhưng tôi nghĩ nó sẽ hoạt động.)

from scipy.stats import mode
from sklearn.ensemble.forest import _partition_estimators, _parallel_helper
from sklearn.tree._tree import DTYPE
from sklearn.externals.joblib import Parallel, delayed
from sklearn.utils import check_array
from sklearn.utils.validation import check_is_fitted

def predict_majvote(forest, X):
    """Predict class for X.

    Uses majority voting, rather than the soft voting scheme
    used by RandomForestClassifier.predict.

    Parameters
    ----------
    X : array-like or sparse matrix of shape = [n_samples, n_features]
        The input samples. Internally, it will be converted to
        ``dtype=np.float32`` and if a sparse matrix is provided
        to a sparse ``csr_matrix``.
    Returns
    -------
    y : array of shape = [n_samples] or [n_samples, n_outputs]
        The predicted classes.
    """
    check_is_fitted(forest, 'n_outputs_')

    # Check data
    X = check_array(X, dtype=DTYPE, accept_sparse="csr")

    # Assign chunk of trees to jobs
    n_jobs, n_trees, starts = _partition_estimators(forest.n_estimators,
                                                    forest.n_jobs)

    # Parallel loop
    all_preds = Parallel(n_jobs=n_jobs, verbose=forest.verbose,
                         backend="threading")(
        delayed(_parallel_helper)(e, 'predict', X, check_input=False)
        for e in forest.estimators_)

    # Reduce
    modes, counts = mode(all_preds, axis=0)

    if forest.n_outputs_ == 1:
        return forest.classes_.take(modes[0], axis=0)
    else:
        n_samples = all_preds[0].shape[0]
        preds = np.zeros((n_samples, forest.n_outputs_),
                         dtype=forest.classes_.dtype)
        for k in range(forest.n_outputs_):
            preds[:, k] = forest.classes_[k].take(modes[:, k], axis=0)
        return preds

Trong trường hợp tổng hợp ngu ngốc tôi đã thử, dự đoán đồng ý với predictphương pháp mỗi lần.


Câu trả lời tuyệt vời, Dougal! Cảm ơn đã dành thời gian để giải thích điều này một cách cẩn thận. Vui lòng xem xét cũng đi qua để chồng tràn và trả lời câu hỏi này ở đó .
dùng1745038

1
Ngoài ra còn có một giấy, ở đây , trong đó đề cập đến dự đoán xác suất.
dùng1745038
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.