为什么我的cross_val_score()准确性很高,但是我的测试准确性却很低?

时间:2020-03-24 15:02:31

标签: python machine-learning keras scikit-learn cross-validation

使用KerasWrapper时,我获得了非常高的训练准确性:95%以上

X_train, X_test, y_train, y_test = train_test_split(train_data, train_labels, shuffle=True, test_size=0.3, random_state=42)

estimator = KerasClassifier(build_fn=build_model(130, 130, 20000), epochs=2, batch_size=128, verbose=1)
folds = KFold(n_splits=3, shuffle=True, random_state=128)
results = cross_val_score(estimator=estimator, X=X_train, y=y_train, cv=folds)

但是,我的预测准确性一点也不好。这是过度拟合的经典案例吗?

prediction = cross_val_predict(estimator=estimator, X=X_test, y=y_test, cv=folds)

metrics.accuracy_score(y_test_converted, prediction)
# accuracy is 0.03%

如何提高测试准确性?谢谢

1 个答案:

答案 0 :(得分:0)

这是过度拟合的经典案例吗?

不是不是-只是您的过程有误。

正如您在此处所做的那样,

cross_val_predict并不是要应用于 test 数据。准确性低可能是由于您尝试在测试数据集的每一折中重新训练模型的事实,该模型要比训练模型小得多。

正确的步骤是-使估算器适合训练数据,获得测试集上的预测,然后计算测试准确性,即:

estimator.fit(X_train, y_train)
y_pred = estimator.predict(X_test)
metrics.accuracy_score(y_test, y_pred)