#python #machine-learning #scikit-learn #svm #train-test-split
#python #машинное обучение #scikit-learn #svm #тренировка-тест-разделение
Вопрос:
Я использую train_test_split для обучения и тестирования своих данных это интересная концепция разделения данных на обучение и тестирование, но что, если я захочу загрузить некоторые данные, которых не было в тестовых данных?
Моя проблема в том, что train_test_split обрабатывает данные случайным образом, я хотел бы посмотреть, к какой метке относится внешнее изображение.
В настоящее время я извлекаю 22 объекта из изображений и использую эти функции для обучения linear 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.]])
Итак, что я делаю, это выбираю конкретное изображение, немного редактирую его, затем я хотел бы посмотреть, как мой классификатор работает при тестировании этого изображения, которое было отредактировано, которое не было обучено и его не было в наборе данных, например, если бы я выбрал изображение из Интернета, как бы я его протестировал??
Ответ №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))
Вы должны были уже обучить свой классификатор, прежде чем делать это.
Комментарии:
1. я не понимаю вашего решения, как мне протестировать мое обучение на изображении, которое я не загружал в набор данных? вы делаете то же самое, что и я
2. Вам не нужно загружать изображение в набор данных. Например, определите свою последовательность test_image = ([[126., 232., 225., 149., 231., 222., 60., 218., 152., 191.]]) тогда вызов predictions = clf.predict(test_image) — это все, что вам нужно