Последствия масштабирования объектов

11

В настоящее время я использую SVM и масштабирую свои тренировочные возможности до диапазона [0,1]. Сначала я подгоняю / преобразовываю свой тренировочный набор, а затем применяю то же преобразование к своему испытательному набору. Например:

    ### Configure transformation and apply to training set
    min_max_scaler = MinMaxScaler(feature_range=(0, 1))
    X_train = min_max_scaler.fit_transform(X_train)

    ### Perform transformation on testing set
    X_test = min_max_scaler.transform(X_test)

Предположим, что данный признак в обучающем наборе имеет диапазон [0,100], а тот же признак в наборе испытаний имеет диапазон [-10,120]. В обучающем наборе этот признак будет масштабирован соответствующим образом до [0,1], тогда как в тестовом наборе этот признак будет масштабирован до диапазона, выходящего за пределы указанного первого, что-то вроде [-0,1,1.2].

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

mike1886
источник

Ответы:

6

Внутри каждого класса вы будете иметь распределение значений для функций. Это само по себе не повод для беспокойства.

С немного теоретической точки зрения, вы можете спросить себя, почему вы должны масштабировать свои функции и почему вы должны масштабировать их точно выбранным способом.
Одной из причин может быть то, что ваш конкретный алгоритм обучения, как известно, сходится быстрее (лучше) со значениями около 0 - 1, чем с функциями, которые охватывают другие порядки величины. В этом случае вы, вероятно, в порядке. Я думаю, что ваш SVM в порядке: вы хотите избежать слишком больших чисел из-за внутреннего продукта, но максимум 1,2 против 1,0 не будет иметь большого значения.
(OTOH, если вы, например, знали, что ваш алгоритм не принимает отрицательные значения, у вас, очевидно, будут проблемы.)

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

Наблюдение различий в размерах, которые вы описываете, ИМХО является причиной, чтобы довольно внимательно взглянуть на стабильность модели.

cbeleites недоволен SX
источник
7

Это подразумевалось как комментарий, но это слишком долго.

Тот факт, что ваш тестовый набор имеет другой диапазон, может быть признаком того, что тренировочный набор не является хорошим представлением тестового набора. Однако, если разница действительно мала, как в вашем примере, скорее всего, это не повлияет на ваши прогнозы. К сожалению, я не думаю, что у меня есть веские основания полагать, что это не повлияет на SVM ни при каких обстоятельствах.

Обратите внимание, что обоснование использования MinMaxScalar (согласно документации):

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

Поэтому важно убедиться, что ваши данные соответствуют этому случаю.

Если вы действительно обеспокоены наличием диапазона различий, вам следует preprocessing.scaleвместо этого использовать обычную стандартизацию (например, ).

Роберт Смит
источник
Привет, Роберт, спасибо за ответ! Хороший вопрос о представлении набора обучения / теста, но это данные временного ряда, так что по мере поступления новых данных я не могу гарантировать, что значения будут сходны по диапазону с тем, что они были раньше. У меня точно такое же чувство, как и у вас, что у меня нет веских оснований полагать, что это не повлияет на SVM ни при каких обстоятельствах.
mike1886
Вы сравнивали прогнозы с использованием MinMaxScaler и стандартизации?
Роберт Смит
У меня есть, и результаты схожи, но это не говорит мне, если что-то пошло не так с MinMaxScalar.
mike1886
Конечно. В любом случае было бы лучше использовать стандартизацию, если вы не получаете что-то ценное MinMaxScaler.
Роберт Смит