Как проверить точность изображений, которых не было в наборе данных

Я использую train_test_split для обучения и тестирования своих данных. Это интересная концепция для разделения данных на обучение и тестирование, но что, если я хочу загрузить некоторые данные, которых не было в тестовых данных?

Моя проблема в том, что train_test_split обрабатывает данные случайным образом, я хотел бы увидеть, к какому ярлыку принадлежит внешнее изображение.

В настоящее время я извлекаю 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., 236., 224.,  70., 223., 175., 195.],
       [140., 233., 226., 161., 234., 220.,  67., 220., 159., 194.],
       [135., 233., 225., 157., 234., 221.,  65., 220., 159., 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, A_test, b_train, b_test):
    
    clf.fit(A_train, b_train)
    print ("Accuracy on training set:")
    print (clf.score(A_train, b_train))

train(svc_, A_train, A_test, b_train, b_test)

Например, как мне проверить особенности следующего изображения?

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

Итак, то, что я делаю, - это выбираю конкретное изображение, немного редактирую его, а затем я хотел бы увидеть, как мой классификатор работает при тестировании этого изображения, которое было отредактировано, которое не было обучено и не было в наборе данных, например, если Я выбрал изображение из Интернета, как мне его протестировать?


person John Jones    schedule 21.08.2020    source источник


Ответы (1)


Если вы знаете, как получить интересующие вас функции из ваших изображений, просто загрузите изображение, соберите функции, затем спрогнозируйте и проверьте правильные значения. Например

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))

Перед этим вы должны уже обучить свой классификатор.

person alwaysmvp45    schedule 21.08.2020
comment
Я не понимаю ваше решение, как мне проверить свое обучение на изображении, которое я не загрузил в набор данных? ты делаешь то же самое, что и я - person John Jones; 21.08.2020
comment
Вам не нужно загружать изображение в набор данных. Например, определите вашу последовательность test_image = ([[126., 232., 225., 149., 231., 222., 60., 218., 152., 191.]]), затем вызовите predictions = clf.predict ( test_image) это все, что вам нужно - person alwaysmvp45; 22.08.2020