ExpressionEstimator Třída

Definice

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.

Platí pro

Viz také