Share via


ExpressionEstimator Klasse

Definition

Dieser Schätzer wendet einen vom Benutzer bereitgestellten Ausdruck (angegeben als Zeichenfolge) an, um Spaltenwerte einzugeben, um neue Ausgabespaltenwerte zu erzeugen.

public sealed class ExpressionEstimator : Microsoft.ML.IEstimator<Microsoft.ML.Transforms.ExpressionTransformer>
type ExpressionEstimator = class
    interface IEstimator<ExpressionTransformer>
Public NotInheritable Class ExpressionEstimator
Implements IEstimator(Of ExpressionTransformer)
Vererbung
ExpressionEstimator
Implementiert

Hinweise

Schätzereigenschaften

Muss sich dieser Schätzer die Daten ansehen, um seine Parameter zu trainieren? No
Eingabespaltendatentyp float, double, int, long, bool oder text.
Datentyp der Ausgabespalte Je nach Ausdruck kann es sich um float, double, int, long, bool oder text handeln.

Der resultierende ExpressionTransformer erstellt eine neue Spalte mit dem Namen, wie in den Parametern des Ausgabespaltennamens angegeben, in der der Ausdruck auf die Eingabewerte angewendet wird. Höchstens eine der Eingabespalten kann vom Typ VectorDataViewType sein, und wenn die Eingabe eine Vektorspalte enthält, wird der Ausdruck unabhängig für jedes Element des Vektors berechnet, um eine Vektorausgabe mit der gleichen Länge wie diese Eingabe zu erstellen.

Ausdruckssprache

Die Sprache für den Ausdrucksschätzer sollte für eine breite Palette von Benutzern komfortabel sein. Es hat viele Ähnlichkeiten mit einigen beliebten Sprachen. Sie berücksichtigt die Groß-/Kleinschreibung, unterstützt mehrere Typen und verfügt über einen umfangreichen Satz von Operatoren und Funktionen. Es ist rein funktional, in dem Sinne, dass es keine veränderlichen Werte oder mutierenden Vorgänge in der Sprache gibt. Es verfügt weder über einen Ausnahmemechanismus noch benötigt es einen Ausnahmemechanismus, sondern erzeugt NA-Werte, wenn ein Normalwert nicht geeignet ist. Es ist statisch typisiert, aber alle Typen werden vom Compiler abgeleitet.

Syntax

Die Syntax für das Lambda besteht aus einer Parameterliste gefolgt von einem Doppelpunkt (:) oder Pfeil (=>) gefolgt von einem Ausdruck. Die Parameterliste kann entweder ein einzelner Bezeichner oder eine durch Trennzeichen getrennte Liste mit einem oder mehreren Bezeichnern sein, die von Klammern umgeben sind.

Lambda:

  • parameter-list : ausdruck
  • parameter-list => ausdruck

parameter-list:

  • identifier
  • (Parameternamen)

Parameternamen:

  • identifier
  • Bezeichner , Parameternamen

Der Ausdruck kann Parameter, Literale, Operatoren, with-expressions und Funktionen verwenden.

Literale

  • Die booleschen Literale sind true und false.
  • Ganzzahlige Literale können dezimal oder hexadezimal sein (z. B. 0x1234ABCD). Sie können mit Ihnen oder U suffixiert werden, was unsigniert angibt, sowie l oder L, was long (Int64) angibt. Die Verwendung von Sie oder U ist selten und wirkt sich nur auf die Heraufstufung bestimmter hexadezimaler 32-Bit-Werte aus, wobei bestimmt wird, ob die Konstante als negativer Int32-Wert oder als positiver Int64-Wert betrachtet wird.
  • Gleitkommaliterale verwenden die Standardsyntax, einschließlich der exponentiellen Notation (123.45e-37). Sie können mit f oder F versehen sein, was eine einzelne Genauigkeit angibt, oder d oder D, die doppelte Genauigkeit angibt. Im Gegensatz zu C# ist die Standardgenauigkeit eines Gleitkommaliterals eine einzelne Genauigkeit. Fügen Sie d oder D an, um die doppelte Genauigkeit anzugeben.
  • Textliterale sind in doppelte Anführungszeichen eingeschlossen und unterstützen die Standard-Escapemechanismen.

Operatoren

Die Operatoren der Ausdruckssprache werden in der folgenden Tabelle in der reihenfolge der Abhängigkeit aufgeführt. Sofern nicht anders angegeben, werden binäre Operatoren assoziativ belassen und NA-Werte weitergegeben (wenn einer der Operandenwerte NA ist, ist das Ergebnis NA). Im Allgemeinen führt ein Überlauf ganzzahliger Werte zu NA, während ein Überlauf von Gleitkommawerten unendlich erzeugt.

Operator Bedeutung Arity Kommentare
​? : Bedingte Ternären Die Ausdrucksbedingung ? value1 : value2 löst in value1 auf, wenn bedingung true ist, und wert2, wenn bedingung false ist. Die Bedingung muss boolesch sein, während value1 und value2 vom kompatiblen Typ sein müssen.
​?? Coalesce Binäre Der Ausdruck x ?? y löst in x auf, wenn x nicht NA ist, und wird andernfalls in y aufgelöst. Die Operanden müssen sowohl Singles als auch Doubles sein. Dieser Operator ist rechtsassoziativ.
| | Oder logische oder Binäre Die Operanden und das Ergebnis sind boolesch. Wenn ein Operand true ist, ist das Ergebnis true, andernfalls ist es false.
&& und logische und Binäre Die Operanden und das Ergebnis sind boolesch. Wenn ein Operand false ist, ist das Ergebnis false, andernfalls ist es true.
​==, =
!=, <>
<, <=
>, >=
Ist gleich
nicht gleich
Kleiner oder gleich
Größer oder gleich
Mehrere - Die Vergleichsoperatoren sind multi arity, d. h. sie können auf zwei oder mehr Operanden angewendet werden. Beispielsweise ergibt ein == b == c true, wenn a, b und c den gleichen Wert haben. Der operator not equal erfordert, dass alle Operanden unterschiedlich sind, sodass 1 != 2 != 1 false ist. Um zu testen, ob x nicht negativ, aber kleiner als 10 ist, verwenden Sie 0 <= x < 10. Es ist nicht erforderlich, 0 <= x && x < 10 zu schreiben, und dies funktioniert nicht so gut. Operatoren, die in derselben Zeile aufgeführt sind, können in einem einzelnen Ausdruck kombiniert werden, sodass ein > b >= c legal ist, aber ein < b >= c nicht.
- Gleich und nicht gleich gilt für jeden Operandentyp, während die geordneten Operatoren numerische Operanden erfordern.
​+ - Addition und Subtraktion Binäre Numerische Addition und Subtraktion mit NA-Weitergabe.
​* / % Multiplikation, Division und Modul Binäre Numerische Multiplikation, Division und Modulus mit NA-Weitergabe.
​- ! not numerische Negation und logische Nichtverhandlung Unäre Dabei handelt es sich um unäre Präfixoperatoren, negieren (-), die einen numerischen Operanden erfordern und nicht (!) einen booleschen Operanden erfordern.
​^ Macht Binäre Dies ist die richtige assoziative Exponentiation. Es erfordert numerische Operanden. Für ganzzahlige Operanden erzeugen 0^0 1.
​( ) Klammergruppierung Unäre Standard-Bedeutung.

Der Mit-Ausdruck

Die Syntax für den mit-Ausdruck lautet:

with-expression:

  • with( assignment-list ; ausdruck )

assignment-list:

  • Zuweisung
  • assignment , assignment-list

Zuordnung:

  • Bezeichnerausdruck =

Der With-Ausdruck führt einen oder mehrere benannte Werte ein. Der folgende Ausdruck konvertiert z. B. eine Celciustemperatur in Fahrenheit und erzeugt dann eine Nachricht basierend darauf, ob die Fahrenheit zu niedrig oder hoch ist.

c => with(f = c * 9 / 5 + 32 ; f < 60 ? "Too Cold!" : f > 90 ? "Too Hot!" : "Just Right!")

Der Ausdruck für eine Zuweisung kann auf die Bezeichner verweisen, die von früheren Zuweisungen eingeführt wurden, wie in diesem Beispiel, das anstelle der Meldungen -1, 0 oder 1 zurückgibt:

c : with(f = c * 9 / 5 + 32, cold = f < 60, hot = f > 90 ; -float(cold) + float(hot))

Wie oben gezeigt, ist der With-Ausdruck nützlich, wenn ein Ausdruckswert in einem größeren Ausdruck mehrmals benötigt wird. Es ist auch nützlich, wenn es um komplizierte oder signifikante Konstanten geht:

    ticks => with(
        ticksPerSecond = 10000000L,
        ticksPerHour = ticksPerSecond \* 3600,
        ticksPerDay = ticksPerHour \* 24,
        day = ticks / ticksPerDay,
        dayEpoch = 1 ;
        (day + dayEpoch) % 7)

Dadurch wird der Wochentag aus der Anzahl der Ticks (als Int64) seit der .Net-Standardzeitpoche (01/01/0001 im idealisierten gregorianischen Kalender) berechnet. Zuweisungen werden für die Anzahl der Ticks in einer Sekunde, die Anzahl der Ticks in einer Stunde, die Anzahl der Ticks in einem Jahr und den Wochentag für die Epoche verwendet. In diesem Beispiel möchten wir den Sonntag auf 0 zuordnen. Da die Epoche ein Montag ist, legen wir dayEpoch auf 1 fest. Wenn die Epoche geändert würde oder wir einen anderen Wochentag auf 0 zuordnen wollten, würden wir einfach den Tag ÄndernEpoch. Beachten Sie, dass ticksPerSecond als 10000000L definiert ist, um einen Int64-Wert (8 Byte integer) zu machen. Ohne das Suffix L überläuft ticksPerDay den Bereich von Int32.

Functions

Die Ausdruckstransformation unterstützt viele nützliche Funktionen.

Allgemeine unäre Funktionen, die einen Operanden eines beliebigen Typs akzeptieren können, sind in der folgenden Tabelle aufgeführt.

Namen Bedeutung Kommentare
Isna test for na Gibt einen booleschen Wert zurück, der angibt, ob der Operand ein NA-Wert ist.
Na der na-Wert Gibt den NA-Wert desselben Typs zurück wie der Operand (entweder float oder double). Beachten Sie, dass dadurch der Operand nicht ausgewertet wird, nur der Operand verwendet wird, um den Typ der zurückzugebenden NA zu bestimmen, und diese Bestimmung erfolgt zur Kompilierzeit.
Standard Der Standardwert Gibt den Standardwert desselben Typs wie der Operand zurück. Zum Zuordnen von NA-Werten zu Standardwerten verwenden Sie beispielsweise x ?? default(x). Beachten Sie, dass dadurch der Operand nicht ausgewertet wird, nur der Operand verwendet wird, um den Typ des zurückgegebenen Standardwerts zu bestimmen, und dass die Ermittlung zur Kompilierzeit erfolgt. Bei numerischen Typen ist der Standardwert 0. Für Boolean ist der Standardwert false. Für Text ist der Standardwert leer.

Die unären Konvertierungsfunktionen sind in der folgenden Tabelle aufgeführt. Ein NA-Operand erzeugt eine NA oder löst aus, wenn der Typ sie nicht unterstützt. Eine Konvertierung, die nicht erfolgreich ist, oder ein Überlauf führt auch zu NA oder einer Ausnahme. Der häufigste Fall ist dies bei der Konvertierung aus Text, die die Standardkonvertierungsanalyse verwendet. Beim Konvertieren von einem Gleitkommawert (float oder double) in einen ganzzahligen Wert (Int32 oder Int64) führt die Konvertierung einen Abschneidenvorgang aus (auf 0 gerundet).

Namen Bedeutung Kommentare
Bool Konvertieren in Boolesch Der Operand muss Text oder boolescher Wert sein.
Int konvertieren in Int32 Die Eingabe kann von einem beliebigen Typ sein.
Lange konvertieren in Int64 Die Eingabe kann von einem beliebigen Typ sein.
single, float konvertieren in Single Die Eingabe kann von einem beliebigen Typ sein.
Doppel konvertieren in Double Die Eingabe kann von einem beliebigen Typ sein.
Text In Text konvertieren Die Eingabe kann von einem beliebigen Typ sein. Dadurch wird eine Standardtextdarstellung erzeugt.

Die unären Funktionen, die einen numerischen Operanden erfordern, sind in der folgenden Tabelle aufgeführt. Der Ergebnistyp ist mit dem Operandentyp identisch. Ein NA-Operandenwert erzeugt NA.

Namen Bedeutung Kommentare
Abs absoluter Wert Erzeugt den absoluten Wert des Operanden.
Zeichen Zeichen (-1, 0, 1) Erzeugt -1, 0 oder 1, je nachdem, ob der Operand negativ, null oder positiv ist.

Die binären Funktionen, die numerische Operanden erfordern, sind in der folgenden Tabelle aufgeführt. Wenn die Operandentypen nicht identisch sind, werden die Operanden zu einem geeigneten Typ heraufgestuft. Der Ergebnistyp ist identisch mit dem höhergestuften Operandentyp. Ein NA-Operandenwert erzeugt NA.

Namen Bedeutung Kommentare
Min Minimale Erzeugt das Minimum der Operanden.
Max maximum Erzeugt das Maximum der Operanden.

Die unären Funktionen, die einen Gleitkommaopernden erfordern, sind in der folgenden Tabelle aufgeführt. Der Ergebnistyp ist identisch mit dem Operandentyp. Overflow erzeugt unendlich. Ungültige Eingabewerte erzeugen na.

Namen Bedeutung Kommentare
Sqrt Quadratwurzel Negative Operanden erzeugen NA.
abschneiden, abschneiden Abschneiden auf eine ganze Zahl Rundet auf null auf den nächsten ganzzahligen Wert.
Boden Boden Rundet auf negative Unendlichkeit auf den nächsten ganzzahligen Wert.
Ceil, Decke Decke Rundet auf positive Unendlichkeit auf den nächsten ganzzahligen Wert.
Runde Unvoreingenommenes Runden Rundet auf den nächsten ganzzahligen Wert. Wenn sich der Operand auf halbem Weg zwischen zwei ganzzahligen Werten befindet, erzeugt dies die gerade ganze Zahl.
Exp Exponentiellen Löst e auf den Operanden aus.
ln, protokollieren Logarithmus Erzeugt den natürlichen Logarithmus (Basis e). Es gibt auch eine zwei Operandenversion des Protokolls für die Verwendung einer anderen Basis.
deg, grad Bogenmaß bis Grad Karten vom Bogenmaß bis zum Grad.
rad, bogenmaß Grad bis Bogenmaß Karten von Grad bis Bogenmaß.
sin, sind Sinus Nimmt den Sinus eines Winkels an. Die Sin-Funktion geht davon aus, dass sich der Operand im Bogenmaß befindet, während die Sind-Funktion davon ausgeht, dass der Operand in Graden ist.
cos, cosd Kosinus Nimmt den Kosinus eines Winkels. Die Cos-Funktion geht davon aus, dass der Operand im Bogenmaß liegt, während die Cosd-Funktion davon ausgeht, dass der Operand in Graden ist.
tan, tand Tangente Nimmt den Tangens eines Winkels an. Die Tan-Funktion geht davon aus, dass sich der Operand im Bogenmaß befindet, während die gerbte Funktion davon ausgeht, dass der Operand in Grad ist.
Sinh hyperbolischer Sinus Nimmt den hyperbolischen Sinus seines Operanden.
Cosh hyperbolischer Kosinus Nimmt den hyperbolischen Kosinus seines Operanden.
Tanh Hyperbolischer Tangens Nimmt den hyperbolischen Tangens seines Operanden.
Asin inverser Sinus Nimmt den umgekehrten Sinus seines Operanden.
Acos umgekehrter Kosinus Nimmt den umgekehrten Kosinus seines Operanden.
Atan inverse Tangens Nimmt den umgekehrten Tangens seines Operanden.

Die binären Funktionen, die Gleitkommaopernden erfordern, sind in der folgenden Tabelle aufgeführt. Wenn die Operandentypen nicht identisch sind, werden die Operanden zu einem geeigneten Typ heraufgestuft. Der Ergebnistyp ist identisch mit dem höhergestuften Operandentyp. Ein NA-Operandenwert erzeugt NA.

Namen Bedeutung Kommentare
Protokoll Logarithmus mit angegebener Basis Der zweite Operand ist die Basis. Die erste ist der Wert, von dem der Logarithmus verwendet werden soll.
atan2, atanyx Bestimmen des Winkels Bestimmt den Winkel zwischen -pi und pi aus den angegebenen y- und x-Werten. Beachten Sie, dass y der erste Operand ist.

Die Textfunktionen sind in der folgenden Tabelle aufgeführt.

Namen Bedeutung Kommentare
len(x) Länge des Texts Der Operand muss Text sein. Das Ergebnis ist ein I4, der die Länge des Operanden angibt. Wenn der Operand NA ist, ist das Ergebnis NA.
lower(x), upper(x) Klein- oder Großbuchstaben Ordnet den Text Klein- oder Großbuchstaben zu.
left(x, k), right(x, k) Teilzeichenfolge Der erste Operand muss Text sein, und der zweite Operand muss Int32 sein. Wenn der zweite Operand negativ ist, wird er als Offset vom Ende des Texts behandelt. Dieser angepasste Index wird dann auf 0 bis len(x) geklemmt. Das Ergebnis sind die Zeichen links oder rechts von der resultierenden Position.
mid(x, a, b) Teilzeichenfolge Der erste Operand muss Text sein, und die anderen beiden Operanden müssen Int32 sein. Die Indizes werden auf die gleiche Weise transformiert wie für die linke und rechte Funktion: negative Werte werden als Offsets vom Ende des Texts behandelt; diese angepassten Indizes werden auf 0 bis len(x) eingespannt. Der zweite eingespannte Index wird ebenfalls unten an den ersten eingespannten Index geklemmt. Das Ergebnis sind die Zeichen zwischen diesen beiden eingeklemmten Indizes.
concat(x1, x2, ..., xn) Verkettung Dies akzeptiert eine beliebige Anzahl von Operanden (einschließlich 0). Alle Operanden müssen Text sein. Das Ergebnis ist die Verkettung aller Operanden in der Reihenfolge.

Methoden

Fit(IDataView)

Dieser Schätzer wendet einen vom Benutzer bereitgestellten Ausdruck (angegeben als Zeichenfolge) an, um Spaltenwerte einzugeben, um neue Ausgabespaltenwerte zu erzeugen.

GetOutputSchema(SchemaShape)

Dieser Schätzer wendet einen vom Benutzer bereitgestellten Ausdruck (angegeben als Zeichenfolge) an, um Spaltenwerte einzugeben, um neue Ausgabespaltenwerte zu erzeugen.

Erweiterungsmethoden

AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment)

Fügen Sie der Schätzungskette einen Zwischenspeicherungsprüfpunkt an. Dadurch wird sichergestellt, dass die nachgelagerten Schätzer für zwischengespeicherte Daten trainiert werden. Es ist hilfreich, vor Trainern, die mehrere Datendurchläufe durchführen, einen Zwischenspeicherungsprüfpunkt zu haben.

WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>)

Geben Sie bei einem Schätzer ein umschließendes Objekt zurück, das nach Fit(IDataView) dem Aufruf einen Delegaten aufruft. Es ist oft wichtig, dass ein Schätzer Informationen darüber zurückgibt, was geeignet war. Daher gibt die Fit(IDataView) Methode ein speziell typisiertes Objekt zurück, anstatt nur ein allgemeines ITransformer. Zur gleichen Zeit IEstimator<TTransformer> werden jedoch häufig Pipelines mit vielen Objekten gebildet, sodass wir möglicherweise eine Kette von Schätzern erstellen müssen, über EstimatorChain<TLastTransformer> die der Schätzer, für den wir den Transformator erhalten möchten, irgendwo in dieser Kette vergraben ist. Für dieses Szenario können wir über diese Methode einen Delegaten anfügen, der aufgerufen wird, sobald fit aufgerufen wird.

Gilt für:

Weitere Informationen