Для ввода в нейронные сети данные должны быть масштабированы до диапазона [0,1]. Для этого часто я вижу следующий вид кода в блогах:
x_train, x_test, y_train, y_test = train_test_split(x, y)
scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
Проблема здесь в том, что мин / макс тестового набора может быть вне диапазона мин / макс обучающего набора. Если это произойдет, то нормализованные значения в X_test будут больше 1,0 или отрицательны. Например:
train_data = [[0,3],[0,7],[0,9],[0,16],[0,10]]
test_data = [[1,1],[1,25],[1,6]]
scaler = MinMaxScaler()
train_scaled = scaler.fit_transform(train_data)
test_scaled = scaler.transform(test_data)
print(test_scaled)
[[ 1. -0.15384615]
[ 1. 1.69230769]
[ 1. 0.23076923]]
Тривиальным решением является масштабирование перед расщеплением, но это не решит проблему, кроме как в образцах игрушек. В качестве примера из реальной жизни рассмотрим обнаружение аномалий, когда обучающий набор обычно состоит из довольно обычных данных. В таких случаях, когда аномальная ситуация может содержать данные, выходящие за пределы того, что сеть видела на этапе обучения.
В таких ситуациях можно ли подавать> 1,0 или <0,0 числа в нейронную сеть? сеть? Если нет, каков рекомендуемый способ нормализации данных? </p>
(Одним из возможных решений является определение верхней границы для значений, например, 120% от максимального значения, наблюдаемого во время тренировки, и насыщение любого значения сверх этого к этой верхней границе. Но есть ли предопределенная функция масштабирования, которая делает этот вид отсечения перед масштабированием?)