Подтвердить что ты не робот

Лучший способ объединить вероятностные классификаторы в scikit-learn

У меня есть логистическая регрессия и случайный лес, и я хотел бы объединить их (ансамбль) для вычисления окончательной классификации вероятности, взяв среднее значение.

Есть ли встроенный способ сделать это в изучении sci-kit? Каким-то образом, когда я могу использовать ансамбль двух в качестве самого классификатора? Или мне нужно будет свернуть собственный классификатор?

4b9b3361

Ответ 1

ПРИМЕЧАНИЕ. scikit-learn Voting Classifier, вероятно, лучший способ сделать это сейчас


СТАРЫЙ ОТВЕТ:

Для чего это стоило, я делал это следующим образом:

class EnsembleClassifier(BaseEstimator, ClassifierMixin):
    def __init__(self, classifiers=None):
        self.classifiers = classifiers

    def fit(self, X, y):
        for classifier in self.classifiers:
            classifier.fit(X, y)

    def predict_proba(self, X):
        self.predictions_ = list()
        for classifier in self.classifiers:
            self.predictions_.append(classifier.predict_proba(X))
        return np.mean(self.predictions_, axis=0)

Ответ 2

Учитывая ту же проблему, я использовал метод голосования большинства. Совпадение вероятностей/оценок произвольно очень проблематично, поскольку производительность ваших разных классификаторов может быть различной (например, SVM с двумя разными ядрами + случайный лес + другой классификатор, обученный на другом учебном наборе).

Одним из возможных способов "взвешивания" разных классификаторов может быть использование их оценки Jaccard в качестве "веса". (Но будьте осторожны, как я понимаю, разные оценки не "все равны", я знаю, что классификатор Gradient Boosting, который у меня есть в моем ансамбле, дает все его оценки как 0,97, 0,98, 1,00 или 0,41/0. IE it очень самоуверенный..)

Ответ 3

Как насчет sklearn.ensemble.VotingClassifier?

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.VotingClassifier.html#sklearn.ensemble.VotingClassifier

В описании:

Идея реализации классификатора голосования состоит в том, чтобы объединить концептуально разные классификаторы машинного обучения и использовать большинство голосов или средние предсказанные вероятности (мягкое голосование) для прогнозирования ярлыков классов. Такой классификатор может быть полезен для набора одинаково хорошо работающей модели, чтобы сбалансировать их отдельные недостатки.