ExpressionEstimator Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Tento odhadce použije výraz zadaný uživatelem (zadaný jako řetězec) na vstupní hodnoty sloupce, aby se vytvořily nové hodnoty výstupních sloupců.
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)
- Dědičnost
-
ExpressionEstimator
- Implementuje
Poznámky
Vlastnosti estimátoru
Musí se tento estimátor podívat na data, aby vytrénovala své parametry? | No |
Datový typ vstupního sloupce | float, double, int, long, bool nebo text. |
Datový typ výstupního sloupce | V závislosti na výrazu může být float, double, int, long, bool nebo text. |
Výsledný VýrazTransformer vytvoří nový sloupec s názvem, jak je uvedeno v parametrech názvu výstupního sloupce, kde se výraz použije na vstupní hodnoty. Maximálně jeden ze vstupních sloupců může být typu VectorDataViewType, a pokud vstup obsahuje vektorový sloupec, výraz se vypočítá nezávisle na každém prvku vektoru, aby se vytvořil výstup vektoru se stejnou délkou jako tento vstup.
Jazyk výrazů
Jazyk pro estimátor výrazů by měl být pohodlný pro širokou škálu uživatelů. Sdílí mnoho podobností s některými oblíbenými jazyky. Rozlišuje velká a malá písmena, podporuje více typů a má bohatou sadu operátorů a funkcí. Je čistě funkční v tom smyslu, že v jazyce nejsou žádné měnitelné hodnoty ani mutační operace. Nemá ani nepotřebuje žádný mechanismus výjimky, místo toho vytváří hodnoty NA, když běžná hodnota není vhodná. Je staticky typovaný, ale kompilátor odvozuje všechny typy.
Syntax
Syntaxe výrazu lambda se skládá ze seznamu parametrů, za nímž následuje dvojtečka (:), nebo šipka (=>) následovaná výrazem. Seznam parametrů může být buď jeden identifikátor, nebo čárkami oddělený seznam jednoho nebo více identifikátorů v závorkách.
Lambda:
- parameter-list : expression
- parameter-list => expression
parameter-list:
- Identifikátor
- (názvy parametrů)
názvy parametrů:
- Identifikátor
- identifikátor , názvy parametrů
Výraz může používat parametry, literály, operátory, výrazy with-expression a funkce.
Literály
- Logické literály jsou true a false.
- Celočíselné literály mohou být desetinné nebo šestnáctkové (např. 0x1234ABCD). Mohou mít příponu s vámi nebo U, což označuje nepodepsané, a také l nebo L, což označuje dlouhé (Int64). Použití funkce you nebo U je vzácné a ovlivňuje pouze povýšení určitých 32bitových šestnáctkových hodnot, které určují, zda je konstanta považována za zápornou hodnotu Int32 nebo kladnou hodnotu Int64.
- Literály s plovoucí desetinnou čárkou používají standardní syntaxi, včetně exponenciální notace (123,45e-37). Mohou mít příponu f nebo F, což označuje jednoduchou přesnost, nebo d nebo D, což označuje dvojitou přesnost. Na rozdíl od jazyka C# je výchozí přesnost literálu s plovoucí desetinou čárkou jednoduchá přesnost. Pokud chcete zadat dvojitou přesnost, připojte d nebo D.
- Textové literály jsou uzavřeny v uvozovkách a podporují standardní řídicí mechanismy.
Operátory
Operátory jazyka výrazů jsou uvedeny v následující tabulce v pořadí precendence. Pokud není uvedeno jinak, binární operátory jsou ponechány asociativní a šíří hodnoty NA (pokud je hodnota některého operandu NA, výsledek je NA). Obecně platí, že přetečení celočíselných hodnot vytváří NE, zatímco přetečení hodnot s plovoucí desetinou čárkou vytváří nekonečno.
Operátor | Význam | Arita | Komentáře |
---|---|---|---|
? : | Podmíněné | Ternární | Podmínka výrazu ? hodnota1 : hodnota2 se přeloží na hodnotu1, pokud podmínka platí, a na hodnotu 2, pokud podmínka je nepravda. Podmínka musí být logická, zatímco hodnota1 a hodnota2 musí být kompatibilního typu. |
?? | Coalesce | Binární | Výraz x ?? y přeloží na x, pokud x není NA, a v opačném případě se přeloží na y. Operandy musí být oba singles, nebo oba double. Tento operátor je správně asociativní. |
| | Nebo | logické nebo | Binární | Operandy a výsledek jsou logické. Pokud je jeden operand pravdivý, výsledek je true, jinak je nepravda. |
&& a | logických a | Binární | Operandy a výsledek jsou logické. Pokud je jeden operand nepravdivý, výsledek je nepravda, jinak je pravdivý. |
==, = !=, <> <, <= >, >= |
equals nerovná se menší než nebo rovno větší než nebo rovno |
Více | - Relační operátory jsou multi-arity, což znamená, že je možné je použít na dva nebo více operandů. Například == b == c má výsledek true, pokud a, b a c mají stejnou hodnotu. Operátor nerovná se vyžaduje, aby všechny operandy byly odlišné, takže 1 != 2 != 1 je nepravda. Pokud chcete otestovat, jestli je x nezáporné, ale menší než 10, použijte 0 <= x < 10. Není nutné psát 0 <= x && x < 10 a nebude to fungovat tak dobře. Operátory uvedené na stejném řádku lze kombinovat v jednom výrazu > , takže b >= c je legální, ale < b >= c není. - Funkce Rovná se a nerovná se platí pro jakýkoli typ operandu, zatímco seřazené operátory vyžadují číselné operandy. |
+ - | sčítání a odčítání | Binární | Číselné sčítání a odčítání pomocí šíření NA. |
* / % | násobení, dělení a modul | Binární | Číselné násobení, dělení a moduly s šířením NA. |
- ! not | číselná negace a logická negace | Unární | Jedná se o unární operátory předpon, negace (-) vyžadující číselný operand, a nikoli (!) vyžadující logický operand. |
^ | Sílu | Binární | Toto je správná asociativní exponentiace. Vyžaduje číselné operandy. Pro celočíselné operandy vytvoří 0^0 hodnotu 1. |
( ) | Seskupování závorek | Unární | Standardní význam. |
Výraz with
Syntaxe výrazu with-expression je:
with-expression:
- with( assignment-list ; expression )
assignment-list:
- Přiřazení
- assignment , assignment-list
Přiřazení:
- Výraz identifikátoru =
Výraz with-expression představuje jednu nebo více pojmenovaných hodnot. Následující výraz například převede celcius teplotu na fahrenheita a pak vytvoří zprávu na základě toho, jestli je fahrenheita příliš nízká nebo vysoká.
c => with(f = c * 9 / 5 + 32 ; f < 60 ? "Too Cold!" : f > 90 ? "Too Hot!" : "Just Right!")
Výraz pro jedno přiřazení může odkazovat na identifikátory zavedené předchozími přiřazeními, jako v tomto příkladu, který místo zpráv vrací -1, 0 nebo 1:
c : with(f = c * 9 / 5 + 32, cold = f < 60, hot = f > 90 ; -float(cold) + float(hot))
Jak je znázorněno výše, výraz with-expression je užitečný, když je hodnota výrazu potřebná vícekrát ve větším výrazu. Je také užitečné při práci se složitými nebo významnými konstantami:
ticks => with(
ticksPerSecond = 10000000L,
ticksPerHour = ticksPerSecond \* 3600,
ticksPerDay = ticksPerHour \* 24,
day = ticks / ticksPerDay,
dayEpoch = 1 ;
(day + dayEpoch) % 7)
Vypočítá den v týdnu z počtu zaškrtnutých hodnot (jako int64) od standardní epochy .Net DateTime (01.01.0001 v idealizovaném gregoriánském kalendáři). Přiřazení se používají pro počet zaškrtnutí za sekundu, počet klíštěte v hodině, počet ticků v roce a den v týdnu pro epochu. V tomto příkladu chceme namapovat neděli na nulu, takže vzhledem k tomu, že epocha je pondělí, nastavíme dayEpoch na hodnotu 1. Pokud by se epocha změnila nebo bychom chtěli namapovat jiný den v týdnu na nulu, jednoduše bychom změnili dayEpoch. Všimněte si, že ticksPerSecond je definován jako 10000000L, aby se z něj udělala hodnota Int64 (celé číslo 8 bajtů). Bez přípony L přeteče ticksPerDay přeteče rozsah Int32.
Functions
Transformace výrazu podporuje mnoho užitečných funkcí.
Obecné unární funkce, které mohou přijímat operand libovolného typu, jsou uvedeny v následující tabulce.
Jméno | Význam | Komentáře |
---|---|---|
Isna | test pro na | Vrátí logickou hodnotu označující, jestli je operand hodnotou NA. |
na | hodnota na | Vrátí hodnotu NA stejného typu jako operand (buď float, nebo double). Všimněte si, že se tím nevyhodnocuje operand, ale používá pouze operand k určení typu NA, který se má vrátit, a že k určení dochází v době kompilace. |
Výchozí | výchozí hodnota | Vrátí výchozí hodnotu stejného typu jako operand. Pokud chcete například mapovat hodnoty NA na výchozí hodnoty, použijte x ?? default(x). Všimněte si, že se nevyhodnocuje operand, používá pouze operand k určení typu výchozí hodnoty, která se má vrátit, a že k určení dochází v době kompilace. U číselných typů je výchozí hodnota nula. Pro logickou hodnotu je výchozí hodnota false. Výchozí hodnota textu je prázdná. |
Unární funkce převodu jsou uvedeny v následující tabulce. Operand NA vytvoří NA nebo vyvolá, pokud ho typ nepodporuje. Převod, který neproběhne úspěšně nebo přetečení, má také za následek překlad adres (NA) nebo výjimku. Nejběžnějším případem je převod z textu, který používá standardní parsování převodu. Při převodu z hodnoty s plovoucí desetinou čárkou (plovoucí nebo dvojitá) na celočíselnou hodnotu (Int32 nebo Int64) provede převod operaci zkrácení (zaokrouhlení směrem k nule).
Jméno | Význam | Komentáře |
---|---|---|
Bool | převést na logickou hodnotu | Operand musí být textový nebo logický. |
Int | převést na Int32 | Vstup může být libovolného typu. |
Dlouhé | převést na Int64 | Vstup může být libovolného typu. |
jeden, float | převést na Single | Vstup může být libovolného typu. |
Dvojité | převést na Double | Vstup může být libovolného typu. |
Text | převést na text | Vstup může být libovolného typu. Tím se vytvoří výchozí textová reprezentace. |
Unární funkce, které vyžadují číselný operand, jsou uvedeny v následující tabulce. Typ výsledku je stejný jako typ operandu. Hodnota operandu NA vytvoří NA.
Jméno | Význam | Komentáře |
---|---|---|
Abs | absolutní hodnota | Vytvoří absolutní hodnotu operandu. |
Znamení | znaménko (-1, 0, 1) | Vytvoří hodnotu -1, 0 nebo 1 v závislosti na tom, jestli je operand záporný, nulový nebo kladný. |
Binární funkce, které vyžadují číselné operandy, jsou uvedeny v následující tabulce. Pokud typy operandů nejsou stejné, jsou operandy povýšeny na odpovídající typ. Typ výsledku je stejný jako upřednostněný typ operandu. Hodnota operandu NA vytvoří NA.
Jméno | Význam | Komentáře |
---|---|---|
Min | Minimální | Vytvoří minimum operandů. |
Max | Maximum | Vytvoří maximum operandů. |
Unární funkce, které vyžadují operand s plovoucí desetinnou čárkou, jsou uvedeny v následující tabulce. Typ výsledku je stejný jako typ operandu. Přetečení vytváří nekonečno. Neplatné vstupní hodnoty generují NA.
Jméno | Význam | Komentáře |
---|---|---|
Sqrt | Odmocnina | Záporné operandy vytvářejí NA. |
trunc, truncate | zkrácení na celé číslo | Zaokrouhlí směrem k nule na nejbližší celočíselnou hodnotu. |
Podlaze | Podlaze | Zaokrouhlí směrem k zápornému nekonečnu na nejbližší celočíselnou hodnotu. |
ceil, strop | Strop | Zaokrouhlí směrem k kladnému nekonečnu na nejbližší celočíselnou hodnotu. |
Kolo | nezaujaté zaokrouhlení | Zaokrouhlí na nejbližší celočíselnou hodnotu. Když je operand poloviční mezi dvěma celočíselnými hodnotami, vznikne sudé celé číslo. |
Exp | Exponenciální | Zvýší e na operand. |
ln, log | Logaritmus | Vytváří přirozený logaritmus (základ e). K dispozici je také dvě operandové verze protokolu pro použití jiného základu. |
deg, stupně | radiány až stupně | Mapy od radiánů po stupně. |
rad, radiány | stupně až radiány | Mapuje se od stupňů do radiánů. |
sin, sind | Sinus | Bere sinus úhlu. Funkce sin předpokládá, že operand je v radiánech, zatímco funkce sind předpokládá, že operand je ve stupních. |
cos, cosd | Kosinus | Vezme kosinus úhlu. Funkce cos předpokládá, že operand je v radiánech, zatímco funkce cosd předpokládá, že operand je ve stupních. |
opálení, opálení | Tangens | Vezme tangens úhlu. Funkce tan předpokládá, že operand je v radiánech, zatímco funkce tand předpokládá, že operand je ve stupních. |
Sinh | hyperbolický sinus | Vezme hyperbolický sinus svého operandu. |
cosh | hyperbolický kosinus | Vezme hyperbolický kosinus svého operandu. |
Tanh | hyperbolický tangens | Vezme hyperbolický tangens svého operandu. |
Asin | inverzní sinus | Vezme inverzní sinus svého operandu. |
acos | inverzní kosinus | Vezme inverzní kosinus svého operandu. |
Atan | inverzní tangens | Vezme inverzní tangens svého operandu. |
Binární funkce, které vyžadují operandy s plovoucí desetinnou čárkou, jsou uvedeny v následující tabulce. Pokud typy operandů nejsou stejné, jsou operandy povýšeny na odpovídající typ. Typ výsledku je stejný jako upřednostněný typ operandu. Hodnota operandu NA vytvoří NA.
Jméno | Význam | Komentáře |
---|---|---|
Protokolu | logaritmus s danou základnou | Druhý operand je základ. První je hodnota, která má převzít logaritmus. |
atan2, atanyx | určení úhlu | Určuje úhel mezi -pí a pí z daných hodnot y a x. Všimněte si, že prvním operandem je y. |
Textové funkce jsou uvedeny v následující tabulce.
Jméno | Význam | Komentáře |
---|---|---|
len(x) | délka textu | Operand musí být text. Výsledkem je I4 označující délku operandu. Pokud je operand NA, výsledek je NA. |
lower(x), upper(x) | malá nebo velká písmena | Namapuje text na malá nebo velká písmena. |
left(x; k), right(x; k) | Podřetězec | První operand musí být text a druhý operand musí být Int32. Pokud je druhý operand záporný, považuje se za posun od konce textu. Tento upravený index se pak upne na 0 až len(x). Výsledkem jsou znaky vlevo nebo vpravo od výsledné pozice. |
mid(x, a, b) | Podřetězec | První operand musí být text a další dva operandy musí být Int32. Indexy jsou transformovány stejným způsobem jako pro levou a pravou funkci: záporné hodnoty jsou považovány za posuny od konce textu; tyto upravené indexy jsou upnuty na 0 až len(x). Druhý uchycený index je také upnut níže k prvnímu upnutému indexu. Výsledkem jsou znaky mezi těmito dvěma upnutými indexy. |
concat(x1; x2; ...; xn) | Zřetězení | To přijímá libovolný počet operandů (včetně nuly). Všechny operandy musí být textové. Výsledkem je zřetězení všech operandů v pořadí. |
Metody
Fit(IDataView) |
Tento odhadce použije výraz zadaný uživatelem (zadaný jako řetězec) na vstupní hodnoty sloupce, aby se vytvořily nové hodnoty výstupních sloupců. |
GetOutputSchema(SchemaShape) |
Tento odhadce použije výraz zadaný uživatelem (zadaný jako řetězec) na vstupní hodnoty sloupce, aby se vytvořily nové hodnoty výstupních sloupců. |
Metody rozšíření
AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment) |
K řetězu estimátoru připojte kontrolní bod ukládání do mezipaměti. Tím se zajistí, že podřízené estimátory budou natrénovány na data uložená v mezipaměti. Je užitečné mít kontrolní bod pro ukládání do mezipaměti před školiteli, kteří mají více průchodů dat. |
WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>) |
Vzhledem k estimátoru vrátí objekt obtékání, který bude volat delegáta, jakmile Fit(IDataView) je volána. Často je důležité, aby estimátor vrátil informace o tom, co bylo vhodné, což je důvod, proč Fit(IDataView) metoda vrací objekt s konkrétním typem, spíše než jen obecný ITransformerobjekt . Současně jsou však často tvořeny kanály s mnoha objekty, takže možná budeme muset vytvořit řetězec estimátorů prostřednictvím EstimatorChain<TLastTransformer> toho, IEstimator<TTransformer> kde je odhadce, pro který chceme získat transformátor, uložen někde v tomto řetězci. Pro tento scénář můžeme pomocí této metody připojit delegáta, který bude volána po zavolání fit. |