Python 3.x 包含Keras模型的网格搜索投票分类器
我正在尝试使用Python 3.x 包含Keras模型的网格搜索投票分类器,python-3.x,keras,scikit-learn,Python 3.x,Keras,Scikit Learn,我正在尝试使用GridSearchCV训练一个VotingClassifier,其中包含Keras模型 代码如下: 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
GridSearchCV
训练一个VotingClassifier
,其中包含Keras
模型
代码如下:
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.
当我在GridSearchCV
外部训练VotingClassifier
时,不会发生错误,但是当我在GridSearchCV
内部训练时,会收到错误消息。另一个问题也有相同的错误(不使用GridSearch),并通过一行断言keras模型是一个分类器得到修复,我还包括:
keras_model._estimator_type = "classifier"
这并没有解决这里的问题
有什么建议吗?您使用的是什么keras版本?我运行了您共享的代码(没有
keras\u模型。\u estimator\u type=“classifier”
行),并且安装VotingClassifier没有问题(即,它运行得很好)。我的keras版本是2.2.4,sklearn是0.21.2。@我使用的是keras版本2.3.1和scikit learn版本0.22.2.post1。我将scikit learn降级为0.21.2版,现在它可以工作了。谢谢你的帮助!您使用的是什么keras版本?我运行了您共享的代码(没有keras\u模型。\u estimator\u type=“classifier”
行),并且安装VotingClassifier没有问题(即,它运行得很好)。我的keras版本是2.2.4,sklearn是0.21.2。@我使用的是keras版本2.3.1和scikit learn版本0.22.2.post1。我将scikit learn降级为0.21.2版,现在它可以工作了。谢谢你的帮助!