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

Вопрос или проблема

Я программирую на Python. У меня есть два набора образцов. Набор1 содержит образцы класса A, а другой набор, Набор2, содержит образцы класса B. Эти образцы являются частью обучающего набора данных. Когда я предсказываю наборы 1 и 2 по отдельности, классификация идеальна. Но когда я объединяю оба набора для предсказания в один набор, предсказание дает неверный результат для образцов в Наборе2, т.е. предсказывает образцы набора 2 как принадлежащие классу A. В то же время образцы, принадлежащие Набору1, предсказываются как класс A в объединенном наборе. Почему это происходит? (Я сохранил модель и загрузил эту модель для дальнейшего предсказания, та же ошибка сохраняется)

model.add(Dense(newshape[1]+1, activation='relu', input_shape=(newshape[1],)))
model.add(Dropout(0.5))
model.add(Dense(500, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(250, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(100, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(50, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss="binary_crossentropy",
          optimizer="adam",
          metrics=['binary_accuracy'])
model.fit(X_train, y_train,validation_data=(X_test, y_test),validation_split=0.2, epochs=500, batch_size=25, verbose=0)

У вас есть ошибка где-то в данных, которые вы предоставляете в качестве обучающих данных, или в модели, которую вы используете для предсказания.

Если бы это была действительно одна и та же модель, обученная на полных данных во всех случаях, тогда любой экземпляр в наборе2 всегда предсказывался бы с одним и тем же классом (правильным или неправильным), независимо от других экземпляров в тестовом наборе. Это предполагает, что модель, которая применяется при предсказании отдельных наборов или обоих одновременно, не одна и та же.

В качестве теста сначала сохраните вашу модель, а затем примените ее к различным случаям (используйте сохраненную модель, не обучайте ее снова).


Хорошо, вы пытаетесь провести 3 эксперимента:

  • Обучение на полном обучающем наборе создает modelA, затем примените modelA к набору1
  • Обучение на полном обучающем наборе создает modelB, затем примените modelB к набору2
  • Обучение на полном обучающем наборе создает modelC, затем примените modelC как к набору1, так и к набору2

Но если бы это действительно так, три модели были бы одинаковыми: modelA = modelB = modelC. На самом деле вы можете сделать так:

  1. Обучение на полном обучающем наборе создает modelD
  2. примените modelD к любому набору

Судя по вашему описанию, вероятно, происходит следующее:

  • Обучение на экземплярах класса A (ошибка) создает modelA, затем примените modelA к набору1 -> идеальные результаты
  • Обучение на экземплярах класса B (ошибка) создает modelB, затем примените modelB к набору2 -> идеальные результаты
  • Обучение на экземплярах класса A (ошибка) создает modelC = modelA, затем примените modelC к наборам 1 и 2: идеально для класса A, совершенно неверно для класса B

Вам нужно проверить, какие экземпляры вы предоставляете в качестве обучающего набора в каждом случае.

Ответ или решение

Проблема, с которой вы столкнулись при использовании модели машинного обучения для прогноза различных классов из объединенных выборок, может быть связана с несколькими ключевыми аспектами в процессе обучения и предсказания. Позвольте рассмотреть это подробнее, чтобы выявить возможные причины неудачного результата при объединении выборок Set1 и Set2.

1. Модель и данные

На первом этапе важно оценить, как вы подготавливаете данные для обучения. Ваша модель, судя по коду, предназначена для бинарной классификации, где класс A соответствует метке 0, а класс B — метке 1. Следовательно, если вы тренируете модель на выборке, содержащей только элементы одного класса (например, только классы A или только классы B), это может привести к тому, что модель не сможет правильно классифицировать элементы из противоположного класса.

2. Разделение данных и обучение

При обучении на Set1 и Set2 по отдельности вы, вероятно, получаете хорошую точность, потому что модель адаптирована к узкому набору данных, который состоит исключительно из одного класса. Однако, когда вы затем объединяете выборки для предсказания, вы используете модель, которая не была обучена на данных класса B (если в первый раз вы использовали только Set1). Вот возможная последовательность действий:

  • Модель A: Обучена на Set1 (только класс A) — хорошая точность при прогнозировании Set1.
  • Модель B: Обучена на Set2 (только класс B) — хорошая точность при прогнозировании Set2.
  • Модель C (объединение): Обучена на Set1 с ошибками или использует модель, которая не адаптирована для обоих классов — в результате получаете плохую точность на Set2.

3. Проблемы с подготовкой данных

Также необходимо учитывать качество подготовки данных:

  • Убедитесь, что обе выборки правильно нормализованы. Различия в диапазонах значений между выборками могут привести к некорректным предсказаниям.
  • Проверьте, нет ли в ваших данных аномалий или выбросов, которые могут привести к смещению модели.
  • Удостоверьтесь, что при объединении выборок вы не случайно не смешиваете метки классов (например, не заменяете метку класса A на метку класса B для элементов Set1 и наоборот).

4. Обучение на полной выборке

Для достижения наилучших результатов рассмотрите возможность использования всех доступных данных (Set1 + Set2) для обучения одной модели. Это позволит модели лучше понять распределение классов внутри общей выборки и будет способствовать более точным предсказаниям при работе с новыми данными.

Заключение

Ваша задача заключается в том, чтобы убедиться в правильности подготовки данных и правильном обучении модели. Следите за тем, чтобы каждая модель (особенно, когда речь идет о бинарной классификации) имела доступ ко всем классам, чтобы избежать неправильных предсказаний. Возможно, стоит разработать стратегию, в которой вы обучите обобщённую модель на объединенной выборке и протестируете её на отдельных данных из Set1 и Set2 для проверки ее предсказательной способности.

Оцените материал
Добавить комментарий

Капча загружается...