रैंडम फॉरेस्ट प्रोबेबिलिस्टिक भविष्यवाणी बनाम बहुमत वोट


10

स्किकिट सीखता है कि मॉडल एकत्रीकरण तकनीक के लिए बहुसंख्यक वोट के बजाय संभाव्य भविष्यवाणी का उपयोग क्यों (1.9.2.1। रैंडम फॉरेस्ट) के स्पष्टीकरण के बिना किया जाता है।

क्या इसके लिए एक स्पष्ट व्याख्या है? इसके अलावा, विभिन्न मॉडल एकत्रीकरण तकनीकों के लिए एक अच्छा पेपर या समीक्षा लेख है जिसका उपयोग रैंडम फ़ॉरेस्ट बैगिंग के लिए किया जा सकता है?

धन्यवाद!

जवाबों:


10

इस तरह के सवालों को हमेशा कोड को देखकर सबसे अच्छा जवाब दिया जाता है, यदि आप पाइथन में धाराप्रवाह हैं।

RandomForestClassifier.predictकम से कम वर्तमान संस्करण 0.16.1 में, उच्चतम संभावना अनुमान के साथ वर्ग की भविष्यवाणी करता है, जैसा कि दिया गया है predict_proba। ( यह पंक्ति )

के लिए प्रलेखन predict_probaकहता है:

एक इनपुट नमूने की अनुमानित कक्षा की संभावनाओं की गणना जंगल में पेड़ों की औसत अनुमानित कक्षा संभावनाओं के रूप में की जाती है। एक एकल पेड़ की वर्ग संभावना एक पत्ते में एक ही वर्ग के नमूनों का अंश है।

मूल विधि से अंतर शायद सिर्फ इतना है कि predictपूर्वानुमान के अनुरूप है predict_proba। परिणाम को कभी-कभी मूल ब्रीमन पेपर में उपयोग किए जाने वाले "कठिन" बहुमत वोट के बजाय "सॉफ्ट वोटिंग" कहा जाता है। मैं त्वरित खोज में दो तरीकों के प्रदर्शन की उचित तुलना नहीं कर पाया, लेकिन वे दोनों इस स्थिति में काफी उचित प्रतीत होते हैं।

predictप्रलेखन सबसे अच्छा काफी भ्रामक पर है, मैंने इसे ठीक करने के लिए एक पुल अनुरोध प्रस्तुत किया है।

यदि आप इसके बजाय बहुमत वोट भविष्यवाणी करना चाहते हैं, तो यह करने के लिए एक फ़ंक्शन है। के predict_majvote(clf, X)बजाय इसे कॉल करें clf.predict(X)। (के आधार पर predict_proba; केवल हल्के ढंग से परीक्षण किया गया है, लेकिन मुझे लगता है कि यह काम करना चाहिए।)

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

गूंगा सिंथेटिक मामले पर मैंने कोशिश की, भविष्यवाणियां predictहर बार विधि से सहमत थीं ।


शानदार जवाब, डगल! इसे ध्यान से समझाने के लिए समय निकालने के लिए धन्यवाद। कृपया ओवरफ्लो को रोकने के लिए भी विचार करें और इस सवाल का जवाब दें ।
user1745038

1
यहां एक पेपर भी है , जो संभावित संभावना को संबोधित करता है।
user1745038
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.