2 votes

Comment utiliser AdaBoost sur plusieurs types de classificateurs adaptés (comme SVM, Decision Tree, Neural Network, etc.) ?

Je travaille sur un problème de classification et j'ai plusieurs classificateurs sklearn ajustés, comme

svm = SVC().fit(X_train, y_train)
dt = tree.DecisionTreeClassifier(criterion='entropy',max_depth=4000).fit(X_train, y_train)

...

for i in range(num_of_models):
    m2 = create_model_for_ensemble(dummy_y_train.shape[1])
    m2.fit(X_train_array[i], dummy_y_train, epochs=150, batch_size=100, verbose=0)
    models.append(m2)
# m2 is a customized Neural Network Classifier, that has a custom predict function (m2.predict_classes)
# The above code is just an example, the point is - m2 is also a classifier.

... etc.

Au départ, ils reçoivent tous les mêmes données d'entrée et ont tous le même type de résultats, ils peuvent tous prédire une étiquette pour une ligne de mes données :

  label attribute_1 attribute_2  ... attribute_79
1     ?    0.199574    0.203156  ...     0.046898   
2     ?    0.201461    0.203837  ...     0.075002   
3     ?    0.209044    0.214268  ...     0.143278
...   ...       ...         ...  ...          ...

Où l'étiquette est un nombre entier compris entre 0 et 29.

Mon objectif est de construire un classificateur AdaBoost qui inclut tous les éléments ci-dessus (svm, dt, m2), mais je n'ai pas été en mesure de trouver un exemple sur Google ; chaque exemple parle simplement de plusieurs arbres de décision différents, ou de plusieurs classificateurs différents (mais du même type).

Je sais que c'est possible, pour chaque ligne (ou point de données) de mon dataframe, les poids de chaque classificateur doivent être ajustés, et il n'est pas nécessaire qu'ils soient tous du même type de classificateur - il suffit qu'ils aient tous une méthode .predict.

Alors, comment faire ? Quelqu'un peut-il me donner un exemple ?

2voto

AILearning Points 535

Pour inclure tous les clf [svm, dt, m2] Le modèle d'ensemble est créé à la première étape, puis utilisé comme estimateur de base pour adaboost.

Essayez quelque chose de similaire !

from sklearn import datasets
from sklearn.ensemble import AdaBoostClassifier,VotingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC

from sklearn.model_selection import train_test_split

X_train, xtest, y_train, y_eval = train_test_split(X, y, test_size=0.2, random_state=42)

iris = datasets.load_iris()
X, y = iris.data[:, 1:3], iris.target

votingClf = VotingClassifier([('clf1',SVC(probability=True)),('clf2',DecisionTreeClassifier())],voting='soft') #

adaBoostClassifier = AdaBoostClassifier(base_estimator = votingClf)
adaBoostClassifier.fit(X,y)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X