Как использовать AdaBoost для нескольких различных типов классификаторов (таких как SVM, Дерево решений, Нейронные сети и т. Д.)? - PullRequest
0 голосов
/ 08 января 2019

Я работаю над проблемой классификации, и у меня есть несколько встроенных классификаторов 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
...   ...       ...         ...  ...          ...

Где метка представляет собой целое число в диапазоне от 0 до 29.

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

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

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

1 Ответ

0 голосов
/ 09 января 2019

Чтобы включить все 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)
...