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? | Nie |
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, bool lub tekst, w zależności od wyrażenia. |
Wynikowy wyrażenieTransformer 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ę wektora, wyrażenie jest obliczane niezależnie od każdego elementu wektora, aby utworzyć dane wyjściowe wektora o tej samej długości co 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 funkcjonalność, w tym sensie, że w języku nie ma modyfikowalnych wartości ani operacjimutowania. Nie ma żadnego mechanizmu wyjątku ani nie potrzebuje, zamiast tego generuje wartości NA, gdy wartość normalna nie jest odpowiednia. Jest on statycznie typowany, ale wszystkie typy są wnioskowane przez kompilator.
Składnia
Składnia lambda składa się z listy parametrów, po której następuje dwukropek (:) lub strzałka (=>), a następnie wyrażenie. Lista parametrów może być pojedynczym identyfikatorem lub rozdzielaną przecinkami listą co najmniej jednego identyfikatora otoczonego nawiasami.
Lambda:
- parametr-lista : wyrażenie
- parametr-list => wyrażenie
parametr-lista:
- Identyfikator
- (nazwy parametrów)
nazwa-parametrów:
- Identyfikator
- identyfikator , nazwy parametrów
Wyrażenie może używać parametrów, literałów, operatorów, wyrażeń i funkcji.
Literały
- Literały logiczne są prawdziwe i fałszywe.
- Literały całkowite mogą być dziesiętne lub szesnastkowe (np. 0x1234ABCD). Mogą one być sufiksem użytkownika lub U, wskazując niepodpisane, a także l lub L, wskazujące długie (Int64). Użycie użytkownika lub U jest rzadkie i ma wpływ 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, wskazując 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.
Operatory
Operatory języka wyrażeń są wymienione w poniższej tabeli w kolejności precendence. Jeśli nie określono inaczej, operatory binarne są pozostawione asocjacyjne i propagują wartości NA (jeśli którakolwiek z wartości operand ma wartość NA, wynik to NA). Ogólnie rzecz biorąc, przepełnienie wartości całkowitych powoduje na, podczas gdy przepełnienie wartości zmiennoprzecinkowych powoduje nieskończoność.
Operator | Znaczenie | Argumentów | Komentarze |
---|---|---|---|
? : | Warunkowe | Trójskładnikowych | 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ć logiczny, a wartość1 i wartość2 muszą być zgodnego typu. |
?? | Łączonej | Binarnym | Wyrażenie x ?? y rozpoznaje wartość x, jeśli x nie jest NA, i rozpoznaje wartość y w przeciwnym razie. Operandy muszą być zarówno singli, jak i oba podwójne. Ten operator ma rację asocjacji. |
| | Lub | logiczne lub | Binarnym | 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 | Binarnym | Operandy i wynik są wartościami logicznymi. Jeśli jeden operand ma wartość false, wynik jest fałszywy, w przeciwnym razie jest to prawda. |
==, = !=, <> <, <= >, >= |
equals nie równa się mniejsze niż lub równe większe niż lub równe |
Wielu | - Operatory porównania są wielo arity, co oznacza, że można je zastosować do co najmniej dwóch operandów. Na przykład a == b == c powoduje wartość true, jeśli a, b i c mają tę samą wartość. Operator nie równy wymaga, aby wszystkie operandy mogły być odrębne, więc wartość 1 != 2 != 1 jest fałszem. Aby sprawdzić, czy x jest nie 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ówne i nie równe mają zastosowania do dowolnego typu operandu, podczas gdy uporządkowane operatory wymagają operandów liczbowych. |
+ - | dodawanie i odejmowanie | Binarnym | Dodawanie i odejmowanie liczbowe z propagacją NA. |
* / % | mnożenie, dzielenie i modulus | Binarnym | Mnożenie liczbowe, dzielenie i modulus z propagacją NA. |
- ! not | negacja liczbowa, a nie logiczna | Jednoargumentowy | Są to operatory prefiksów jednoargumentowych, negacja (-) wymagająca operandu liczbowego, a nie (!) wymagającego operandu logicznego. |
^ | Zasilania | Binarnym | Jest to właściwa asocjacyjna wykładnik. Wymaga to operandów liczbowych. W przypadku operandów całkowitych 0^0 generuje 1. |
( ) | grupowanie nawiasów | Jednoargumentowy | Znaczenie standardowe. |
Wyrażenie z wyrażeniem
Składnia wyrażenia with-expression to:
z wyrażeniem:
- with( lista przydziałów ; wyrażenie )
lista przydziałów:
- Przypisania
- przypisanie , lista przydziałów
Przypisania:
- wyrażenie identyfikatora =
Wyrażenie with 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 with-expression jest przydatne, gdy wartość wyrażenia jest potrzebna wiele razy w większym wyrażeniu. Jest to również przydatne w przypadku radzenia sobie ze skomplikowanymi lub znaczącymi stałymi:
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 do liczby znaczników w sekundzie, liczby kleszczy w ciągu godziny, liczby kleszczy w roku i dnia tygodnia dla epoki. W tym przykładzie chcemy zamapować niedzielę na zero, więc ponieważ epoka to poniedziałek, ustawiliśmy wartość dayEpoch na 1. Jeśli epoka została zmieniona lub chcieliśmy zamapować inny dzień tygodnia na zero, po prostu zmienilibyśmy dzieńEpoch. Należy pamiętać, że znacznikiPerSecond jest definiowane jako 100000000L, aby była to wartość Int64 (liczba całkowita 8 bajtów). Bez sufiksu L znacznikiPerDay przepełnią zakres Int32.
Funkcje
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 aplikacji 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 operandu, używa tylko operandu do określenia typu NA do zwrócenia, a ta determinacja ma miejsce w czasie kompilacji. |
Domyślny | wartość domyślna | Zwraca wartość domyślną tego samego typu co operand. Aby na przykład zamapować wartości NA na wartości domyślne, użyj x ?? default(x). Należy pamiętać, że nie oblicza 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 wartość NA lub zgłasza wartość , jeśli typ nie obsługuje go. Konwersja, która nie powiedzie się lub przepełnienie powoduje również wyjątek NA 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 | konwertuj na wartość logiczną | Operand musi być tekstem lub wartością logiczną. |
Int | konwertowanie na Int32 | Dane wejściowe mogą być dowolnego typu. |
Długi | konwertowanie na Int64 | Dane wejściowe mogą być dowolnego typu. |
pojedynczy, zmiennoprzecinkowy | konwertowanie na Single | Dane wejściowe mogą być dowolnego typu. |
Podwójne | konwertowanie na Double | Dane wejściowe mogą być dowolnego typu. |
Tekst | konwertowanie na tekst | Dane wejściowe mogą być dowolnego typu. Spowoduje to wygenerowanie 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 | Minimalne | Tworzy minimalną liczbę 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 wytwarza 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łogi | Podłogi | Zaokrągla w kierunku ujemnej nieskończoności do najbliższej wartości całkowitej. |
ceil, sufit | Sufit | Zaokrągla w kierunku dodatniej nieskończoności do najbliższej wartości całkowitej. |
Okrągłe | zaokrąglanie niestronne | 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ładniczej | Podnosi e do operandu. |
ln, log | Logarytmu | Tworzy logarytm naturalny (podstawowy 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 | Mapy z stopni do radianów. |
grzech, grzech | 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 | Pobiera 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 | Przyjmuje sinus hiperboliczny operandu. |
Cosh | cosinus hiperboliczny | Przyjmuje cosinus hiperboliczny swojego operandu. |
Tanh | tangens hiperboliczny | Przyjmuje tangens hiperboliczny operandu. |
Asin | odwrotny sinus | Przyjmuje odwrotny sinus operandu. |
Acos | odwrotność cosinusu | Bierze odwrotny cosinus swojego operandu. |
Atan | odwrotność tangensu | Przyjmuje 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 |
---|---|---|
Dziennika | logarytm z daną bazą | Drugi operand jest bazą. Pierwsza to wartość, która ma przyjmować logarytm. |
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. Wynikiem jest I4 wskazująca 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 być Int32. Jeśli drugi operand jest ujemny, jest traktowany jako przesunięcie od końca tekstu. Indeks skorygowany jest następnie zaciskany do 0 do len(x). Wynikiem są znaki po lewej lub prawej stronie wynikowej pozycji. |
mid(x, a, b) | Podciąg | Pierwszy operand musi być tekstem, a pozostałe dwa operandy muszą być 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 skorygowane indeksy 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
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
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 względem buforowanych danych. Warto mieć punkt kontrolny buforowania, zanim trenerzy przejmą 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ólną ITransformerwartość . Jednak w tym samym czasie IEstimator<TTransformer> często są 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 zostanie wywołany po wywołaniu dopasowania. |