Классификатор голосования Grid-Search, содержащий модель Keras - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь обучить VotingClassifier, содержащую модель Keras, используя GridSearchCV.

Вот код:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import adam
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.ensemble import VotingClassifier
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

# pretend data
X, y = datasets.make_classification(n_samples=100, n_features=20)

scaler = StandardScaler()

# create model
def create_model():   
    
    model = Sequential()

    model.add(Dense(20, kernel_initializer="uniform", activation='relu', input_shape=(20,)))
    model.add(Dense(30, kernel_initializer="uniform", activation='relu'))
    model.add(Dense(10, kernel_initializer="uniform", activation='relu'))
    model.add(Dense(1,  activation='sigmoid'))

    # Compile model
    optimizer = adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False)
    model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])

    return model

keras_model = KerasClassifier(build_fn=create_model)
keras_model._estimator_type = "classifier"   

eclf = VotingClassifier(
          estimators=[('svc',SVC(probability=True)), ('keras_model', keras_model)]          
          , voting='soft')

#  Test - fit the viting classifier without grid search
eclf.fit(X, y)

print('The VotingClassifier can be fit outside of gridsearch\n')

# parameters to grid search
params = [{'svc__C':[0.01,0.1]}, ]

grid = GridSearchCV(eclf,params,cv=2,scoring='accuracy', verbose=1)
grid.fit(X,y)

Я получаю следующую ошибку:

ValueError: The estimator KerasClassifier should be a classifier.

Когда я тренирую VotingClassifier за пределами GridSearchCV, ошибок не возникает, однако, когда я тренирую его в GridSearchCV, я получаю сообщение об ошибке. Другой вопрос, VotingClassifier с конвейерами в качестве оценщиков , имеет ту же ошибку (без использования GridSearch) и был исправлен строкой, утверждающей, что модель keras является классификатором, который я также включил:

keras_model._estimator_type = "classifier"

Это не устранило проблему здесь.

Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...