Как использовать AdaBoost для нескольких разных типов подогнанных классификаторов (таких как SVM, дерево решений, нейронная сеть и т. д.)?

Я работаю над проблемой классификации и имею несколько подходящих классификаторов sklearn, например

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.

Изначально все они получают одни и те же входные данные и все имеют одинаковый тип выходных данных, все они могут предсказать метку для строки моих данных:

  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
...   ...       ...         ...  ...          ...

Где label — целое число от 0 до 29.

Моя цель — создать классификатор AdaBoost, включающий все вышеперечисленное (svm, dt, m2), но мне не удалось найти пример в Google; каждый пример просто говорит о нескольких разных деревьях решений или нескольких разных (но одного и того же типа) классификаторах.

Я знаю, что это можно сделать, для каждой строки (или точки данных) моего фрейма данных необходимо скорректировать веса каждого классификатора, и это не требует, чтобы все они были классификаторами одного типа - им всем просто нужно иметь метод .predict.

Итак, как мне это сделать? Может ли кто-нибудь привести мне пример?


person Daniel P    schedule 08.01.2019    source источник


Ответы (1)


Чтобы включить все clf [svm, dt, m2], на первом этапе создайте модель ансамбля, а затем задайте эту модель ансамбля в качестве базовой оценки для adaboost.

Попробуйте что-нибудь подобное!

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)
person Venkatachalam    schedule 09.01.2019