训练准确率 vs 测试准确率 vs 混淆矩阵

数据挖掘 Python 预测建模 准确性 混淆矩阵 分类器
2021-09-27 01:06:14

在我使用随机森林开发我的预测模型后,我得到以下指标:

        Train Accuracy ::  0.9764634601043997
        Test Accuracy  ::  0.7933284397683713
         Confusion matrix  [[28292  1474]
                            [ 6128   889]]

这是这段代码的结果:

  training_features, test_features, training_target, test_target, = train_test_split(df.drop(['bad_loans'], axis=1),
                                                  df['target'],
                                                  test_size = .3,
                                                  random_state=12)
clf = RandomForestClassifier()
trained_model = clf.fit(training_features, training_target)
trained_model.fit(training_features, training_target)
predictions = trained_model.predict(test_features)      

Train Accuracy: accuracy_score(training_target, trained_model.predict(training_features))
Test Accuracy: accuracy_score(test_target, predictions)
Confusion Matrix: confusion_matrix(test_target, predictions)

但是,我对解释和解释这些值感到有些困惑。

这 3 项措施究竟告诉了我关于我的模型的什么信息?

谢谢!

1个回答

定义

  • 准确率:正确分类的数量/分类的总量。
  • 训练准确度:模型在其构建的示例上的准确度。
  • 测试准确度是模型在未见过的示例上的准确度。
  • 混淆矩阵:预测类(通常是垂直的)与实际类(因此是水平的)的表格。

过拟合

我对你的结果的看法是你的模型过度拟合您可以从测试和训练精度之间的巨大差异中看出这一点。过度拟合意味着它专门为训练集学习了规则,这些规则并不能很好地推广到训练集之外。

你的混淆矩阵告诉我们它有多少过度拟合,因为你最大的班级占人口的 90% 以上。假设您的测试集和训练集具有相似的分布,任何有用的模型都必须获得超过 90% 的准确度:一个简单的 0R 模型就可以了。您的模型在测试集上的得分略低于 80%。

深入了解混淆矩阵

如果您相对(以百分比)查看混淆矩阵,它将如下所示:

               Actual    TOT
               1    2
Predicted 1 | 77% | 4% | 81%  
Predicted 2 | 17% | 2% | 19%
TOT         | 94% | 6% |

您可以从第一行的总数推断出,您的模型预测1 类的概率为 81%,而1 类的实际发生率为94%。因此,您的模型低估了此类。可能是它在训练集上学习了特定(复杂)规则,这在测试集中对你不利。

还可能值得注意的是,即使第 1 类的假阴性(17% 点,第 2 行,第 1 列)对您的整体表现影响最大,第 2 类的假阴性(4% 点,第 1 行列) 2)实际上在各个类别的总人口中更为常见(94%,6%)。这意味着您的模型不擅长预测Class 1,但更不擅长预测Class 2第 1 类的准确度为 77/99,而第 2 类的准确度为2/6。