Função ML.MULTI_HOT_ENCODER

Neste documento, descrevemos a função ML.MULTI_HOT_ENCODER, que permite codificar uma expressão de matriz de string usando um esquema de codificação multi-hot.

O vocabulário de codificação é classificado em ordem alfabética. Os valores e as categorias NULL que não estão no vocabulário são codificados com o valor index de 0.

Quando usados na cláusula TRANSFORM, o vocabulário calculado durante o treinamento, com os k principais valores de limite de frequência especificados, é usado automaticamente na previsão.

Sintaxe

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

Argumentos

ML.MULTI_HOT_ENCODER usa os seguintes argumentos:

  • array_expression: a expressão ARRAY<STRING> a ser codificada.
  • top_k: um valor INT64 que especifica o número de categorias incluídas no vocabulário de codificação. A função seleciona as categorias mais frequentes de top_k nos dados e as usa. As categorias abaixo desse limite são codificadas com 0. Esse valor precisa ser menor que 1,000,000 para evitar problemas devido à alta dimensionalidade. O valor padrão é 32,000.
  • frequency_threshold: um valor INT64 que limita as categorias incluídas no vocabulário de codificação com base na frequência da categoria. A função usa categorias com frequência maior ou igual a frequency_threshold. As categorias abaixo desse limite são codificadas com 0. O valor padrão é 5.

Saída

ML.MULTI_HOT_ENCODER retorna uma matriz de valores de struct, no formato ARRAY<STRUCT<INT64, FLOAT64>>. O primeiro elemento no struct fornece o índice da expressão de string codificada, e o segundo elemento fornece o valor da expressão de string codificada.

Exemplo

O exemplo a seguir executa a codificação multi-hot em um conjunto de expressões de matriz de strings. Ele limita o vocabulário de codificação às três categorias que ocorrem com mais frequência nos dados e que também ocorrem três ou mais vezes.

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)];

A saída será assim:

+------+-----------------------------+
|  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         |
+------+-----------------------------+

A seguir