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 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é bisogno, 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:

  • identificatore
  • (parameter-names)

parameter-names:

  • identificatore
  • identificatore , nomi di parametro

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

Literals

  • I valori letterali booleani sono true e false.
  • I valori letterali integer possono essere decimali o esadecimali (ad esempio, 0x1234ABCD). Possono essere suffisso con te 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 suffisso con f o F, che indica una singola precisione o d o D, che indica la precisione doppia. A differenza di C#, la precisione predefinita di un valore letterale a virgola mobile è una singola precisione. 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.

Operators

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 Meaning Arity Comments
​? : condizionale Ternario Condizione dell'espressione ? value1: value2 viene risolto 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 viene risolto 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 il risultato sono booleani. Se un operando è true, il risultato è true; in caso contrario, è false.
& logico e Binario Gli operandi e il risultato sono booleani. Se un operando è false, il risultato è false, in caso contrario, è true.
​==, =
!=, <>
<, <=
>, >=
Uguale
diverso da
minore o uguale a
maggiore o uguale a
Multiple - Gli operatori di confronto sono multi-arità, ovvero 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 in questo modo non si eseguirà. Gli operatori elencati nella stessa riga possono essere combinati in una singola espressione, quindi a > b >= c è legale, ma un < 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.
​- ! non 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.
​^ potenza Binario Questa è l'esponente associativa giusta. Richiede operandi numerici. Per gli operandi interi, 0^0 produce 1.
​( ) raggruppamento tra parentesi Unario Significato standard.

Espressione With

La sintassi per with-expression è:

with-expression:

  • with( assignment-list ; expression )

assignment-list:

  • incarico
  • 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 genera un messaggio in base al fatto che il 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 è necessario più volte un valore di espressione 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é il periodo è un lunedì, viene impostato dayEpoch 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 eseguirà l'overflow dell'intervallo di Int32.

Functions

La trasformazione dell'espressione supporta molte funzioni utili.

Le funzioni unarie 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, ma usa solo l'operando per determinare il tipo di NA da restituire e tale determinazione avviene in fase di compilazione.
impostazione predefinita 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 che la 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 comporta anche na o un'eccezione. Il caso più comune di questo è 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 convertire in valore booleano L'operando deve essere di tipo text o booleano.
int converti in Int32 L'input può essere di qualsiasi tipo.
long converti in Int64 L'input può essere di qualsiasi tipo.
single, float converti in Single L'input può essere di qualsiasi tipo.
double 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
abs 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 di operando non sono uguali, gli operandi vengono promossi a un tipo appropriato. Il tipo di risultato è uguale al tipo di operando alzato di livello. Un valore dell'operando NA produce NA.

Nome Significato Commenti
min minimo Produce il minimo degli operandi.
max massimo Produce il massimo degli operandi.

Le funzioni unarie che richiedono un operando a virgola mobile sono elencate nella tabella seguente. Il tipo di risultato è uguale al tipo di operando. L'overflow produce infinito. I valori di input non validi producono NA.

Nome Significato Commenti
sqrt radice quadrata Gli operandi negativi producono NA.
troncamento, troncamento troncamento a un numero intero Arrotonda verso zero al valore intero più vicino.
pavimento pavimento Arrotonda verso l'infinito negativo al valore intero più vicino.
ceil, soffitto soffitto Arrotonda verso l'infinito positivo al valore intero più vicino.
arrotondamento arrotondamento non distorto Arrotonda al valore intero più vicino. Quando l'operando è a metà strada tra due valori interi, questo produce l'intero pari.
exp esponenziale Genera e all'operando.
ln, log logaritmo Produce il logaritmo naturale (base e). È disponibile anche una versione di log a due operandi per l'uso di una base diversa.
deg, gradi radianti a gradi Esegue il mapping da radianti a gradi.
rad, radianti gradi a radianti Esegue il mapping da gradi a radianti.
peccato, sind seno Prende il seno di un angolo. La funzione sin presuppone che l'operando sia espresso in radianti, mentre la funzione sind presuppone che l'operando sia espresso in gradi.
cos, cosd coseno Prende il coseno 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, abbronzato 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 espresso in gradi.
sinh seno iperbolico Prende il seno iperbolico del suo operando.
cosh coseno iperbolico Prende il coseno iperbolico del suo operando.
tanh tangente iperbolica Accetta la tangente iperbolica del relativo operando.
asin seno inverso Accetta il seno inverso del suo operando.
acos coseno inverso Prende il coseno inverso del suo operando.
atan tangente inversa Accetta la tangente inversa del relativo operando.

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

Nome Significato Commenti
log logaritmo con base specificata Il secondo operando è la base. Il primo è il valore di cui accettare il logaritmo.
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 regolato 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 come offset dalla fine del testo; questi indici regolati sono bloccati a 0 a len(x). Il secondo indice bloccato è inoltre 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

Nome Descrizione
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

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

Aggiungere un "checkpoint di memorizzazione nella cache" alla catena di stima. In questo modo si garantisce che gli estimatori downstream vengano sottoposti a training su dati memorizzati nella cache. È utile disporre di un checkpoint di memorizzazione nella cache prima che i formatori eseseguono più passaggi di dati.

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

Dato uno strumento di stima, restituire un oggetto wrapping che chiamerà un delegato una volta Fit(IDataView) chiamato. È spesso importante che uno strumento di stima restituisca informazioni sulle dimensioni, 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