完美的精确度、召回率和F1分数,但预测结果很差

使用scikit-learn来分类二元问题。获得了完美的classification_report(全是1)。然而预测结果却只有0.36。这是怎么回事?

我对标签不平衡的情况很熟悉。但我认为这里不是这种情况,因为f1和其他分数列,以及混淆矩阵,都显示了完美的分数。

# 预留最后19行用于预测X1, X_Pred, y1, y_Pred = train_test_split(X, y, test_size= 19,                 shuffle = False, random_state=None)X_train, X_test, y_train, y_test = train_test_split(X1, y1,          test_size= 0.4, stratify = y1, random_state=11)clcv = DecisionTreeClassifier()scorecv = cross_val_score(clcv, X1, y1, cv=StratifiedKFold(n_splits=4),                          scoring= 'f1') # 平衡精确度/召回率clcv.fit(X1, y1)y_predict = clcv.predict(X1)cm = confusion_matrix(y1, y_predict)cm_df = pd.DataFrame(cm, index = ['0','1'], columns = ['0','1'] )print(cm_df)print(classification_report( y1, y_predict ))print('Prediction score:', clcv.score(X_Pred, y_Pred)) # 未见数据

输出:

confusion:      0   10  3011   01     0  44              precision    recall  f1-score   support       False       1.00      1.00      1.00      3011        True       1.00      1.00      1.00        44   micro avg       1.00      1.00      1.00      3055   macro avg       1.00      1.00      1.00      3055weighted avg       1.00      1.00      1.00      3055Prediction score: 0.36

回答:

问题在于你出现了过拟合现象。

有很多未使用的代码,所以我们来修剪一下:

# 预留最后19行用于预测X1, X_Pred, y1, y_Pred = train_test_split(X, y, test_size= 19,                 shuffle = False, random_state=None)clcv = DecisionTreeClassifier()clcv.fit(X1, y1)y_predict = clcv.predict(X1)cm = confusion_matrix(y1, y_Pred)cm_df = pd.DataFrame(cm, index = ['0','1'], columns = ['0','1'] )print(cm_df)print(classification_report( y1, y_Pred ))print('Prediction score:', clcv.score(X_Pred, y_Pred)) # 未见数据

显然,这里没有进行交叉验证,低预测分数的最明显原因是决策树分类器的过拟合。

使用交叉验证的分数,你应该能直接看到问题所在。

Related Posts

我的Keras模型在输入图像时给出随机预测

我正在构建一个用于分类图像的模型,当我使用model….

如何输出单个预测结果正确的概率?

我在泰坦尼克数据集上使用随机森林分类器。我不想输出乘客…

如何使权重收敛以最小化均方误差?

这是我的代码 for _ in range(5): K…

如何从classifier.predict_proba()的输出中获取前n个预测标签?

我正在尝试获取一个基于文本的多标签分类问题的特定记录的…

ML.NET绘制K-means聚类结果?

我在一个无监督聚类场景中试验ML.NET。我的起始数据…

Tensorflow/Keras – 如何揭示类别之间的关系?

我有一组数据,标记了5个类别。 每个类别代表物理世界中…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注