如何检查我的数据集的预测

How to check the prediction of my dataset

我有 3 个数据集文件夹,

1- Face Images 
2- Non-Face Images 
3- Testing Dataset

我使用 SVM 训练我的数据集,使用面部图像作为 1,非面部图像作为 -1。我的文件经过训练并以 .xml 格式保存。我检查了来自测试数据集的一些图像的预测,这些图像是正负数据集的混合。现在我正在尝试创建一个混淆矩阵。我从 here 那里读到过它。

在我的测试数据集中,图像几乎有 50 张,(35 张正片和 15 张负片)命名为 1_F.jpg、2_F.jpg、3_NF ... 50NF.jpg。这里 F 代表人脸,NF 代表非人脸。这些实际上是图像的名称。

Can I call it a labeled dataset?

当我将混淆矩阵应用于文件夹中的所有图像时,我如何创建混淆矩阵,我如何知道它是否正确预测了图像?

根据例子here,他们已经有了预测矩阵,但我想我没有这个。我还检查了 thisthis 以便更好地理解。

要创建混淆矩阵,请查看 Python 中的 scikit-learn 库。假设 y_actual 是您的测试标签集,与您的测试集中的图像对应的特征存储在一个名为 X_test 的变量中,您训练的分类器为 clf,一种可能的方式构造混淆矩阵如下:

from sklearn.metrics import confusion_matrix 
y_pred = clf.predict(X_test)
## Obtaining confusion matrix below
CM = confusion_matrix(y_pred, y_actual)

我可以称其为带标签的数据集吗?

如果没有测试集的原始标签,您将无法确认您的预测。从混淆矩阵中,您可以得出有关模型性能的不同指标。

鉴于您已根据是否存在人脸为测试集中的图像命名,您可以使用它来获得 y_actual

import glob
import os

import numpy as np

def obtain_y_pred(test_folder):
    label = {'F':1, 'NF':-1}
    test_images = glob.glob(os.path.join(test_folder, '*.jpg'))
    y_test_ = []
    for image in test_images:
        y_test_.append(label[image.split('/')[-1].split('.')[0].split('_')[-1]])

    return np.array(y_test_)

总而言之,您首先需要知道测试集的标签。然后,您需要在 训练集 上训练模型后,评估模型在 测试集 上的表现。