ExpressionEstimator Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Dieser Schätzwert wendet einen vom Benutzer bereitgestellten Ausdruck (angegeben als Zeichenfolge) auf Eingabespaltenwerte an, 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ätzeigenschaften
| Muss dieser Schätzer die Daten untersuchen, um seine Parameter zu trainieren? | No |
| Eingabespaltendatentyp | float, double, int, long, bool oder text. |
| Ausgabespaltendatentyp | Kann je nach Ausdruck float, double, int, long, bool oder text sein. |
Der resultierende ExpressionTransformer erstellt eine neue Spalte, die gemäß den Parametern für die Ausgabespaltennamen angegeben ist, wobei der Ausdruck auf die Eingabewerte angewendet wird. Eine der Eingabespalten kann vom Typ VectorDataViewType sein, und wenn die Eingabe eine Vektorspalte enthält, wird der Ausdruck unabhängig von jedem Element des Vektors berechnet, um eine Vektorausgabe mit der gleichen Länge wie diese Eingabe zu erstellen.
Die Ausdruckssprache
Die Sprache für den Ausdrucks-Schätzer sollte für eine breite Palette von Benutzern komfortabel sein. Es teilt viele Ähnlichkeiten mit einigen beliebten Sprachen. Die Groß-/Kleinschreibung wird beachtet, unterstützt mehrere Typen und verfügt über eine vielzahl von Operatoren und Funktionen. Es ist rein funktional, in dem Sinne, dass es keine änderbaren Werte oder Stummschaltvorgänge in der Sprache gibt. Es gibt keinen Ausnahmemechanismus, sondern einen Ausnahmemechanismus, der NA-Werte erzeugt, wenn ein normaler Wert nicht geeignet ist. Sie wird statisch eingegeben, aber alle Typen werden vom Compiler abgeleitet.
Syntax
Die Syntax für die Lambda-Funktion 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:
- Parameterliste : Ausdruck
- Parameterliste => Ausdruck
Parameterliste:
- Bezeichner
- (Parameternamen)
Parameternamen:
- Bezeichner
- Bezeichner , Parameternamen
Der Ausdruck kann Parameter, Literale, Operatoren, mit Ausdrücken und Funktionen verwenden.
Literals
- Die booleschen Literale sind wahr und falsch.
- Ganzzahlige Literale können dezimal oder hexadezimal sein (z. B. 0x1234ABCD). Sie können mit Ihnen oder U suffixiert werden, die nicht signiert sind, sowie l oder L, die lange (Int64) angeben. Die Verwendung von Ihnen oder U ist selten und wirkt sich nur auf die Heraufstufung bestimmter 32-Bit-Hexadezimalwerte aus, wobei bestimmt wird, ob die Konstante als negativer Int32-Wert oder ein positiver Int64-Wert betrachtet wird.
- Gleitkommaliterale verwenden die Standardsyntax, einschließlich exponentieller Notation (123,45e-37). Sie können mit f oder F suffixiert werden, was eine einzelne Genauigkeit angibt, d oder D oder D, die doppelte Genauigkeit angibt. Im Gegensatz zu C# ist die Standardgenauigkeit eines Gleitkommaliterals eine einzige Genauigkeit. Zum Angeben der doppelten Genauigkeit fügen Sie d oder D an.
- Textliterale werden in Doppelte Anführungszeichen eingeschlossen und unterstützen die standardmäßigen Escapemechanismen.
Betriebspersonal
Die Operatoren der Ausdruckssprache sind in der folgenden Tabelle in der Reihenfolge vor der Abhängigkeit aufgeführt. Sofern nicht anders angegeben, bleiben binäre Operatoren assoziativ und verteilen NA-Werte (wenn ein Operandwert NA ist, ist das Ergebnis NA). Im Allgemeinen erzeugt der Überlauf ganzzahliger Werte NV, während der Überlauf von Gleitkommawerten unendlich erzeugt.
| Operator | Bedeutung | Arität | Kommentare |
|---|---|---|---|
| ? : | bedingte Bedingung | Ternary | Die Ausdrucksbedingung ? wert1: Wert2 wird in Wert1 aufgelöst, wenn die Bedingung wahr ist, und wert2, wenn die Bedingung falsch ist. Die Bedingung muss boolescher Wert sein, während Wert1 und Wert2 vom kompatiblen Typ sein müssen. |
| ?? | Klammern | Binärdatei | Der Ausdruck x ?? "y" wird in "x" aufgelöst, wenn x nicht NA ist und andernfalls in "y" aufgelöst wird. Die Operanden müssen beide Singles oder doubles sein. Dieser Operator ist rechtsassoziativ. |
| | | oder | logisch oder | Binärdatei | Die Operanden und das Ergebnis sind boolesch. Wenn ein Operand wahr ist, ist das Ergebnis wahr, andernfalls "false". |
| && und | logisch und | Binärdatei | Die Operanden und das Ergebnis sind boolesch. Wenn ein Operand "false" ist, ist das Ergebnis "false", andernfalls "true". |
| ==, = !=, <> <, <= >, >= |
gleich ungleich kleiner als oder gleich größer als oder gleich |
Mehrfach | - Die Vergleichsoperatoren sind Multi-Arity, d. h., sie können auf zwei oder mehr Operanden angewendet werden. Beispiel: a == b == c führt zu "true", wenn a, b und c denselben Wert aufweisen. Der nicht gleiche Operator erfordert, dass alle Operanden eindeutig sind, sodass 1 != 2 != 1 falsch 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, daher ist ein > b >= c legal, aber ein < b >= c ist nicht. - Ist gleich und gilt nicht für jeden Operandentyp, während für die sortierten Operatoren numerische Operanden erforderlich sind. |
| + - | Addition und Subtraktion | Binärdatei | Numerische Addition und Subtraktion mit NA-Verteilung. |
| * / % | Multiplikation, Division und Modul | Binärdatei | Numerische Multiplikation, Division und Modulus mit NA-Verteilung. |
| - ! not | numerische Negation und wahrheitslogisch nicht | Unär | Dies sind unäre Präfixoperatoren, Negation (-), die einen numerischen Operanden erfordern, und keine (!) erfordern einen booleschen Operanden. |
| ^ | Leistung | Binärdatei | Dies ist die richtige assoziative Exponentiation. Sie erfordert numerische Operanden. Bei ganzzahligen Operanden erzeugen 0^0 1. |
| ( ) | parenthetische Gruppierung | Unär | Standard-Bedeutung. |
Der With-Ausdruck
Die Syntax für den "with-expression" lautet:
with-expression:
- with( assignment-list ; expression )
Aufgabenliste:
- Aufgabe
- Aufgabe , Zuordnungsliste
Zuordnung:
- Bezeichnerausdruck =
Der With-Expression führt einen oder mehrere benannte Werte ein. Der folgende Ausdruck wandelt z. B. eine Celcius-Temperatur in Fahrenheit um und erzeugt dann eine Meldung, die darauf basiert, 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 Zuordnung kann auf die bezeichner verweisen, die von vorherigen Zuordnungen eingeführt wurden, wie in diesem Beispiel, das -1, 0 oder 1 anstelle der Meldungen 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-Expression nützlich, wenn ein Ausdruckswert mehrmals in einem größeren Ausdruck benötigt wird. Es ist auch nützlich beim Umgang mit komplizierten oder signifikanten Konstanten:
ticks => with(
ticksPerSecond = 10000000L,
ticksPerHour = ticksPerSecond \* 3600,
ticksPerDay = ticksPerHour \* 24,
day = ticks / ticksPerDay,
dayEpoch = 1 ;
(day + dayEpoch) % 7)
Dies berechnet den Wochentag aus der Anzahl der Teilstriche (als Int64) seit der standardmäßigen .Net DateTime-Epoche (01.01.01.0001 im idealisierten gregorianischen Kalender). Zuordnungen werden für die Anzahl der Teilstriche in einer Sekunde, die Anzahl der Teilstriche in einer Stunde, die Anzahl der Teilstriche in einem Jahr und den Wochentag für die Epoche verwendet. In diesem Beispiel möchten wir sonntags null zuordnen. Da die Epoche also ein Montag ist, legen wir dayEpoch auf 1 fest. Wenn sich die Epoche änderte oder wir einen anderen Wochentag auf Null zuordnen wollten, würden wir einfach dayEpoch ändern. Beachten Sie, dass ticksPerSecond als 10000000L definiert ist, um es zu einem Int64-Wert (8 Byte ganze Zahl) 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.
| Name | 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 wie der Operand zurück (entweder float oder double). Beachten Sie, dass dies den Operanden nicht auswertet, es verwendet nur den Operanden, um den Typ der zurückzugebenden NV zu bestimmen, und diese Bestimmung erfolgt zur Kompilierungszeit. |
| Standard | Standardwert | Gibt den Standardwert desselben Typs wie der Operand zurück. Um z. B. NA-Werte standardwerten zuzuordnen, verwenden Sie x ?? default(x). Beachten Sie, dass dies den Operanden nicht auswertet, es verwendet nur den Operanden, um den Typ des zurückzugebenden Standardwerts zu bestimmen, und diese Bestimmung erfolgt zur Kompilierungszeit. Bei numerischen Typen ist der Standardwert null. Für booleschen Wert 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 einen NA oder löst aus, wenn der Typ ihn 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 die Konvertierung von Text, bei dem die Standardkonvertierungsanalyse verwendet wird. Beim Konvertieren von einem Gleitkommawert (Float oder Double) in einen ganzzahligen Wert (Int32 oder Int64) führt die Konvertierung einen Abkürzungsvorgang aus (rundet in Richtung Null).
| Name | Bedeutung | Kommentare |
|---|---|---|
| bool | in boolean konvertieren | Der Operand muss Text oder boolescher Wert sein. |
| int | konvertieren in Int32 | Die Eingabe kann beliebiger Art sein. |
| lang | konvertieren in Int64 | Die Eingabe kann beliebiger Art sein. |
| single, float | konvertieren in Single | Die Eingabe kann beliebiger Art sein. |
| double | konvertieren in Double | Die Eingabe kann beliebiger Art sein. |
| Text | In Text konvertieren | Die Eingabe kann beliebiger Art 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 identisch mit dem Operandentyp. Ein NA-Operandwert erzeugt NV.
| Name | Bedeutung | Kommentare |
|---|---|---|
| abs | Absoluter Wert | Erzeugt den absoluten Wert des Operanden. |
| Signieren | 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 Operanden nicht identisch sind, werden die Operanden zu einem geeigneten Typ heraufgestuft. Der Ergebnistyp entspricht dem höhergestuften Operandentyp. Ein NA-Operandwert erzeugt NV.
| Name | Bedeutung | Kommentare |
|---|---|---|
| min | Minimum | Erzeugt das Minimum der Operanden. |
| max. | Maximalwert | 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. Überlauf erzeugt Unendlichkeit. Ungültige Eingabewerte erzeugen NV.
| Name | 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, Obergrenze | Obergrenze | Rundet auf positive Unendlichkeit auf den nächsten ganzzahligen Wert. |
| rund | Unvoreingenommenes Runden | Rundet auf den nächsten ganzzahligen Wert. Wenn der Operand halbwegs zwischen zwei ganzzahligen Werten liegt, erzeugt dies die gerade ganze Zahl. |
| exp | exponentiell | Löst e an 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 von Bogenmaß zu Grad. |
| Bogenmaß, Bogenmaß | Grad bis Bogenmaß | Ordnet Grad bis Bogenmaß zu. |
| Sin, sind | Sinus | Nimmt den Sinus eines Winkels an. Die Sin-Funktion geht davon aus, dass sich der Operand in Bogenmaß befindet, während die Sind-Funktion davon ausgeht, dass sich der Operand in Grad befindet. |
| cos, kosd | Kosinus | Nimmt den Kosinus eines Winkels an. Die Cos-Funktion geht davon aus, dass sich der Operand in Bogenmaß befindet, während die Kosdfunktion davon ausgeht, dass sich der Operand in Grad befindet. |
| Tan, tannen | Tangens | Nimmt den Tangens eines Winkels an. Die Tan-Funktion geht davon aus, dass sich der Operand in Bogenmaß befindet, während die tand-Funktion davon ausgeht, dass sich der Operand in Grad befindet. |
| Sinh | Hyperbolischer Sinus | Nimmt den hyperbolischen Sinus des Operanden. |
| Cosh | Hyperbolischer Kosinus | Nimmt den hyperbolischen Kosinus seines Operanden an. |
| tanh | Hyperbolischer Tangens | Nimmt den hyperbolischen Tangens des Operanden an. |
| asin | umgekehrter Sinus | Nimmt den umgekehrten Sinus des Operanden an. |
| acos | umgekehrter Kosinus | Nimmt den umgekehrten Kosinus des Operanden an. |
| atan | Umgekehrter Tangens | Nimmt den umgekehrten Tangens des Operanden an. |
Die binären Funktionen, die Gleitkommaopernden erfordern, sind in der folgenden Tabelle aufgeführt. Wenn die Operanden nicht identisch sind, werden die Operanden zu einem geeigneten Typ heraufgestuft. Der Ergebnistyp entspricht dem höhergestuften Operandentyp. Ein NA-Operandwert erzeugt NV.
| Name | Bedeutung | Kommentare |
|---|---|---|
| protokollieren | Logarithmus mit gegebener Basis | Der zweite Operand ist die Basis. Der erste ist der Wert, der den Logarithmus übernehmen soll. |
| atan2, atanyx | Winkel bestimmen | 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.
| Name | Bedeutung | Kommentare |
|---|---|---|
| len(x) | Textlänge | Der Operand muss Text sein. Das Ergebnis ist ein I4, der die Länge des Operanden angibt. Wenn der Operand NA ist, lautet das Ergebnis "NA". |
| lower(x), upper(x) | Klein- oder Großbuchstabe | Ordnet den Text dem 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 ist die Zeichen links oder rechts neben 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 wie für die linken und rechten Funktionen transformiert: Negative Werte werden als Offsets vom Ende des Texts behandelt; Diese angepassten Indizes werden auf 0 bis len(x) geklemmt. Der zweite klemmte Index wird auch unterhalb des ersten klammerten Indexes geklemmt. Das Ergebnis sind die Zeichen zwischen diesen beiden Klammerindizes. |
| concat(x1, x2, ..., xn) | Verkettung | Dies akzeptiert eine beliebige Anzahl von Operanden (einschließlich Null). Alle Operanden müssen Text sein. Das Ergebnis ist die Verkettung aller Operanden in der Reihenfolge. |
Methoden
| Name | Beschreibung |
|---|---|
| Fit(IDataView) |
Dieser Schätzwert wendet einen vom Benutzer bereitgestellten Ausdruck (angegeben als Zeichenfolge) auf Eingabespaltenwerte an, um neue Ausgabespaltenwerte zu erzeugen. |
| GetOutputSchema(SchemaShape) |
Dieser Schätzwert wendet einen vom Benutzer bereitgestellten Ausdruck (angegeben als Zeichenfolge) auf Eingabespaltenwerte an, um neue Ausgabespaltenwerte zu erzeugen. |
Erweiterungsmethoden
| Name | Beschreibung |
|---|---|
| AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment) |
Fügen Sie einen "Zwischenspeicherungsprüfpunkt" an die Schätzkette an. Dadurch wird sichergestellt, dass die nachgeschalteten Schätzer anhand zwischengespeicherter Daten trainiert werden. Es ist hilfreich, einen Zwischenspeicherprüfpunkt vor Trainern zu haben, die mehrere Datendurchläufe übernehmen. |
| WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>) |
Geben Sie bei einer Schätzung ein Wrapping-Objekt zurück, das eine Stellvertretung aufruft, sobald Fit(IDataView) sie aufgerufen wird. Es ist häufig wichtig, dass ein Schätzer Informationen zu dem, was passt, zurückgeben, weshalb die Fit(IDataView) Methode ein speziell typiertes Objekt und nicht nur ein allgemeines ITransformerObjekt zurückgibt. IEstimator<TTransformer> Gleichzeitig werden jedoch oft in Pipelines mit vielen Objekten gebildet, daher müssen wir möglicherweise eine Kette von Schätzern bauen, über EstimatorChain<TLastTransformer> die der Schätzer, für den wir den Transformator erhalten wollen, irgendwo in dieser Kette begraben wird. Für dieses Szenario können wir über diese Methode einen Delegat anfügen, der aufgerufen wird, sobald "Fit" aufgerufen wird. |