Consecuencia del escalado de características

11

Actualmente estoy usando SVM y escalando mis características de entrenamiento al rango de [0,1]. Primero ajusto / transformo mi conjunto de entrenamiento y luego aplico la misma transformación a mi conjunto de prueba. Por ejemplo:

    ### 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)

Supongamos que una característica dada en el conjunto de entrenamiento tiene un rango de [0,100], y que la misma característica en el conjunto de prueba tiene un rango de [-10,120]. En el conjunto de entrenamiento, esa característica se escalará apropiadamente a [0,1], mientras que en el conjunto de pruebas, esa característica se escalará a un rango fuera de ese primer especificado, algo así como [-0.1,1.2].

Me preguntaba cuáles son las consecuencias de que las características del conjunto de pruebas estén fuera del alcance de las que se usan para entrenar el modelo. ¿Es esto un problema?

mike1886
fuente

Respuestas:

6

Dentro de cada clase, tendrá distribuciones de valores para las características. Eso en sí mismo no es motivo de preocupación.

Desde un punto de vista ligeramente teórico, puede preguntarse por qué debería escalar sus características y por qué debería escalarlas exactamente de la manera elegida.
Una razón puede ser que se sabe que su algoritmo de entrenamiento particular converge más rápido (mejor) con valores alrededor de 0 - 1 que con características que cubren otros órdenes de magnitud. En ese caso, probablemente estés bien. Supongo que su SVM está bien: desea evitar números demasiado grandes debido al producto interno, pero un máximo de 1.2 frente a un máximo de 1.0 no hará mucha diferencia.
(OTOH, por ejemplo, si supiera que su algoritmo no acepta valores negativos, obviamente estaría en problemas).

La pregunta práctica es si su modelo funciona bien para casos que están ligeramente fuera del rango cubierto por la capacitación. Creo que esto se puede responder mejor y posiblemente solo probando con tales casos / inspeccionando los resultados de la prueba para ver si hay una caída del rendimiento en casos fuera del dominio de capacitación. Es una preocupación válida y analizar esto sería parte de la validación de su modelo.

Observar las diferencias del tamaño que describe es, en mi humilde opinión, una razón para observar de cerca la estabilidad del modelo.

cbeleites descontentos con SX
fuente
7

Esto se entiende como un comentario, pero es demasiado largo.

El hecho de que su conjunto de prueba tenga un rango diferente podría ser una señal de que el conjunto de entrenamiento no es una buena representación del conjunto de prueba. Sin embargo, si la diferencia es realmente pequeña como en su ejemplo, es probable que no afecte sus predicciones. Desafortunadamente, no creo que tenga una buena razón para pensar que no afectará un SVM en ninguna circunstancia.

Observe que la razón para usar MinMaxScalar es (de acuerdo con la documentación):

La motivación para usar este escalado incluye robustez a desviaciones estándar muy pequeñas de las características y preservar cero entradas en datos dispersos.

Por lo tanto, es importante que se asegure de que sus datos se ajusten a ese caso.

Si realmente le preocupa tener un rango de diferencia, debe usar una estandarización regular (como preprocessing.scale) en su lugar.

Robert Smith
fuente
Hola Robert, gracias por la respuesta! Un buen punto sobre la representación del conjunto de entrenamiento / prueba, pero se trata de datos de series de tiempo, por lo que a medida que ingresan nuevos datos, no puedo garantizar que los valores sean similares en rango a lo que eran antes. Tengo la misma sensación que usted de que no tengo buenas razones para pensar que no afectará a un SVM en ninguna circunstancia.
mike1886
¿Ha comparado las predicciones con MinMaxScaler y la estandarización?
Robert Smith
Tengo y los resultados son similares, pero eso realmente no me dice si las cosas se están poniendo feas con el MinMaxScalar.
mike1886
Seguro. En cualquier caso, sería mejor utilizar la estandarización si no obtiene algo valioso MinMaxScaler.
Robert Smith