Die ML.MULTI_HOT_ENCODER-Funktion

In diesem Dokument wird die Funktion ML.MULTI_HOT_ENCODER beschrieben, mit der Sie einen String-Arrayausdruck mit einem Multi-Hot-Codierungsschema codieren können.

Das Codierungsvokabular ist alphabetisch angeordnet. NULL-Werte und Kategorien, die nicht im Vokabular enthalten sind, werden mit dem index-Wert 0 codiert.

Bei Verwendung in der TRANSFORM-Klausel wird das während des Trainings berechnete Vokabular zusammen mit den von Ihnen angegebenen Top-k- und Häufigkeitsschwellenwerten automatisch für die Vorhersage verwendet.

Syntax

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

Argumente

ML.MULTI_HOT_ENCODER verwendet die folgenden Argumente:

  • array_expression: der zu codierende ARRAY<STRING>-Ausdruck.
  • top_k: ein INT64-Wert, der die Anzahl der im Codierungsvokabular enthaltenen Kategorien angibt. Die Funktion wählt die top_k am häufigsten vorkommenden Kategorien in den Daten aus und verwendet diese. Kategorien unterhalb dieses Schwellenwerts werden zu 0 codiert. Dieser Wert muss kleiner als 1,000,000 sein, um Probleme wegen hoher Dimensionalität zu vermeiden. Der Standardwert ist 32,000.
  • frequency_threshold: Ein INT64-Wert, der die Kategorien im Codierungsvokabular anhand der Kategoriehäufigkeit begrenzt. Die Funktion verwendet Kategorien, deren Häufigkeit größer oder gleich frequency_threshold ist. Kategorien unterhalb dieses Schwellenwerts werden mit 0 codiert. Der Standardwert ist 5.

Ausgabe

ML.MULTI_HOT_ENCODER gibt ein Array von Strukturwerten im Format ARRAY<STRUCT<INT64, FLOAT64>> zurück. Das erste Element in der Struktur enthält den Index des codierten Stringausdrucks und das zweite Element den Wert des codierten Stringausdrucks.

Beispiel

Das folgende Beispiel führt eine Multi-Hot-Codierung für eine Reihe von String-Arrayausdrücken durch. Es beschränkt das Codierungsvokabular auf die drei Kategorien, die in den Daten am häufigsten vorkommen und die auch ein- oder mehrmals vorkommen.

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

Die Ausgabe sieht dann ungefähr so aus:

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

Nächste Schritte