Почему точность моей модели меняется в зависимости от того, загружена она из маринада или недавно подготовлена? - PullRequest
0 голосов
/ 16 января 2019

Я создаю собственную реализацию алгоритма Виолы-Джонса. Когда я обучаю классификатор и оцениваю его точность, он точно классифицирует 462 из 1000 примеров. Однако, когда я загружаю ту же модель из файла маринада и проверяю ее точность на том же наборе данных, ее точность внезапно становится 999 из 1000.

Я пытался варьировать гиперпараметры алгоритма, но точность сразу после обучения всегда равна 462/1000, что является количеством отрицательных примеров в наборе данных. Я считаю, что это означает, что clf.classify(x) всегда возвращает 0, но я не понимаю, почему это больше не должно иметь место, когда я загружаю модель из файла маринада.

training = training[0:1000] #An array of tuples, first element in each tuple is a numpy array, the second is its classification

try:
    clf = ViolaJones.load("viola_jones") #Loads classifier from pickle
    print("Loaded classifier from file")
except Exception as e:
    print("Failed to load classifier from file: %s" % str(e))
    pos_num, neg_num = 0, 0
    for x, y in training:
        if y == 1:
            pos_num += 1
        else:
            neg_num += 1
    clf = ViolaJones(feature_num=2)
    clf.train(training, pos_num, neg_num)

    clf.save("viola_jones") #Saves classifier to pickle

correct = 0
for x, y in training:
    prediction = clf.classify(x)
    correct += prediction == y
print("Correctly labeled %d out of %d training examples" % (correct, len(training)))

Я запускаю файл один раз, чтобы обучить модель, оценить ее и сохранить в файл (для простоты я использую тренировочный набор и для обучения, и для оценки, хотя я знаю, что это плохая практика). При повторном запуске файла он вместо этого загрузит модель из файла и оценит ее. Заранее спасибо.

1 Ответ

0 голосов
/ 17 января 2019

Я обнаружил, что в функции clf.train я изменяю массив training своей конструкцией функций, поскольку массив передается по ссылке. Вот почему модель плохо показала результаты оценки сразу после обучения, так как в ней были эффективные технические характеристики, основанные на инженерных функциях. Перезагрузка данных тренировки перед оценкой устранила проблему.

...