0

功能模型的预测功能问题

我正在尝试将嵌套交叉验证和管道与我的功能模型结合起来。这是代码:

  • binaryModel = 特此为功能性人工神经网络
grid = dict(ann__n_neurons=[2], ann__num_hidden=[2], ann__used_optimizer=["adam"], 
                          ann__l1_reg=[0.0], ann__l2_reg=[0.0], ann__learning_rate=[0.01],
                          ann__dropout_rate=[0.0])
X, y = prepare_dataset("", short, bin_categorical, "",
                       continous_to_binary, target)

cv_outer = KFold(n_splits=10, shuffle=True, random_state=1) #outer cross-validatio 10 times, to test model 
# enumerate splits
outer_results = list()
i=0
for train_ix, test_ix in cv_outer.split(X):
    print("Outer-Split: ",i)
    i+=1
    # split data
    X_train, X_test = X.iloc[train_ix], X.iloc[test_ix]
    y_train, y_test = y[train_ix], y[test_ix]
    # configure the cross-validation procedure
    cv_inner = KFold(n_splits=3, shuffle=True, random_state=1) #inner cross-validation 3 times, to configure model
    
    # define the model
    ann = KerasClassifier(build_fn=binaryModel, input_shape=X_train.shape[1],
                          batch_size=32,
                          epochs=10, validation_split=0.2)

    # define search
    pipe = Pipeline(steps=[('scaler', StandardScaler()), ('ann', ann)])
    
    # define the grid search 
    cv = GridSearchCV(
        pipe, grid, n_jobs=1, cv=cv_inner,refit=True)
    # execute search 
    cv.fit(X_train, y_train, ann__verbose=0)
    
    print('Best score and parameter combination = ')
    print(cv.best_score_)    
    print(cv.best_params_)
    print(cv.best_estimator_)
    y_predicted = cv.predict(X_test)

输出:

Best score and parameter combination = 
0.8449265360832214
{'ann__dropout_rate': 0.0, 'ann__l1_reg': 0.0, 'ann__l2_reg': 0.0, 'ann__learning_rate': 0.01, 'ann__n_neurons': 2, 'ann__num_hidden': 2, 'ann__used_optimizer': 'adam'}
Pipeline(steps=[('scaler', StandardScaler()),
                ('ann',
                 <tensorflow.python.keras.wrappers.scikit_learn.KerasClassifier object at 0x7efef01ffd30>)])
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-28-3f1c5b78794d> in <module>
     61     print(cv.best_params_)
     62     print(cv.best_estimator_[1])
---> 63     y_predicted = cv.predict(X_test)
 AttributeError: 'Functional' object has no attribute 'predict_classes'

如何使用最终的最佳模型进行预测?

  • 我的结果是一个管道,但我不能使用预测功能,为什么?
  • 我想使用预测函数来评估每个折叠(准确性、灵敏度等......)
4

1 回答 1

0

问题是 Keras 功能 API 模型没有“predict_classes”属性,这是 sklearn 的 GridSearchCV 用来执行预测的,只有顺序 Keras 模型有它。我遇到了同样的问题,我建议尝试实现自己的 GridSearchCV,或者尝试一下似乎很有希望的https://github.com/autonomio/talos,尽管我自己还没有尝试过。

于 2021-10-06T15:59:06.303 回答