【问题标题】:GridSearchCV, Pipeline and Functional ModelGridSearchCV、管道和功能模型
【发布时间】:2021-11-26 10:26:07
【问题描述】:

功能模型的预测功能问题

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

  • 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'

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

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

【问题讨论】:

    标签: keras pipeline cross-validation grid-search functional-api


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-09-20
      • 2018-10-20
      • 2023-03-03
      • 2014-01-29
      • 2018-07-05
      • 2016-03-12
      • 2021-02-01
      • 2018-02-16
      相关资源
      最近更新 更多