为了账号安全,请及时绑定邮箱和手机立即绑定

使用 SVC 分类的 100% 准确度,一定有问题吗?

使用 SVC 分类的 100% 准确度,一定有问题吗?

心有法竹 2021-09-11 10:52:13
我试图实现的上下文:我在使用 scikit 进行图像分类时遇到问题。我有 Cifar 10 数据、训练和测试图像。有 10000 张训练图像和 1000 张测试图像。每个测试/训练图像都存储在测试/训练 npy 文件中,作为 4 维矩阵(高度、宽度、rgb、样本)。我也有测试/训练标签。我有一个“computeFeature”方法,它利用定向梯度直方图方法将图像域特征表示为向量。我试图在训练和测试数据上迭代此方法,以便我可以创建一组可以稍后使用的特征,以便对图像进行分类。我尝试使用 I 创建一个 for 循环并将结果存储在一个 numpy 数组中。然后我必须继续应用 PCA/LDA 并使用 SVC 和 CNN 等(任何图像分类方法)进行图像分类。import numpy as npimport skimage.featurefrom sklearn.decomposition import PCAtrnImages = np.load('trnImage.npy')tstImages = np.load('tstImage.npy')trnLabels = np.load('trnLabel.npy')tstLabels = np.load('tstLabel.npy')from sklearn.svm import SVCdef computeFeatures(image):hog_feature, hog_as_image = skimage.feature.hog(image, visualize=True, block_norm='L2-Hys')return hog_featuretrnArray = np.zeros([10000,324]) tstArray = np.zeros([1000,324])for i in range (0, 10000 ):    trnFeatures = computeFeatures(trnImages[:,:,:,i])    trnArray[i,:] = trnFeaturesfor i in range (0, 1000):    tstFeatures = computeFeatures(tstImages[:,:,:,i])    tstArray[i,:] = tstFeaturespca = PCA(n_components = 2)trnModel = pca.fit_transform(trnArray)pca = PCA(n_components = 2)tstModel = pca.fit_transform(tstArray)# Divide the dataset into the two sets.test_data = tstModeltest_labels = tstLabels train_data = trnModeltrain_labels = trnLabels C = 1 model = SVC(kernel='linear', C=C)model.fit(train_data, train_labels.ravel())y_pred = model.predict(test_data)accuracy = np.sum(np.equal(test_labels, y_pred)) / test_labels.shape[0] print('Percentage accuracy on testing set is: {0:.2f}%'.format(accuracy))准确度打印为 100%,我很确定这是错误的,但我不确定为什么?
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您的方法的一个明显问题是您以一种相当奇特的方式应用 PCA。您通常应该只估计一个变换——在训练数据上——然后用它来变换任何评估集。

通过这种方式,您有点……使用白化批处理规范实现 SVM,这听起来很酷,但至少相当不寻常。所以它需要非常小心。例如,通过这种方式,您无法对单个样本进行分类。尽管如此,它仍然可以作为一种无监督的适应技术。

除此之外,如果不访问您的数据就很难判断。你确定测试集和训练集是不相交的吗?


查看完整回答
反对 回复 2021-09-11
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

在这种情况下,当务之急是模型过度拟合。任何专业评审员都会立即将其返还给调查员。在这种情况下,我怀疑这是使用的统计方法的结果。

我不处理图像,但我会质疑为什么 PCA 被堆叠到 SVM 上。通俗地说,您正在使用两种连续的方法来减少/折叠超维空间。这很可能会导致确定的结果。如果您一次折叠高级维度,为什么要重复它?

PCA 是图像的标准,但后面应该有一些非常简单的东西,比如 K-means。

当然,另一种代替 PCA 的方法是 NMF,如果您觉得 PCA 没有提供所寻求的解决方案,我会推荐它。

否则计算看起来不错。


accuracy = np.sum(np.equal(test_labels, y_pred)) / test_labels.shape[0]

再想一想,准确度指数可能与过拟合无关,IF(这是一种语法强调类型“IF”),test_labels 包含对图像的预测(其中约 50% 是不正确的)。

然而,我只是猜测这就是“test_labels”数据,我们不知道该预测是如何得出的。所以我不确定有足够的信息来回答这个问题。顺便说一句,"shape[0]"请解释一下好吗?需要吗?


查看完整回答
反对 回复 2021-09-11
  • 3 回答
  • 0 关注
  • 259 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信