votingclassifier sklearn python machine-learning classification scikit-learn

python - votingclassifier - sklearn



La mejor forma de combinar clasificadores probabilísticos en scikit-learn (3)

¿Qué pasa con el sklearn.ensemble.VotingClassifier?

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

Por la descripción:

La idea detrás de la implementación del clasificador de votación es combinar conceptualmente diferentes clasificadores de aprendizaje automático y usar un voto mayoritario o las probabilidades pronosticadas promedio (voto suave) para predecir las etiquetas de clase. Tal clasificador puede ser útil para un conjunto de modelos igualmente exitosos para equilibrar sus debilidades individuales.

Tengo una regresión logística y un bosque aleatorio y me gustaría combinarlos (conjunto) para el cálculo de probabilidad de clasificación final tomando un promedio.

¿Hay una forma incorporada de hacer esto en el juego de aprendizaje de sci-kit? ¿Alguna forma en la que pueda usar el conjunto de los dos como clasificador? ¿O necesitaría rodar mi propio clasificador?


NOTA: El clasificador de votación scikit-learn es probablemente la mejor manera de hacerlo ahora

ANTIGUA RESPUESTA:

Por lo que vale, terminé haciendo esto de la siguiente manera:

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)


Dado el mismo problema , utilicé un método de votación por mayoría. Peinar arbitrariamente las probabilidades / puntajes es muy problemático, ya que el rendimiento de los diferentes clasificadores puede ser diferente (por ejemplo, un SVM con 2 núcleos diferentes, + un bosque aleatorio + otro clasificador entrenado en un conjunto de entrenamiento diferente).

Un posible método para "pesar" los diferentes clasificadores podría ser utilizar su puntaje de Jaccard como un "peso". (Pero tengan cuidado, según entiendo, los diferentes puntajes no son "todos iguales", sé que un clasificador de aumento de gradiente que tengo en mi conjunto da todos los puntajes como 0.97, 0.98, 1.00 o 0.41 / 0. muy confiado ..)