почему подготовленный отчет классификатора показывает хорошие результаты, а на самом деле работа с тестовым набором выполняется так плохо? - PullRequest
0 голосов
/ 18 апреля 2019

Я работаю с SVM, и я пытаюсь обучить классификатор SVC для цветов, я использовалатерификация_report (из sklearn.metrics) для проверки моей модели, и ее производительность выглядит следующим образом:

Classfilierпроизводительность на наборе обучающих данных

          precision    recall  f1-score   support

  Class0       0.99      0.98      0.98      3197
  Class1       0.95      0.97      0.96      1315

микро-средняя 0,98 0,98 0,98 4512 макро-средняя 0,97 0,97 0,97 4512 средневзвешенная средняя 0,98 0,98 0,98 4512

производительность Classfilier на тестовых данных

          precision    recall  f1-score   support

  Class0       0.97      0.98      0.97      1046
  Class1       0.96      0.92      0.94       458

micro avg 0.96 0.96 0.96 1504 macro avg 0.96 0.95 0.96 1504 weighted avg 0.96 0.96 0.96 1504

отчет показывает, что высокий показатель точности 、 напоминает 、 f1-счет ,, но когда я использую классификатор в новомтестовый набор (фотография), этот классификатор не выполняет классификацию хорошо, даже новый тестовый набор включает в себя набор поездов, я не могу найти, почему это произошло ааа

color_average0 = 
array([[107, 106, 106],
   [105, 107, 107],
   [107, 107, 106],
   ...,
   [ 20,  20,  19],
   [ 20,  20,  20],
   [ 20,  20,  20]], dtype=uint8)

color_average1 = 
array([[163, 164, 163],
   [164, 163, 162],
   [160, 163, 163],
   ...,
   [ 17,  17,  15],
   [ 18,  17,  17],
   [ 17,  17,  17]], dtype=uint8)

train_data=np.vstack([color_average0,color_average1])
train_label=np.vstack((np.zeros((class_0.shape[0],1),dtype='uint8'
                    ),np.ones((class_1.shape[0],1),dtype='uint8')))

def classifier_train(train_data, train_label):
    classifier2 = SVC()
    classifier2.fit(train_data, train_label)
   return classifier2

img1 = cv2.imread('filepath')
for i in range(img1.shape[0]):
    for j in range(img1.shape[1]):
       point = img1[i,j].reshape(1,-1)
      response = classifier2.predict(point)
      if response != 1:
         img1[i,j] = Black_color
      else:
         img1[i,j] = White_color

он показал так плохо,

не использовать классификатор

img1[img1 != 0].shape == (5172333,)

после классификатора

 Img1[img1 != 0].shape == (1905,)

он может найти только около 0,037% всех пикселей

...