在sklearn/keras中使用cross_val_score时的负损失函数.不使用k折叠时有效



我正在尝试实现一个模型,该模型接受167个分类变量(0或1)的数组,并输出0到1之间的估计值。有300多个数据点可用。

该模型在使用基本模型时有效,如下所示:

classifier = Sequential()
classifier.add(Dense(units = 80, kernel_initializer = 'uniform', activation = 'relu', input_dim = 167))
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
classifier.fit(X_train, y_train, batch_size = 10, epochs = 200)
y_pred = classifier.predict(X_test)

输出类似于:

Epoch 105/200
253/253 [==============================] - 0s - loss: 0.5582 - acc: 0.0079         
Epoch 106/200
253/253 [==============================] - 0s - loss: 0.5583 - acc: 0.0079

不幸的是,当我尝试使用交叉验证时,模型停止工作,损失函数变大并且为负。代码如下:

def build_classifier():
classifier = Sequential()
classifier.add(Dense(units = 80, kernel_initializer = 'uniform', activation = 'relu', input_dim = 167))
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
return classifier
classifier = KerasClassifier(build_fn = build_classifier, batch_size = 10, epochs = 100)
accuracies = cross_val_score(estimator = classifier, X=X_train, y=y_train, cv=3,n_jobs=1)

输出看起来像:

Epoch 59/100
168/168 [==============================] - 0s - loss: -1106.9519 - acc: 0.0060        
Epoch 60/100
168/168 [==============================] - 0s - loss: -1106.9519 - acc: 0.0060  

我已经考虑过不同的参数,但我似乎找不到是什么导致了这个问题。仍在学习,所以我们非常感谢您的帮助。

如果数据稀疏,就会发生这种情况。很多NaN和Inf都会导致这个问题。如果您正在进行3次折叠验证,则可能在其中一次折叠中,所选数据没有包含足够的信息。可能的解决方案有:

  1. 更改随机种子
  2. 增加数据集

相关内容

  • 没有找到相关文章

最新更新