Python 2.7 如何使用scikit BaggingClassifier通过keras scikit wrapper以keras卷积神经网络作为基础估计器进行装袋?

Python 2.7 如何使用scikit BaggingClassifier通过keras scikit wrapper以keras卷积神经网络作为基础估计器进行装袋?,python-2.7,scikit-learn,keras,Python 2.7,Scikit Learn,Keras,我正在尝试做一个集成学习,即使用scikit学习BaggingClassifier和2D卷积神经网络(CNN)作为基础估计器进行bagging 在此之前,我曾尝试使用scikit的神经网络进行打包,以测试scikit的BaggingClassifier,并且效果良好。我还用keras包装器测试了scikit的GridSearchCV,以搜索2D CNN的超参数,它也起了作用 刚才,当我尝试使用scikit的BaggingClassifier和keras包装器进行包装,然后使用2D CNN模型作为

我正在尝试做一个集成学习,即使用scikit学习BaggingClassifier和2D卷积神经网络(CNN)作为基础估计器进行bagging

在此之前,我曾尝试使用scikit的神经网络进行打包,以测试scikit的BaggingClassifier,并且效果良好。我还用keras包装器测试了scikit的GridSearchCV,以搜索2D CNN的超参数,它也起了作用

刚才,当我尝试使用scikit的BaggingClassifier和keras包装器进行包装,然后使用2D CNN模型作为基础估计器创建集成学习时,我得到了一个错误

以下是代码片段:

def baggingCNN(self):
    from sklearn.ensemble import BaggingClassifier
    from keras.wrappers.scikit_learn import KerasClassifier
    from keras.utils.np_utils import to_categorical

    patternTraining = np.reshape(self.patternTraining,
                                 (self.patternTraining.shape[0], 1, 1, self.patternTraining.shape[1]))
    patternTesting = np.reshape(self.patternTesting,
                                (self.patternTesting.shape[0], 1, 1, self.patternTesting.shape[1]))
    X = patternTraining
    Y_binary = to_categorical(self.targetTraining)
    cnnA=KerasClassifier(self.create_cnn_model_A(patternTraining.shape[1],patternTraining.shape[2],patternTraining.shape[3]),nb_epoch=500, batch_size=64, verbose=1)
    bagging=BaggingClassifier(base_estimator=cnnA, n_estimators=3, verbose=1, n_jobs=3, max_samples=1)
    bagging.fit(X, Y_binary)
下面是create_cnn_model_函数的样子:

def create_cnn_model_A(self, sizeDepth, sizeRow, sizeCol):
    from keras.models import Sequential
    import keras.layers.core as core
    import keras.layers.convolutional as conv
    from keras.regularizers import l2, activity_l2, l1, activity_l1, l1l2, activity_l1l2

    numFilter = 32
    nStride = 1

    model = Sequential()
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=2, activation='relu',
                                 input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same'))
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=3, activation='relu',
                                 input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same'))
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=4, activation='relu',
                                 input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same'))
    model.add(conv.MaxPooling2D(pool_size=(1, 2), strides=(nStride, nStride), dim_ordering="th"))
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=2, activation='relu',
                                 input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same'))
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=2, activation='relu',
                                 input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same'))
    model.add(conv.MaxPooling2D(pool_size=(1, 2), strides=(nStride, nStride), dim_ordering="th"))
    model.add(core.Flatten())
    model.add(core.Dense(output_dim=50, activation='relu', W_regularizer=l2(0.01)))
    model.add(core.Dense(output_dim=18, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy', 'precision', 'recall'])
    return model
以下是self.pattern Training和self.targetTraining在重塑之前的形状:

(1361, 45) (1361,)
这就是我得到的错误:

Traceback (most recent call last):
  File "/home/berylramadhian/PycharmProjects/Relation Extraction/TestModule2.py", line 153, in <module>
    clsf.baggingCNN()
  File "/home/berylramadhian/PycharmProjects/Relation Extraction/MachineLearning.py", line 511, in baggingCNN
    bagging.fit(X, Y_binary)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/bagging.py", line 248, in fit
    return self._fit(X, y, self.max_samples, sample_weight=sample_weight)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/bagging.py", line 284, in _fit
    X, y = check_X_y(X, y, ['csr', 'csc'])
  File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 521, in check_X_y
    ensure_min_features, warn_on_dtype, estimator)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 405, in check_array
    % (array.ndim, estimator_name))
ValueError: Found array with dim 4. Estimator expected <= 2.
回溯(最近一次呼叫最后一次):
文件“/home/berylramadhian/PycharmProjects/relationextraction/TestModule2.py”,第153行,中
clsf.baggingCNN()
文件“/home/berylramadhian/PycharmProjects/relationextraction/MachineLearning.py”,第511行,baggingCNN
装袋。适合(X,Y_二进制)
文件“/usr/local/lib/python2.7/dist-packages/sklearn/employ/bagging.py”,第248行,适合
返回自拟合(X,y,self.max\u样本,样本重量=样本重量)
文件“/usr/local/lib/python2.7/dist-packages/sklearn/employ/bagging.py”,第284行,格式为
十、 y=检查X(X,y,['csr','csc'])
文件“/usr/local/lib/python2.7/dist packages/sklearn/utils/validation.py”,第521行,检查
确保\u最小\u功能,警告\u数据类型,估计器)
check_数组中的文件“/usr/local/lib/python2.7/dist packages/sklearn/utils/validation.py”,第405行
%(array.ndim,估计器名称))

ValueError:找到具有dim 4的数组。预计估计器这在使用Keras的sklearn中目前不受支持。你必须自己实施,否则我几个月前就在社区提出了同样的问题。我得到了一个恰当的回应,目前,他们正试图实施它。等待下一版本或查看问题以了解更多信息。

感谢您的回答。是的,实际上我已经手动实现了bagging,因为当我试图将4维形状的输入传递到bagging的fit函数时,sklearn不断地引发错误。如果他们打算实施,这是个好消息。@BerylRamadhianAribowo嘿,我有完全相同的问题,你能把实施的装袋递给我吗。我查看了你的github,但找不到它。谢谢!