La función ML.MULTI_HOT_ENCODER

En este documento, se describe la función ML.MULTI_HOT_ENCODER, que te permite codificar una expresión de array de strings mediante un esquema de codificación multi-hot.

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.

Cuando se usa en la cláusula TRANSFORM, el vocabulario calculado durante el entrenamiento, junto con los valores de umbral de frecuencia y k superiores que especificaste, se usan automáticamente en la predicción.

Sintaxis

ML.MULTI_HOT_ENCODER(array_expression [, top_k] [, frequency_threshold]) OVER()

Argumentos

ML.MULTI_HOT_ENCODER toma los siguientes argumentos:

  • array_expression: la expresión ARRAY<STRING> que se codificará.
  • 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.

Salida

ML.MULTI_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 multi-hot en un conjunto de expresiones de array de cadenas. Limita el vocabulario de codificación a las tres categorías que ocurren con mayor frecuencia en los datos y que también ocurren una o más veces.

SELECT f[OFFSET(0)] AS f0, ML.MULTI_HOT_ENCODER(f, 3, 1) OVER () AS output
FROM
  (
    SELECT ['a', 'b', 'b', 'c', NULL] AS f
    UNION ALL
    SELECT ['c', 'c', 'd', 'd', NULL] AS f
  )
ORDER BY f[OFFSET(0)];

El resultado es similar al siguiente:

+------+-----------------------------+
|  f0  | output.index | output.value |
+------+--------------+--------------+
|  a   |  1           |  1.0         |
|      |  2           |  1.0         |
|      |  3           |  1.0         |
|      |  0           |  1.0         |
|  c   |  3           |  1.0         |
|      |  0           |  1.0         |
+------+-----------------------------+

¿Qué sigue?