ExpressionEstimator Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Ten narzędzie do szacowania stosuje wyrażenie podane przez użytkownika (określone jako ciąg) do wartości kolumn wejściowych w celu wygenerowania nowych wartości kolumn wyjściowych.
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)
- Dziedziczenie
-
ExpressionEstimator
- Implementuje
Uwagi
Charakterystyka narzędzia do szacowania
| Czy ten narzędzie do szacowania musi przyjrzeć się danym, aby wytrenować jego parametry? | No |
| Typ danych kolumny wejściowej | float, double, int, long, bool lub text. |
| Typ danych kolumny wyjściowej | Może być zmiennoprzecinkowy, podwójny, int, długi, logiczny lub tekst, w zależności od wyrażenia. |
Wynikowy element ExpressionTransformer tworzy nową kolumnę o nazwie określonej w parametrach nazwy kolumny wyjściowej, gdzie wyrażenie jest stosowane do wartości wejściowych. Co najwyżej jedna z kolumn wejściowych może być typu VectorDataViewType, a gdy dane wejściowe zawierają kolumnę wektorową, wyrażenie jest obliczane niezależnie na każdym elemenie wektora, aby utworzyć dane wyjściowe wektora o tej samej długości co te dane wejściowe.
Język wyrażeń
Język narzędzia do szacowania wyrażeń powinien być wygodny dla szerokiej gamy użytkowników. Udostępnia wiele podobieństw do niektórych popularnych języków. Jest rozróżniana wielkość liter, obsługuje wiele typów i ma bogaty zestaw operatorów i funkcji. Jest to czysta funkcja, w tym sensie, że w języku nie ma modyfikowalnych wartości ani operacjimutowania. Nie ma żadnego mechanizmu wyjątku, a nie ma żadnego mechanizmu wyjątku, zamiast tego generuje wartości NA, gdy wartość normalna nie jest odpowiednia. Jest on statycznie typowany, ale wszystkie typy są wnioskowane przez kompilator.
Syntax
Składnia lambda składa się z listy parametrów, po której następuje dwukropek (:) lub strzałka (=>), po którym następuje wyrażenie. Lista parametrów może być pojedynczym identyfikatorem lub rozdzielaną przecinkami listą jednego lub większej liczby identyfikatorów otoczonych nawiasami.
lambda:
- parametr-lista : wyrażenie
- parametr-list => wyrażenie
parametr-lista:
- identyfikator
- (nazwy parametrów)
nazwy parametrów:
- identyfikator
- identyfikator , nazwy parametrów
Wyrażenie może używać parametrów, literałów, operatorów, z wyrażeniami i funkcjami.
Literals
- Literały logiczne są prawdziwe i fałszywe.
- Literały liczb całkowitych mogą być dziesiętne lub szesnastkowe (np. 0x1234ABCD). Mogą być sufiksowane z użytkownikiem lub U, wskazując niepodpisane, a także l lub L, wskazując długie (Int64). Korzystanie z użytkownika lub U jest rzadkie i wpływa tylko na podwyższenie niektórych wartości szesnastkowe 32-bitowe, określając, czy stała jest uważana za ujemną wartość Int32, czy dodatnią wartość Int64.
- Literały zmiennoprzecinkowe używają standardowej składni, w tym notacji wykładniczej (123.45e-37). Mogą być sufiksami f lub F, wskazując pojedynczą precyzję lub d lub D, co oznacza podwójną precyzję. W przeciwieństwie do języka C#, domyślna precyzja literału zmiennoprzecinkowego to pojedyncza precyzja. Aby określić podwójną precyzję, dołącz d lub D.
- Literały tekstowe są ujęte w znaki podwójnego cudzysłowu i obsługują standardowe mechanizmy ucieczki.
Operatorów
Operatory języka wyrażeń są wymienione w poniższej tabeli w kolejności precendence. Jeśli nie określono inaczej, operatory binarne pozostają asocjacyjne i propagują wartości NA (jeśli którakolwiek wartość operandu to NA, wynik to NA). Ogólnie rzecz biorąc, przepełnienie wartości całkowitych powoduje wygenerowanie wartości NA, podczas gdy przepełnienie wartości zmiennoprzecinkowych powoduje nieskończoność.
| Operator | Meaning | Arity | Comments |
|---|---|---|---|
| ? : | warunkowe | Ternary | Warunek wyrażenia ? value1: wartość2 jest rozpoznawana jako wartość 1, jeśli warunek ma wartość true i wartość2, jeśli warunek ma wartość false. Warunek musi być wartością logiczną, a wartość1 i wartość2 muszą być zgodne. |
| ?? | łączenie | Dane binarne | Wyrażenie x ?? y jest rozpoznawany jako x, jeśli x nie jest NA, i rozpoznaje wartość y w przeciwnym razie. Operandy muszą być zarówno singli, jak i oba. Ten operator jest prawo asocjacyjny. |
| | | lub | logiczne lub | Dane binarne | Operandy i wynik są wartościami logicznymi. Jeśli jeden operand ma wartość true, wynik ma wartość true, w przeciwnym razie jest to fałsz. |
| &&i | logiczne i | Dane binarne | Operandy i wynik są wartościami logicznymi. Jeśli jeden operand ma wartość false, wynikiem jest fałsz, w przeciwnym razie jest to prawda. |
| ==, = !=, <> <, <= >, >= |
equals nie równa się mniejsze lub równe większe lub równe |
Wiele | - Operatory porównania są wieloarytowe, co oznacza, że mogą być stosowane do co najmniej dwóch operandów. Na przykład a == b == c daje wartość true, jeśli a, b i c mają tę samą wartość. Operator nie równy wymaga, aby wszystkie operandy są odrębne, więc 1 != 2 != 1 jest fałszem. Aby sprawdzić, czy x nie jest ujemne, ale mniejsze niż 10, użyj wartości 0 <= x < 10. Nie ma potrzeby zapisu 0 <= x && x < 10 i nie będzie to również działać. Operatory wymienione w tym samym wierszu można połączyć w jednym wyrażeniu, więc > b >= c jest legalne, ale < b >= c nie jest. - Równa się i nie równa się ma zastosowanie do dowolnego typu operandu, podczas gdy uporządkowane operatory wymagają operandów liczbowych. |
| + - | dodawanie i odejmowanie | Binarnym | Dodawanie liczbowe i odejmowanie za pomocą propagacji NA. |
| * / % | mnożenie, dzielenie i modulo | Dane binarne | Mnożenie liczbowe, dzielenie i modulo z propagacją NA. |
| - ! not | negacja liczbowa i logiczna nie | Jednoargumentowy | Są to operatory prefiksu jednoargumentowego, negacja (-) wymagająca operandu liczbowego, a nie (!) wymagającego operandu logicznego. |
| ^ | Zasilania | Dane binarne | Jest to prawo asocjacyjne wykładnicze. Wymaga ona operandów liczbowych. W przypadku operandów całkowitych 0^0 generuje 1. |
| ( ) | grupowanie nawiasów | Jednoargumentowy | Znaczenie standardowe. |
Wyrażenie with
Składnia wyrażenia with-expression to:
z wyrażeniem:
- with( lista przydziałów ; wyrażenie )
lista przydziałów:
- przypisanie
- przypisanie , lista przydziałów
przypisanie:
- wyrażenie identyfikatora =
Wyrażenie z wyrażeniem wprowadza co najmniej jedną nazwaną wartość. Na przykład następujące wyrażenie konwertuje temperaturę celcius na fahrenheit, a następnie generuje komunikat na podstawie tego, czy fahrenheit jest zbyt niski, czy wysoki.
c => with(f = c * 9 / 5 + 32 ; f < 60 ? "Too Cold!" : f > 90 ? "Too Hot!" : "Just Right!")
Wyrażenie dla jednego przypisania może odwoływać się do identyfikatorów wprowadzonych przez poprzednie przypisania, jak w tym przykładzie, które zwraca wartość -1, 0 lub 1 zamiast komunikatów:
c : with(f = c * 9 / 5 + 32, cold = f < 60, hot = f > 90 ; -float(cold) + float(hot))
Jak pokazano powyżej, wyrażenie z wyrażeniem jest przydatne, gdy wartość wyrażenia jest potrzebna wiele razy w większym wyrażeniu. Przydaje się również w przypadku skomplikowanych lub znaczących stałych:
ticks => with(
ticksPerSecond = 10000000L,
ticksPerHour = ticksPerSecond \* 3600,
ticksPerDay = ticksPerHour \* 24,
day = ticks / ticksPerDay,
dayEpoch = 1 ;
(day + dayEpoch) % 7)
Oblicza dzień tygodnia od liczby kleszczy (jako int64) od standardowej epoki .Net DateTime (01/01/0001 w idealizowanym kalendarzu gregoriańskim). Przypisania są używane w przypadku liczby kleszczy w ciągu sekundy, liczby kleszczy w ciągu godziny, liczby kleszczy w roku i dnia tygodnia dla epoki. W tym przykładzie chcemy mapować niedzielę na zero, więc ponieważ epoka to poniedziałek, ustawiliśmy dzieńPoch na 1. Jeśli epoka została zmieniona lub chcemy mapować inny dzień tygodnia na zero, po prostu zmienilibyśmy dzieńPoch. Należy pamiętać, że funkcja ticksPerSecond jest zdefiniowana jako 100000000L, aby była to wartość Int64 (liczba całkowita 8 bajtów). Bez sufiksu L znacznikiPerDay przepełni zakres Int32.
Functions
Przekształcenie wyrażenia obsługuje wiele przydatnych funkcji.
Ogólne funkcje jednoargumentowe, które mogą akceptować operand dowolnego typu, są wymienione w poniższej tabeli.
| Nazwa | Znaczenie | Komentarze |
|---|---|---|
| isna | test dla elementu na | Zwraca wartość logiczną wskazującą, czy operand jest wartością NA. |
| na | wartość na | Zwraca wartość NA tego samego typu co operand (zmiennoprzecinkowy lub podwójny). Należy pamiętać, że nie oblicza to operandu, używa tylko operandu do określenia typu NA do zwrócenia, a ta determinacja występuje w czasie kompilacji. |
| Domyślny | wartość domyślna | Zwraca wartość domyślną tego samego typu co operand. Na przykład aby mapować wartości NA na wartości domyślne, użyj x ?? default(x). Należy pamiętać, że nie ocenia operandu, używa tylko operandu do określenia typu wartości domyślnej do zwrócenia, a ta determinacja ma miejsce w czasie kompilacji. W przypadku typów liczbowych wartość domyślna to zero. W przypadku wartości logicznej wartość domyślna to false. W przypadku tekstu wartość domyślna jest pusta. |
Funkcje konwersji jednoargumentowej są wymienione w poniższej tabeli. Operand NA generuje argument NA lub zgłasza błąd, jeśli typ nie obsługuje go. Konwersja, która nie powiedzie się, lub przepełnienie również powoduje nachylanie lub wyjątek. Najczęstszym przypadkiem jest konwersja z tekstu, który korzysta ze standardowego analizowania konwersji. Podczas konwertowania wartości zmiennoprzecinkowej (zmiennoprzecinkowej lub podwójnej) na wartość całkowitą (Int32 lub Int64) konwersja wykonuje operację obciętą (zaokrągloną w kierunku zera).
| Nazwa | Znaczenie | Komentarze |
|---|---|---|
| bool | konwertowanie na wartość logiczną | Operand musi być tekstem lub wartością logiczną. |
| int | przekonwertuj na Int32 | Dane wejściowe mogą być dowolnego typu. |
| długi | przekonwertuj na Int64 | Dane wejściowe mogą być dowolnego typu. |
| pojedynczy, zmiennoprzecinkowy | przekonwertuj na Single | Dane wejściowe mogą być dowolnego typu. |
| Podwójne | przekonwertuj na Double | Dane wejściowe mogą być dowolnego typu. |
| tekst | konwertowanie na tekst | Dane wejściowe mogą być dowolnego typu. Spowoduje to utworzenie domyślnej reprezentacji tekstu. |
Funkcje jednoargumentowe, które wymagają operandu liczbowego, są wymienione w poniższej tabeli. Typ wyniku jest taki sam jak typ operandu. Wartość operandu NA generuje wartość NA.
| Nazwa | Znaczenie | Komentarze |
|---|---|---|
| Abs | wartość bezwzględna | Tworzy wartość bezwzględną operandu. |
| znak | znak (-1, 0, 1) | Tworzy wartość -1, 0 lub 1 w zależności od tego, czy operand jest ujemny, zero, czy dodatni. |
Funkcje binarne, które wymagają operandów liczbowych, są wymienione w poniższej tabeli. Gdy typy operandów nie są takie same, operandy są promowane do odpowiedniego typu. Typ wyniku jest taki sam jak promowany typ operandu. Wartość operandu NA generuje wartość NA.
| Nazwa | Znaczenie | Komentarze |
|---|---|---|
| Min | minimum | Tworzy minimum operandów. |
| Max | maksimum | Tworzy maksymalną liczbę operandów. |
Funkcje jednoargumentowe, które wymagają operandu zmiennoprzecinkowego, są wymienione w poniższej tabeli. Typ wyniku jest taki sam jak typ operandu. Przepełnienie produkuje nieskończoność. Nieprawidłowe wartości wejściowe generują wartość NA.
| Nazwa | Znaczenie | Komentarze |
|---|---|---|
| sqrt | pierwiastek kwadratowy | Ujemne operandy generują NA. |
| obcinanie, obcinanie | obcinanie do liczby całkowitej | Zaokrągla w kierunku zera do najbliższej wartości całkowitej. |
| podłoga | podłoga | Zaokrągla w kierunku nieskończoności ujemnej do najbliższej wartości całkowitej. |
| ceil, sufit | sufit | Zaokrągla w kierunku nieskończoności dodatniej do najbliższej wartości całkowitej. |
| runda | zaokrąglanie bezstronne | Zaokrągla do najbliższej wartości całkowitej. Gdy operand jest w połowie drogi między dwiema wartościami całkowitymi, powoduje to parzystą liczbę całkowitą. |
| Exp | wykładnik | Podnosi e do operandu. |
| ln, dziennik | Logarytmu | Tworzy logarytm naturalny (base e). Istnieje również dwie operandowe wersje dziennika do korzystania z innej bazy. |
| stopnie, stopnie | radiany do stopni | Mapy z radianów do stopni. |
| rad, radiany | stopnie do radianów | Mapuje od stopni do radianów. |
| grzech, sind | sinus | Pobiera sinus kąta. Funkcja sin zakłada, że operand jest w radianach, podczas gdy sind funkcja zakłada, że operand jest w stopniach. |
| cos, cosd | cosinus | Przyjmuje cosinus kąta. Funkcja cos zakłada, że operand jest w radianach, podczas gdy funkcja cosd zakłada, że operand jest w stopniach. |
| opalona, opalona | Stycznej | Przyjmuje tangens kąta. Funkcja tan zakłada, że operand jest w radianach, podczas gdy tand funkcja zakłada, że operand jest w stopniach. |
| sinh | sinus hiperboliczny | Pobiera sinus hiperboliczny operandu. |
| cosh | cosinus hiperboliczny | Przyjmuje cosinus hiperboliczny operandu. |
| tanh | tangens hiperboliczny | Pobiera tangens hiperboliczny operandu. |
| asin | odwrotny sinus | Przyjmuje odwrotny sinus operandu. |
| Acos | odwrotny cosinus | Bierze odwrotny cosinus swojego operandu. |
| atan | odwrotny tangens | Bierze odwrotny tangens jego operandu. |
Funkcje binarne, które wymagają operandów zmiennoprzecinkowych, są wymienione w poniższej tabeli. Gdy typy operandów nie są takie same, operandy są promowane do odpowiedniego typu. Typ wyniku jest taki sam jak promowany typ operandu. Wartość operandu NA generuje wartość NA.
| Nazwa | Znaczenie | Komentarze |
|---|---|---|
| dziennik | logarytm z daną bazą | Drugi operand jest bazą. Pierwsza jest wartością do podjęcia logarytmu. |
| atan2, atanyx | określanie kąta | Określa kąt między wartościami -pi i pi z podanych wartości y i x. Należy pamiętać, że y jest pierwszym operandem. |
Funkcje tekstowe są wymienione w poniższej tabeli.
| Nazwa | Znaczenie | Komentarze |
|---|---|---|
| len(x) | długość tekstu | Operand musi być tekstem. Wynik jest I4 wskazujący długość operandu. Jeśli operand ma wartość NA, wynik to NA. |
| lower(x), upper(x) | małe lub wielkie litery | Mapuje tekst na małe lub wielkie litery. |
| left(x, k), right(x, k) | podciąg | Pierwszy operand musi być tekstem, a drugi operand musi mieć wartość Int32. Jeśli drugi operand jest ujemny, jest traktowany jako przesunięcie od końca tekstu. Indeks skorygowany jest następnie zaciśnięty do 0 do len(x). Wynikiem są znaki z lewej lub prawej strony wynikowej pozycji. |
| mid(x, a, b) | podciąg | Pierwszy operand musi być tekstem, a pozostałe dwa operandy muszą mieć wartość Int32. Indeksy są przekształcane w taki sam sposób jak w przypadku funkcji po lewej i prawej stronie: wartości ujemne są traktowane jako przesunięcia od końca tekstu; te indeksy dostosowane są zaciskane do 0 do len(x). Drugi zaciśnięty indeks jest również zaciśnięty poniżej do pierwszego zaciśniętego indeksu. Wynikiem są znaki między tymi dwoma zaciśniętymi indeksami. |
| concat(x1, x2, ..., xn) | łączenie | Akceptuje dowolną liczbę operandów (w tym zero). Wszystkie operandy muszą być tekstem. Wynikiem jest łączenie wszystkich operandów w kolejności. |
Metody
| Nazwa | Opis |
|---|---|
| Fit(IDataView) |
Ten narzędzie do szacowania stosuje wyrażenie podane przez użytkownika (określone jako ciąg) do wartości kolumn wejściowych w celu wygenerowania nowych wartości kolumn wyjściowych. |
| GetOutputSchema(SchemaShape) |
Ten narzędzie do szacowania stosuje wyrażenie podane przez użytkownika (określone jako ciąg) do wartości kolumn wejściowych w celu wygenerowania nowych wartości kolumn wyjściowych. |
Metody rozszerzania
| Nazwa | Opis |
|---|---|
| AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment) |
Dołącz punkt kontrolny buforowania do łańcucha narzędzia do szacowania. Zapewni to, że narzędzia do szacowania podrzędnego zostaną wytrenowane z buforowanych danych. Warto mieć punkt kontrolny buforowania, zanim trenerzy przejdą wiele danych. |
| WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>) |
Biorąc pod uwagę narzędzie do szacowania, zwróć obiekt opakowujący, który wywoła delegata po Fit(IDataView) wywołaniu. Często ważne jest, aby narzędzie do szacowania zwracało informacje o tym, co było odpowiednie, dlatego Fit(IDataView) metoda zwraca specjalnie wpisany obiekt, a nie tylko ogólne ITransformer. Jednak w tym samym czasie IEstimator<TTransformer> są często tworzone w potoki z wieloma obiektami, więc może być konieczne utworzenie łańcucha narzędzi do szacowania za pośrednictwem EstimatorChain<TLastTransformer> miejsca, w którym narzędzie do szacowania, dla którego chcemy uzyskać transformator jest pochowany gdzieś w tym łańcuchu. W tym scenariuszu możemy za pomocą tej metody dołączyć delegata, który będzie wywoływany po wywołaniu dopasowania. |