Función ML.ONE_HOT_ENCODER

En este documento, se describe la función ML.ONE_HOT_ENCODER, que te permite codificar una expresión de cadena con un esquema de codificación one-hot o de prueba.

El vocabulario de codificación está en orden alfabético. Los valores y las categorías de NULL que no están en el vocabulario se codifican con un valor de index de 0. Si usas la codificación ficticia, la categoría descartada se codifica con un value de 0.

Cuando se usa en la cláusula TRANSFORM, los valores del vocabulario y las categorías descartadas se calculan durante el entrenamiento, junto con los valores de umbral de frecuencia y k superiores que especificaste, se usan de forma automática en la predicción.

Sintaxis

ML.ONE_HOT_ENCODER(string_expression [, drop] [, top_k] [, frequency_threshold]) OVER()

Argumentos

ML.ONE_HOT_ENCODER toma los siguientes argumentos:

  • string_expression: la expresión STRING que se codificará.
  • drop: un valor STRING que especifica si la función descarta una categoría. Los valores válidos son los siguientes:
    • none: Conserva todas las categorías. Este es el valor predeterminado.
    • most_frequent: Descarta la categoría más frecuente encontrada en la expresión de string. Si seleccionas este valor, la función usará la codificación ficticia.
  • top_k: un valor INT64 que especifica la cantidad de categorías incluidas en el vocabulario de codificación. La función selecciona las categorías top_k más frecuentes en los datos y las usa. Las categorías por debajo de este límite se codifican en 0. Este valor debe ser menor que 1,000,000 para evitar problemas debido a la alta dimensionalidad. El valor predeterminado es 32,000.
  • frequency_threshold: un valor INT64 que limita las categorías incluidas en el vocabulario de codificación según la frecuencia de la categoría. La función usa categorías cuya frecuencia es mayor o igual que frequency_threshold. Las categorías por debajo de este umbral se codifican en 0. El valor predeterminado es 5.

Resultado

ML.ONE_HOT_ENCODER muestra un array de valores de struct, en el formato ARRAY<STRUCT<INT64, FLOAT64>>. El primer elemento del struct proporciona el índice de la expresión de cadena codificada y el segundo elemento proporciona el valor de la expresión de cadena codificada.

Ejemplo

En el siguiente ejemplo, se realiza una codificación ficticia en un conjunto de expresiones de cadena. Limita el vocabulario de codificación a las diez categorías que aparecen con mayor frecuencia en los datos y que también ocurren cero o más veces.

SELECT f, ML.ONE_HOT_ENCODER(f, 'most_frequent', 10, 0) OVER () AS output
FROM UNNEST([NULL, 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd']) AS f
ORDER BY f;

El resultado es similar al siguiente:

+------+-----------------------------+
|  f   | output.index | output.value |
+------+--------------+--------------+
| NULL |  0           |  1.0         |
| a    |  1           |  1.0         |
| b    |  2           |  1.0         |
| b    |  2           |  1.0         |
| c    |  3           |  0.0         |
| c    |  3           |  0.0         |
| c    |  3           |  0.0         |
| d    |  4           |  1.0         |
| d    |  4           |  1.0         |
+------+-----------------------------+

¿Qué sigue?