如何从不在数据集中的图像测试准确性

问题描述

我正在使用train_test_split训练和测试我的数据,这是一个有趣的概念,可以将数据分为训练和测试,但是如果我要加载测试数据中没有的某些数据怎么办?

我的问题是train_test_split仅处理数据rand,我想看看外部图像属于什么标签

当前,我正在从图像中提取22个特征,并使用这些特征来训练线性SVC以进行识别,现在根据train_test_split,我得到了94%的测试集,这很好,我要做的就是简单地对其进行测试在不在数据集中的图像上。 train_test_split从先前加载的数据集中接收数据以进行训练和测试,但是我想加载图像并直接对其进行测试。

可复制的示例:(3张具有10个功能的图像)

import sklearn
from sklearn.model_selection import train_test_split
from sklearn import metrics

y_target = [1]*1 + [2]*1 + [3]*1 # number of images per person
data = np.asarray([[152.,236.,228.,168.,224.,70.,223.,175.,195.],[140.,233.,226.,161.,234.,220.,67.,159.,194.],[135.,225.,157.,221.,65.,193.]])

svc_ = SVC(kernel='linear',C=0.00005)

A_train,A_test,b_train,b_test = train_test_split(
        data,y_target,test_size=0.25,random_state=0)

def train(clf,A_train,b_test):
    
    clf.fit(A_train,b_train)
    print ("Accuracy on training set:")
    print (clf.score(A_train,b_train))

train(svc_,b_test)

例如,我将如何测试以下图像的功能

([[126.,232.,149.,231.,222.,60.,218.,152.,191.]])

所以,我要做的是选择一个特定的图像,对其进行一些编辑,然后我想看看我的分类器在测试该图像中的效果,该图像未经编辑,在数据集中没有经过训练,例如,如果我从互联网上选择了一张图片,我将如何对其进行测试?

解决方法

如果您知道如何从图像中获取感兴趣的功能,则只需加载图像,收集功能,然后根据正确的值进行预测和测试。例如

y_test = [[1],[2],[3]]
images = # fill in however you are getting your images into memory here
clf.score(images,y_test)

# or get the predictions by hand and do your own metric
predictions = clf.predict(images)
mse = np.mean(np.square(y_test - predictions))

在执行此操作之前,您应该已经训练过分类器。