Data Analysis/Machine learning
VotingClassifier.fit "The estimator KerasClassifier should be a classifier" 문제 해결
노는게제일좋아!
2020. 5. 3. 16:49
반응형
import numpy as np
from keras.models import Sequential
from keras import layers
#from keras.optimizers import SGD
from keras import optimizers
from keras.layers import Activation,BatchNormalization, Dropout, Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.ensemble import VotingClassifier
from mlxtend.classifier import EnsembleVoteClassifier
def make_model(dense):
N = len(white_wine)
n_in=11
n_hiddens=32
n_out=11
p_keep=0.5 # 드롭아웃 확률의 비율
model = Sequential()
model.add(Dense(dense,input_dim=n_in))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dense(dense))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dense(dense))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dense(dense))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(layers.Dense(units=n_out,activation='softmax'))
sgd = optimizers.SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True)
#model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.compile(loss='sparse_categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
return model
epochs = 100
batch_size =150
# 서로 다른 모델을 만들어 합치기 (Model Ensemble)
model1 = KerasClassifier(build_fn=make_model(500),epochs=epochs, verbose=0)
model2 = KerasClassifier(build_fn=make_model(100),epochs=epochs, verbose=0)
model3 = KerasClassifier(build_fn=make_model(50),epochs=epochs, verbose=0)
ensemble_model=VotingClassifier(estimators = [('model1', model1), ('model2', model2), ('model3', model3)], voting = 'soft')
#ensemble_model= EnsembleVoteClassifier(clfs=[model1,model2,model3],weights=[1,1,1],voting='soft')
# Whole Wine Classifier
#y_pred = ensemble_model.predict(x_test)
ensemble_model.fit(x_train, y_train)
test_loss, test_acc = ensemble_model.evaluate(x_test,y_test)
print("Whole Wine Classifier")
print("test loss: ", test_loss)
print("test accuracy: ", test_acc)
해결 방법:
[model1._estimator_type="classifier"] 추가해주면 됨
model1 = KerasClassifier(build_fn=make_model(500),epochs=epochs, verbose=0)
model1._estimator_type="classifier"
model2 = KerasClassifier(build_fn=make_model(100),epochs=epochs, verbose=0)
model2._estimator_type="classifier"
model3 = KerasClassifier(build_fn=make_model(50),epochs=epochs, verbose=0)
model3._estimator_type="classifier"
반응형