Sí, parece estar descrito en algunos lugares diferentes, sin ningún enlace a ningún documento.
La documentación de la clase resume el algoritmo de la siguiente manera:
La transformación se aplica en cada característica de forma independiente. La función de densidad acumulativa de una entidad se usa para proyectar los valores originales. Los valores de características de datos nuevos / no vistos que caen por debajo o por encima del rango ajustado se asignarán a los límites de la distribución de salida. Tenga en cuenta que esta transformación no es lineal. Puede distorsionar las correlaciones lineales entre las variables medidas en la misma escala, pero hace que las variables medidas en diferentes escalas sean más directamente comparables.
Y la guía del usuario agrega información nueva:
Sin embargo, al realizar una transformación de rango, suaviza las distribuciones inusuales y está menos influenciado por los valores atípicos que los métodos de escala. Sin embargo, distorsiona las correlaciones y las distancias dentro y entre las características.
Específicamente, para una transformación normal:
Por lo tanto, la mediana de la entrada se convierte en la media de la salida, centrada en 0. La salida normal se recorta de modo que el mínimo y el máximo de la entrada, correspondientes a los cuantiles 1e-7 y 1 - 1e-7 respectivamente, no se vuelvan infinitos bajo la transformación.
La solicitud de extracción de GitHub para este estimador hace referencia a una anterior que muestra que originalmente se llamaría un "escalador de rango".
En términos más generales, este documento proporciona un buen resumen de las diversas formas en que se pueden implementar tales "transformaciones normales inversas (INT)":
Los INT son formas de transformar la distribución de la muestra de una variable continua para que parezca más distribuida normalmente. Hay varios tipos de INT. La primera distinción que hacemos es entre INT basados en rango y no basados en rango. Los INT no basados en rangos implican asumir una función de distribución acumulativa particular (CDF) para los datos observados, estimar los parámetros de esa distribución, convertir los puntajes observados en cuantiles estimados del CDF y luego convertir estos cuantiles en desviaciones normales estándar usando el inverso normal (o función probit). Estos INT no basados en rangos generalmente se denominan cópulas (Basrak et al. 2004; Li et al. 2006) y no se considerarán más. Vale la pena señalar, sin embargo, que los INT basados en el rango pueden expresarse como un caso especial del método de cópula en el que se usa el CDF empírico en lugar de restringir el CDF a alguna familia de distribuciones. Es decir, cada momento se estima a partir de los datos y los cuantiles se convierten en funciones simples de los rangos.
Los INT basados en el rango implican un paso preliminar de convertir una variable en rangos y se pueden subdividir en dos clases: las que involucran un elemento estocástico y las que son deterministas. Somos conscientes de que solo hay un INT que involucra un elemento estocástico y este enfoque se conoce como el uso de "desviaciones normales aleatorias" (Conover 1980). Un elemento disuasorio para este enfoque es que cada investigador que aplique el mismo método al mismo conjunto de datos obtendrá una respuesta ligeramente diferente, lo que podría ser insatisfactorio para algunos. Este enfoque tiene la ventaja teórica de evitar la granularidad en la distribución de los valores de P, un problema que a menudo afecta muchas pruebas no paramétricas. Sin embargo, la naturaleza estocástica de estos INT parece desanimar a los investigadores y rara vez, si es que alguna vez, se usan.
Los INT deterministas basados en rangos se pueden clasificar en aquellos que usan puntajes normales esperados (Fisher y Yates, 1938) versus aquellos que usan la transformación inversa del cuantil de muestra (o rango fraccional) para aproximar los puntajes normales esperados. Mediante la integración numérica, Harter (1961) ha proporcionado la tabla más completa de puntajes normales esperados. Los INT que implican la transformación hacia atrás de los rangos fraccionarios para aproximar los puntajes normales esperados de Fisher y Yates (Maritz 1982) parecen ser los más utilizados en la investigación genética y serán el foco principal de atención. En los rangos de transformación inversa, se necesita un desplazamiento fraccional para evitar que las observaciones mínimas y máximas se transformen en infinito negativo y positivo, respectivamente.
Al mirar el QuantileTransformer
código , parece el último elemento de la lista: un INT determinista basado en rangos que calcula una variable de rango modificada.
Sin embargo, es una implementación relativamente simple:
- calcular rangos empíricos, usando
numpy.percentile
- modificar el ranking a través de la interpolación, usando
numpy.interp
- mapear a una distribución Normal invirtiendo el CDF, usando
scipy.stats.norm.ppf
teniendo cuidado de lidiar con los límites en las extremidades.
Representarlo como un mapeo muy simplificado, es decir, ignorar la lógica de interpolación y delimitación, seríayyo=Φ- 1( F(Xyo) ), dónde F y Φ representan los CDF de una distribución normal empírica y estándar, respectivamente.