Soft Voting/Majority Rule classifier for unfitted estimators.
.. versionadded:: 0.17
Read more in the :ref:`User Guide <voting_classifier>`.
Parameters ---------- estimators : list of (str, estimator) tuples Invoking the ``fit`` method on the ``VotingClassifier`` will fit clones of those original estimators that will be stored in the class attribute ``self.estimators_``. An estimator can be set to ``'drop'`` using ``set_params``.
.. deprecated:: 0.22 Using ``None`` to drop an estimator is deprecated in 0.22 and support will be dropped in 0.24. Use the string ``'drop'`` instead.
voting : str, 'hard', 'soft'
(default='hard') If 'hard', uses predicted class labels for majority rule voting. Else if 'soft', predicts the class label based on the argmax of the sums of the predicted probabilities, which is recommended for an ensemble of well-calibrated classifiers.
weights : array-like, shape (n_classifiers,), optional (default=`None`) Sequence of weights (`float` or `int`) to weight the occurrences of predicted class labels (`hard` voting) or class probabilities before averaging (`soft` voting). Uses uniform weights if `None`.
n_jobs : int or None, optional (default=None) The number of jobs to run in parallel for ``fit``. ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context. ``-1`` means using all processors. See :term:`Glossary <n_jobs>` for more details.
flatten_transform : bool, optional (default=True) Affects shape of transform output only when voting='soft' If voting='soft' and flatten_transform=True, transform method returns matrix with shape (n_samples, n_classifiers * n_classes). If flatten_transform=False, it returns (n_classifiers, n_samples, n_classes).
Attributes ---------- estimators_ : list of classifiers The collection of fitted sub-estimators as defined in ``estimators`` that are not 'drop'.
named_estimators_ : Bunch object, a dictionary with attribute access Attribute to access any fitted sub-estimators by name.
.. versionadded:: 0.20
classes_ : array-like, shape (n_predictions,) The classes labels.
See Also -------- VotingRegressor: Prediction voting regressor.
Examples -------- >>> import numpy as np >>> from sklearn.linear_model import LogisticRegression >>> from sklearn.naive_bayes import GaussianNB >>> from sklearn.ensemble import RandomForestClassifier, VotingClassifier >>> clf1 = LogisticRegression(multi_class='multinomial', random_state=1) >>> clf2 = RandomForestClassifier(n_estimators=50, random_state=1) >>> clf3 = GaussianNB() >>> X = np.array([-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]
) >>> y = np.array(1, 1, 1, 2, 2, 2
) >>> eclf1 = VotingClassifier(estimators=
... ('lr', clf1), ('rf', clf2), ('gnb', clf3)
, voting='hard') >>> eclf1 = eclf1.fit(X, y) >>> print(eclf1.predict(X)) 1 1 1 2 2 2
>>> np.array_equal(eclf1.named_estimators_.lr.predict(X), ... eclf1.named_estimators_'lr'
.predict(X)) True >>> eclf2 = VotingClassifier(estimators=
... ('lr', clf1), ('rf', clf2), ('gnb', clf3)
, ... voting='soft') >>> eclf2 = eclf2.fit(X, y) >>> print(eclf2.predict(X)) 1 1 1 2 2 2
>>> eclf3 = VotingClassifier(estimators=
... ('lr', clf1), ('rf', clf2), ('gnb', clf3)
, ... voting='soft', weights=2,1,1
, ... flatten_transform=True) >>> eclf3 = eclf3.fit(X, y) >>> print(eclf3.predict(X)) 1 1 1 2 2 2
>>> print(eclf3.transform(X).shape) (6, 6)