【问题标题】:How to apply cross_val_score to cross valid our own model如何应用 cross_val_score 来交叉验证我们自己的模型
【发布时间】:2021-03-09 01:36:15
【问题描述】:

通常,我们通过以下方式将cross_val_score 应用于Sklearn 模型。

scores = cross_val_score(clf, X, y, cv=5, scoring='f1_macro')

现在我有自己的模型,我希望执行交叉验证。我应该如何处理它?

tf.keras.backend.clear_session()


model = tf.keras.models.Sequential()
model.add(Masking(mask_value=0.0, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Bidirectional(LSTM(128, dropout=dropout, recurrent_dropout=Rdropout, return_sequences=True)))
# model.add(Bidirectional(LSTM(64, dropout=dropout, recurrent_dropout=Rdropout, return_sequences=True)))
# model.add(Bidirectional(LSTM(128, dropout=dropout, recurrent_dropout=Rdropout, return_sequences=True)))
model.add(Bidirectional(LSTM(32, dropout=dropout, recurrent_dropout=Rdropout)))
# model.add(Dense(6, activation='relu'))
# model.add(Dense(4, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

adamopt = tf.keras.optimizers.Adam(lr=0.003, beta_1=0.9, beta_2=0.999, epsilon=1e-8)
RMSopt = tf.keras.optimizers.RMSprop(lr=0.0007,rho=0.9, epsilon=1e-6)

model.compile(loss='binary_crossentropy',
              optimizer=RMSopt,
              metrics=['accuracy'])
print(cross_val_score(model, X_train, y_train, cv=2,scoring='accuracy'))

TypeError: Cannot clone object '<tensorflow.python.keras.engine.sequential.Sequential object at 0x7f86481170f0>' (type <class 'tensorflow.python.keras.engine.sequential.Sequential'>): it does not seem to be a scikit-learn estimator as it does not implement a 'get_params' methods.

我认为cross_val_scoreSklearn 模型独有的?

【问题讨论】:

    标签: python tensorflow machine-learning scikit-learn


    【解决方案1】:

    cross_val_score 确实是 Sklearn 模型或实现相同所需功能的模型所独有的,而 Keras 模型并非如此。

    Keras 没有允许您交叉验证模型的预构建功能,您需要编写交叉验证算法。

    首先你应该决定你想要多少折叠,然后你可以使用 sklearn 中的KFold 类将你的数据集划分为那么多折叠。 (注意 KFold.split 返回的是数据点的索引,而不是实际的数据点)

    然后,您应该为每个拆分训练一个新模型并计算您想要的指标。 您可以关注this教程了解更多信息。

    【讨论】:

      【解决方案2】:

      我们无法将 Keras 模型直接集成到 sklearn 管道中。因此,如果您正在寻找使用 cross_val_score 评估您的 Keras 模型,您需要使用包装器模块 tf.keras.wrappers.scikit_learn 来将 sklearn API 与 Keras 模型一起使用。例如,

      from tf.keras.wrappers.scikit_learn import KerasClassifier
      
      def LSTM_Network(neurons=100):
      
          model = tf.keras.models.Sequential()
          .
          .
          model.compile(loss='binary_crossentropy',
                optimizer=RMSopt,
                metrics=['accuracy'])    
          return model
      
      lstm_clf = KerasClassifier(build_fn=LSTM_Network, epochs=6, batch_size=64, verbose=0)
      
      model_selection.cross_val_score(lstm_clf, X_train, Y_test, cv=10, scoring='accuracy')
      

      【讨论】:

        猜你喜欢
        • 2022-10-04
        • 2018-10-15
        • 2015-12-22
        • 2018-10-24
        • 2013-05-19
        • 2014-02-18
        • 2015-05-01
        • 2013-12-08
        • 1970-01-01
        相关资源
        最近更新 更多