【问题标题】:How to check the prediction of my dataset如何检查我的数据集的预测
【发布时间】:2020-02-23 01:08:02
【问题描述】:

我有 3 个数据集文件夹,

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

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

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

Can I call it a labeled dataset?

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

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

【问题讨论】:

    标签: python machine-learning image-processing computer-vision confusion-matrix


    【解决方案1】:

    要创建混淆矩阵,请查看 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_)
    

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

    【讨论】:

    • 谢谢你这么好的解释。最后一个查询,所以我不必写 2_F,只要 F 就可以了?
    • 每个文件名当然必须是唯一的。我认为在文件名中编码标签的想法是一个好主意,对于测试集
    • 还有另一个建议。我刚刚注意到您的文件以 .xml 格式保存。那是您保存为 .xml 文件的分类器吗?
    • 训练数据集在 .xml 中
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 2021-03-20
    • 2020-08-18
    • 2019-04-02
    • 2018-10-31
    • 2012-09-13
    • 2017-12-20
    • 2022-02-18
    相关资源
    最近更新 更多