Является ли пороговое значение в `(model.predict(img) > 0,5).astype(np.int32)` (т. е.) 0,5 всегда фиксированным?

#python #keras #deep-learning #conv-neural-network #predict

Вопрос:

Должно ли пороговое значение всегда быть 0,5 или мы можем настроить его в соответствии с нашими потребностями ? Я пытаюсь обнаружить пожар в видео, анализируя каждый кадр. Когда я это делаю, я получаю много ложных отрицательных результатов, когда мое пороговое значение уверенности ( confidence = model.predict(img) ) равно o.5. Так могу ли я на самом деле скорректировать значение, чтобы получить лучшие результаты, или это похоже на обман прогноза модели ?

Это мой код:

 from keras.preprocessing import image import numpy as np i = cv2.imread(img) img = image.load_img(img,target_size=(250,250)) img = image.img_to_array(img) img = np.expand_dims(img,axis=0) img = img / 255  res = (model.predict(img) gt; 0.5).astype(np.int32) if res == 0:  print('Fire Detected') else:  print('No Fire Detected.')  

Комментарии:

1. Вы можете настроить его, посмотрев на кривую ROC и т. Д.

Ответ №1:

Вам не нужно использовать пороговое значение 0.5. Это так, потому что обычно модели классификации максимизируют точность, и для этого показателя 0,5 имеет наибольший смысл. Однако ваша проблема может быть другой, может быть, вы заботитесь о точности больше, чем о запоминании? Затем настройка порога является одним из способов настройки вашей модели (например, путем построения кривой ROC, чтобы увидеть возможные компромиссы). Это несколько наивный способ, хотя, и можно также просто спросить себя «какова моя фактическая цель» перед тем, как начать, и максимизировать эту метрику с самого начала, вместо того, чтобы максимизировать точность, а затем настроить пороговое значение, чтобы настроить другое. Например, для устранения дисбаланса между положительными/отрицательными классами вы можете рассмотреть возможность взвешивания классов и т. Д. (это позволит эффективно максимизировать точность взвешивания).