分类器混淆矩阵的比较

数据挖掘 Python 逻辑回归 k-nn 混淆矩阵 lda-分类器
2022-02-25 23:32:45

我尝试为python 中“统计学习简介”中提供的smarket 数据集实现逻辑回归、线性判别分析和 KNN 。

逻辑回归和 LDA 在实施方面非常简单。这是测试数据集上的混淆矩阵。

在此处输入图像描述 在此处输入图像描述

它们都非常相似,精度几乎相同。但我尝试通过绘制损失与 K 图来找到 KNN 的 K:

在此处输入图像描述

并选择了一个 125 左右的 K 来得到这个混淆矩阵(相同的测试数据集)

在此处输入图像描述

尽管 KNN 给出了大约 0.61 的更高准确度,但混淆矩阵与逻辑和 LDA 矩阵有很大不同,它们的真阴性和真阳性要高得多。我真的不明白为什么会这样。任何帮助,将不胜感激。

这是我计算 KNN 分类器损失的方法(使用 Sklearn)。由于 Y 值是定性的,因此无法使用 MSE。

k_set = np.linspace(1,200, dtype=int)
knn_dict = {}

for k in k_set:
    model = KNeighborsClassifier(k)
    model.fit(train_X, train_Y)
    y_pred = model.predict(test_X)
    loss = 1 - metrics.accuracy_score(test_Y, y_pred)
    knn_dict[k] = loss

model = KNeighborsClassifier(K)
model.fit(train_X, train_Y)
knn_y_pred = model.predict(test_X)

knn_cnf_matrix = metrics.confusion_matrix(test_Y, knn_y_pred)

对数据科学来说非常新。我希望我已经提供了足够的背景/上下文。如果需要更多信息,请告诉我。

1个回答

几点评论:

  • 我不知道这个数据集,但它似乎是一个难以分类的数据集,因为性能并不比随机基线好多少(二进制分类中的随机基线提供 50% 的准确率,因为它猜对了一半的时间)。
  • 如果我没记错的话,多数类(1 类)在 252 个实例中有 141 个实例,即 56%(顺便说一下,矩阵中的数字不容易读取)。这意味着自动分配类别 1 的分类器将达到 56% 的准确率。这被称为多数基线,这通常是二元分类器想要达到的最低性能。LR 和 LDA 分类器比这更糟糕,所以实际上它们并没有真正起作用。
  • k-NN 分类器似乎确实给出了更好的结果,重要的是高于 56%,因此它实际上“学习”了一些有用的东西。
  • 前 2 个分类器比 1 类更频繁地预测 0 类,这有点奇怪。看起来训练集和测试集没有相同的分布。
  • k-NN 分类器更准确地预测第 1 类,这就是它工作得更好的原因。k-NN 对数据分布也不太敏感:如果训练集和测试集之间存在差异,这可以解释前 2 个分类器的差异。
  • 然而,它很少对kk-NN 这么高(125)。通常它应该是一个低值,比如只有一位数。我不确定在这种情况下这意味着什么。
  • 建议:您可以尝试一些更强大的分类器,例如决策树(或随机森林)或 SVM。