>我正在研究一个分类问题,并且有多个拟合的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 之间的整数。
我的目标是构建一个包含上述所有分类器(svm,dt,m2)的AdaBoost分类器,但我无法在Google上找到示例;每个示例都只是谈论多个不同的决策树,或多个不同(但相同类型)的分类器。
我知道这是可以做到的,对于数据帧的每一行(或数据点),必须调整每个分类器的权重,这并不要求它们都是同一类型的分类器 - 它们只需要有一个.predict方法。
那么我该怎么做呢?谁能给我举个例子?
要包含所有 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)