Condividi tramite


ExpressionEstimator Classe

Definizione

Questo strumento di stima applica un'espressione fornita dall'utente (specificata come stringa) ai valori di colonna di input per produrre nuovi valori di colonna di output.

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)
Ereditarietà
ExpressionEstimator
Implementazioni

Commenti

Caratteristiche dello strumento di stima

Questo strumento di stima deve esaminare i dati per eseguire il training dei relativi parametri? No
Tipo di dati della colonna di input float, double, int, long, bool o text.
Tipo di dati della colonna di output Può essere float, double, int, long, bool o text, a seconda dell'espressione.

ExpressionTransformer risultante crea una nuova colonna, denominata come specificato nei parametri del nome della colonna di output, in cui l'espressione viene applicata ai valori di input. Al massimo una delle colonne di input può essere di tipo VectorDataViewType e quando l'input contiene una colonna vettoriale, l'espressione viene calcolata in modo indipendente su ogni elemento del vettore per creare un output vettore con la stessa lunghezza dell'input.

Linguaggio delle espressioni

Il linguaggio per lo strumento di stima delle espressioni deve essere comodo per un'ampia gamma di utenti. Condivide molte analogie con alcune lingue popolari. Fa distinzione tra maiuscole e minuscole, supporta più tipi e include un set completo di operatori e funzioni. È funzionale puro, nel senso che non ci sono valori modificabili o operazioni di modifica nel linguaggio. Non ha, né richiede, alcun meccanismo di eccezione, ma produce valori NA quando un valore normale non è appropriato. Viene tipizzato in modo statico, ma tutti i tipi vengono dedotti dal compilatore.

Sintassi

La sintassi per l'espressione lambda è costituita da un elenco di parametri seguito da due punti (:) o freccia (=>) seguiti da un'espressione. L'elenco di parametri può essere un singolo identificatore o un elenco delimitato da virgole di uno o più identificatori racchiusi tra parentesi.

Lambda:

  • parameter-list : expression
  • parameter-list => expression

parameter-list:

  • identifier
  • (parameter-names)

parameter-names:

  • identifier
  • identificatore , nomi di parametro

L'espressione può usare parametri, valori letterali, operatori, espressioni con espressioni e funzioni.

Valori letterali

  • I valori letterali booleani sono true e false.
  • I valori letterali integer possono essere decimali o esadecimali (ad esempio, 0x1234ABCD). Possono essere suffisso con l'utente o U, che indica unsigned, nonché l o L, che indica long (Int64). L'uso di te o U è raro e influisce solo sulla promozione di determinati valori esadecimali a 32 bit, determinando se la costante è considerata un valore Int32 negativo o un valore Int64 positivo.
  • I valori letterali a virgola mobile usano la sintassi standard, inclusa la notazione esponenziale (123,45e-37). Possono essere suffissi con f o F, che indica una precisione singola o d o D, che indica la precisione doppia. A differenza di C#, la precisione predefinita di un valore letterale a virgola mobile è una precisione singola. Per specificare la precisione doppia, aggiungere d o D.
  • I valori letterali di testo sono racchiusi tra virgolette doppie e supportano i meccanismi di escape standard.

Operatori

Gli operatori del linguaggio delle espressioni sono elencati nella tabella seguente, in ordine di precendenza. Se non diversamente specificato, gli operatori binari vengono lasciati associativi e propagano valori NA (se uno dei due valori operandi è NA, il risultato è NA). In genere, l'overflow dei valori integer produce NA, mentre l'overflow dei valori a virgola mobile produce infinito.

Operatore Significato Arietà Commenti
​? : Condizionale Ternario Condizione dell'espressione ? value1: value2 si risolve in value1 se la condizione è true e in value2 se la condizione è false. La condizione deve essere booleana, mentre value1 e value2 devono essere di tipo compatibile.
​?? Coalesce Binario Espressione x ?? y si risolve in x se x non è NA e viene risolto in y in caso contrario. Gli operandi devono essere sia Single che Double. Questo operatore è associativo corretto.
| | O logico o Binario Gli operandi e i risultati sono booleani. Se un operando è true, il risultato è true; in caso contrario, è false.
&& e logico e Binario Gli operandi e i risultati sono booleani. Se un operando è false, il risultato è false; in caso contrario, è true.
​==, =
!=, <>
<, <=
>, >=
equals
non è uguale a
minore o uguale a
maggiore o uguale a
Più - Gli operatori di confronto sono a più arità, vale a dire che possono essere applicati a due o più operandi. Ad esempio, a == b == c restituisce true se a, b e c hanno lo stesso valore. L'operatore non uguale richiede che tutti gli operandi siano distinti, quindi 1 != 2 != 1 è false. Per verificare se x è non negativo ma minore di 10, usare 0 <= x < 10. Non è necessario scrivere 0 <= x && x < 10 e questa operazione non funzionerà. Gli operatori elencati nella stessa riga possono essere combinati in una singola espressione, quindi a > b >= c è legale, ma b <>= c non è.
- Uguale a e non uguale a si applica a qualsiasi tipo di operando, mentre gli operatori ordinati richiedono operandi numerici.
​+ - addizione e sottrazione Binario Addizione numerica e sottrazione con propagazione NA.
​* / % moltiplicazione, divisione e modulo Binario Moltiplicazione numerica, divisione e modulo con propagazione NA.
​- ! not negazione numerica e non logica Unario Si tratta di operatori di prefisso unario, negazione (-) che richiedono un operando numerico e non (!) che richiedono un operando booleano.
​^ Potere Binario Questa è l'esponente associativa giusta. Richiede operandi numerici. Per gli operandi interi, 0^0 produce 1.
​( ) raggruppamento parentesi Unario Significato standard.

Espressione With

La sintassi per with-expression è:

with-expression:

  • with( assignment-list ; expression )

assignment-list:

  • Assegnazione
  • assegnazione , assignment-list

Assegnazione:

  • espressione identificatore =

With-expression introduce uno o più valori denominati. Ad esempio, l'espressione seguente converte una temperatura celcius in fahrenheit, quindi produce un messaggio in base al fatto che fahrenheit sia troppo basso o alto.

c => with(f = c * 9 / 5 + 32 ; f < 60 ? "Too Cold!" : f > 90 ? "Too Hot!" : "Just Right!")

L'espressione per un'assegnazione può fare riferimento agli identificatori introdotti dalle assegnazioni precedenti, come in questo esempio che restituisce -1, 0 o 1 anziché i messaggi:

c : with(f = c * 9 / 5 + 32, cold = f < 60, hot = f > 90 ; -float(cold) + float(hot))

Come illustrato in precedenza, with-expression è utile quando un valore di espressione è necessario più volte in un'espressione più grande. È utile anche quando si gestiscono costanti complesse o significative:

    ticks => with(
        ticksPerSecond = 10000000L,
        ticksPerHour = ticksPerSecond \* 3600,
        ticksPerDay = ticksPerHour \* 24,
        day = ticks / ticksPerDay,
        dayEpoch = 1 ;
        (day + dayEpoch) % 7)

Questo calcola il giorno della settimana dal numero di tick (come int64) dal periodo DateTime standard .Net (01/01/0001 nel calendario gregoriano idealizzato). Le assegnazioni vengono usate per il numero di tick in un secondo, il numero di tick in un'ora, il numero di tick in un anno e il giorno della settimana per l'epoca. Per questo esempio, si vuole eseguire il mapping di Domenica a zero, quindi, poiché l'epoca è un lunedì, dayEpoch viene impostato su 1. Se l'epoca è stata modificata o si vuole eseguire il mapping di un giorno diverso della settimana a zero, è sufficiente cambiare dayEpoch. Si noti che ticksPerSecond è definito come 10000000L per renderlo un valore Int64 (intero a 8 byte). Senza il suffisso L, ticksPerDay sovrafficherà l'intervallo di Int32.

Funzioni

La trasformazione dell'espressione supporta molte funzioni utili.

Le funzioni unari generali che possono accettare un operando di qualsiasi tipo sono elencate nella tabella seguente.

Nome Significato Commenti
Isna test per na Restituisce un valore booleano che indica se l'operando è un valore NA.
Na il valore na Restituisce il valore NA dello stesso tipo dell'operando (float o double). Si noti che questo non valuta l'operando, usa solo l'operando per determinare il tipo di NA da restituire e che la determinazione avviene in fase di compilazione.
Predefinito il valore predefinito Restituisce il valore predefinito dello stesso tipo dell'operando. Ad esempio, per eseguire il mapping dei valori NA ai valori predefiniti, usare x ?? default(x). Si noti che questo non valuta l'operando, ma usa solo l'operando per determinare il tipo di valore predefinito da restituire e tale determinazione avviene in fase di compilazione. Per i tipi numerici, il valore predefinito è zero. Per il valore booleano, il valore predefinito è false. Per il testo, il valore predefinito è vuoto.

Le funzioni di conversione unaria sono elencate nella tabella seguente. Un operando NA produce un na o genera un'eccezione se il tipo non lo supporta. Una conversione che non riesce o l'overflow genera anche un'eccezione o na. Il caso più comune è quando si esegue la conversione da testo, che usa l'analisi della conversione standard. Quando si esegue la conversione da un valore a virgola mobile (float o double) a un valore intero (Int32 o Int64), la conversione esegue un'operazione di troncamento (arrotondamento verso zero).

Nome Significato Commenti
Bool converti in valore booleano L'operando deve essere di testo o booleano.
Int converti in Int32 L'input può essere di qualsiasi tipo.
Lungo converti in Int64 L'input può essere di qualsiasi tipo.
single, float converti in Single L'input può essere di qualsiasi tipo.
Doppia converti in Double L'input può essere di qualsiasi tipo.
Testo converti in testo L'input può essere di qualsiasi tipo. In questo modo viene creata una rappresentazione di testo predefinita.

Le funzioni unarie che richiedono un operando numerico sono elencate nella tabella seguente. Il tipo di risultato è uguale al tipo di operando. Un valore dell'operando NA produce NA.

Nome Significato Commenti
Ass valore assoluto Produce il valore assoluto dell'operando.
Segno segno (-1, 0, 1) Produce -1, 0 o 1 a seconda che l'operando sia negativo, zero o positivo.

Le funzioni binarie che richiedono operandi numerici sono elencate nella tabella seguente. Quando i tipi operandi non sono uguali, gli operandi vengono promossi a un tipo appropriato. Il tipo di risultato corrisponde al tipo di operando promosso. Un valore operando NA produce NA.

Nome Significato Commenti
Minimo Minimo Produce il minimo degli operandi.
Massimo maximum Produce il massimo degli operandi.

Le funzioni unarie che richiedono un operando a virgola mobile sono elencate nella tabella seguente. Il tipo di risultato è lo stesso del tipo operando. Overflow produce infinito. I valori di input non validi producono NA.

Nome Significato Commenti
Sqrt radice quadrata Gli operandi negativi producono NA.
troncamento, troncamento troncare a un intero Arrotonda verso zero al valore intero più vicino.
Piano Piano Arrotonda verso l'infinito negativo al valore intero più vicino.
ceil, soffitto Soffitto Arrotonda verso l'infinito positivo al valore intero più vicino.
Rotondo arrotondamento non crittografato Arrotonda il valore intero più vicino. Quando l'operando è metà tra due valori integer, questo produce l'intero pari.
Exp Esponenziale Genera e all'operando.
ln, log Logaritmo Produce il logaritmo naturale (base e). Esiste anche una versione di due operandi del log per l'uso di una base diversa.
deg, gradi radianti a gradi Mappa da radianti a gradi.
rad, radianti gradi a radianti Mappa da gradi a radianti.
peccato, sind Seno Accetta il sine di un angolo. La funzione sin presuppone che l'operando sia in radianti, mentre la funzione sind presuppone che l'operando sia in gradi.
cosd, cosd Coseno Prende il cosno di un angolo. La funzione cos presuppone che l'operando sia in radianti, mentre la funzione cosd presuppone che l'operando sia in gradi.
tan, tand Tangente Accetta la tangente di un angolo. La funzione tan presuppone che l'operando sia in radianti, mentre la funzione tand presuppone che l'operando sia in gradi.
Sinh sine iperbolico Prende il seno iperbolico del suo operando.
Cosh cosine iperbolico Prende il cosno iperbolico del suo operando.
tanh tangente iperbolica Accetta la tangente iperbolica del suo operando.
Asin sine inverso Prende il sine inverso del suo operando.
Acos cosno inverso Prende il cosno inverso del suo operando.
Atan tangente inversa Accetta la tangente inversa del suo operando.

Le funzioni binarie che richiedono operandi a virgola mobile sono elencate nella tabella seguente. Quando i tipi operandi non sono uguali, gli operandi vengono promossi a un tipo appropriato. Il tipo di risultato corrisponde al tipo di operando promosso. Un valore operando NA produce NA.

Nome Significato Commenti
Registro logaritmo con base specificata Il secondo operando è la base. Il primo è il valore da accettare il logaritmo di .
atan2, atanyx determinare l'angolo Determina l'angolo tra -pi e pi dai valori y e x specificati. Si noti che y è il primo operando.

Le funzioni di testo sono elencate nella tabella seguente.

Nome Significato Commenti
len(x) lunghezza del testo L'operando deve essere di testo. Il risultato è un I4 che indica la lunghezza dell'operando. Se l'operando è NA, il risultato è NA.
lower(x), upper(x) minuscolo o maiuscolo Esegue il mapping del testo in lettere minuscole o maiuscole.
left(x, k), right(x, k) Sottostringa Il primo operando deve essere di testo e il secondo operando deve essere Int32. Se il secondo operando è negativo, viene considerato come offset dalla fine del testo. Questo indice modificato viene quindi bloccato su 0 a len(x). Il risultato è costituito dai caratteri a sinistra o a destra della posizione risultante.
mid(x, a, b) Sottostringa Il primo operando deve essere di testo e gli altri due operandi devono essere Int32. Gli indici vengono trasformati nello stesso modo delle funzioni di sinistra e destra: i valori negativi vengono considerati offset dalla fine del testo; questi indici regolati sono bloccati da 0 a len(x). Il secondo indice bloccato viene anche bloccato al di sotto del primo indice bloccato. Il risultato è costituito dai caratteri tra questi due indici bloccati.
concat(x1, x2, ..., xn) Concatenazione Accetta un numero arbitrario di operandi (incluso zero). Tutti gli operandi devono essere di testo. Il risultato è la concatenazione di tutti gli operandi, in ordine.

Metodi

Fit(IDataView)

Questo strumento di stima applica un'espressione fornita dall'utente (specificata come stringa) ai valori di colonna di input per produrre nuovi valori di colonna di output.

GetOutputSchema(SchemaShape)

Questo strumento di stima applica un'espressione fornita dall'utente (specificata come stringa) ai valori di colonna di input per produrre nuovi valori di colonna di output.

Metodi di estensione

AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment)

Aggiungere un "checkpoint di memorizzazione nella cache" alla catena di stima. Ciò garantisce che gli estimatori downstream vengano sottoposti a training in base ai dati memorizzati nella cache. È utile avere un checkpoint di memorizzazione nella cache prima che i formatori eseseguono più passaggi di dati.

WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>)

Dato un estimator, restituire un oggetto wrapping che chiamerà un delegato una volta Fit(IDataView) chiamato. È spesso importante che uno strumento di stima restituisca informazioni sull'adattamento, motivo per cui il Fit(IDataView) metodo restituisce un oggetto tipizzato in modo specifico, anziché solo un oggetto generale ITransformer. Tuttavia, allo stesso tempo, IEstimator<TTransformer> vengono spesso formati in pipeline con molti oggetti, quindi potrebbe essere necessario creare una catena di estimatori tramite EstimatorChain<TLastTransformer> dove lo strumento di stima per il quale si vuole ottenere il trasformatore è sepolto in una posizione in questa catena. Per questo scenario, è possibile collegare un delegato che verrà chiamato una volta chiamato fit.

Si applica a

Vedi anche