La funzione ML.MULTI_HOT_ENCODER

Questo documento descrive la funzione ML.MULTI_HOT_ENCODER, che consente di codificare un'espressione array di stringhe utilizzando uno schema di codifica multi-hot.

Il vocabolario della codifica è in ordine alfabetico. I valori e le categorie di NULL non presenti nel vocabolario sono codificati con un valore index di 0.

Quando utilizzato nella clausola TRANSFORM, il vocabolario calcolato durante l'addestramento, insieme ai valori k di punta e soglia di frequenza specificati, vengono utilizzati automaticamente nella previsione.

Sintassi

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

Argomenti

ML.MULTI_HOT_ENCODER accetta i seguenti argomenti:

  • array_expression: l'espressione ARRAY<STRING> da codificare.
  • top_k: un valore INT64 che specifica il numero di categorie incluse nel vocabolario di codifica. La funzione seleziona le top_k categorie più frequenti nei dati e le utilizza; le categorie al di sotto di questa soglia sono codificate come 0. Questo valore deve essere inferiore a 1,000,000 per evitare problemi dovuti all'elevata dimensionalità. Il valore predefinito è 32,000.
  • frequency_threshold: un valore INT64 che limita le categorie incluse nel vocabolario di codifica in base alla frequenza della categoria. La funzione utilizza categorie la cui frequenza è maggiore o uguale a frequency_threshold; le categorie al di sotto di questa soglia sono codificate in 0. Il valore predefinito è 5.

Output

ML.MULTI_HOT_ENCODER restituisce un array di valori di struct nel formato ARRAY<STRUCT<INT64, FLOAT64>>. Il primo elemento dello struct fornisce l'indice dell'espressione di stringa codificata, mentre il secondo fornisce il valore dell'espressione di stringa codificata.

Esempio

L'esempio seguente esegue la codifica multi-hot su un insieme di espressioni array di stringhe. Limita il vocabolario di codifica alle tre categorie che si verificano più spesso nei dati e che ricorrono anche una o più volte.

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

L'output è simile al seguente:

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

Passaggi successivi