Compartilhar via


ExpressionEstimator Classe

Definição

Esse avaliador aplica uma expressão fornecida pelo usuário (especificada como uma cadeia de caracteres) a valores de coluna de entrada para produzir novos valores de coluna de saída.

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)
Herança
ExpressionEstimator
Implementações

Comentários

Características do avaliador

Esse avaliador precisa examinar os dados para treinar seus parâmetros? No
Tipo de dados de coluna de entrada float, double, int, long, bool ou text.
Tipo de dados de coluna de saída Pode ser float, double, int, long, bool ou text, dependendo da expressão.

O ExpressionTransformer resultante cria uma nova coluna, chamada conforme especificado nos parâmetros de nome da coluna de saída, em que a expressão é aplicada aos valores de entrada. No máximo uma das colunas de entrada pode ser do tipo VectorDataViewType e, quando a entrada contém uma coluna vetor, a expressão é computada independentemente em cada elemento do vetor, para criar uma saída de vetor com o mesmo comprimento que essa entrada.

A linguagem de expressão

A linguagem para o avaliador de expressão deve ser confortável para uma ampla gama de usuários. Ele compartilha muitas semelhanças com algumas linguagens populares. Diferencia maiúsculas de minúsculas, dá suporte a vários tipos e tem um conjunto avançado de operadores e funções. É funcional puro, no sentido de que não há valores mutáveis ou operações de mutação na linguagem. Ele não tem, nem precisa, nenhum mecanismo de exceção, em vez de produzir valores NA quando um valor normal não é apropriado. Ele é tipado estaticamente, mas todos os tipos são inferidos pelo compilador.

Syntax

A sintaxe para o lambda consiste em uma lista de parâmetros seguida por dois-pontos (:) ou seta (=>) seguida por uma expressão. A lista de parâmetros pode ser um único identificador ou uma lista separada por vírgulas de um ou mais identificadores entre parênteses.

Lambda:

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

lista-de-parâmetros:

  • identifier
  • (parameter-names)

parameter-names:

  • identifier
  • identificador , parameter-names

A expressão pode usar parâmetros, literais, operadores, com expressões e funções.

Literais

  • Os literais boolianos são verdadeiros e falsos.
  • Literais inteiros podem ser decimal ou hexadecimal (por exemplo, 0x1234ABCD). Eles podem ser sufixos com você ou U, indicando sem sinal, bem como l ou L, indicando long (Int64). O uso de você ou U é raro e afeta apenas a promoção de determinados valores hexadecimal de 32 bits, determinando se a constante é considerada um valor Int32 negativo ou um valor Int64 positivo.
  • Literais de ponto flutuante usam a sintaxe padrão, incluindo notação exponencial (123,45e-37). Eles podem ser sufixos com f ou F, indicando precisão única, ou d ou D, indicando precisão dupla. Ao contrário de em C#, a precisão padrão de um literal de ponto flutuante é precisão única. Para especificar precisão dupla, acrescente d ou D.
  • Literais de texto são colocados entre aspas duplas e dão suporte aos mecanismos de escape padrão.

Operadores

Os operadores da linguagem de expressão são listados na tabela a seguir, em ordem de precendência. A menos que indicado de outra forma, os operadores binários serão deixados associativos e propagarão valores NA (se qualquer valor de operando for NA, o resultado será NA). Geralmente, o estouro de valores inteiros produz NA, enquanto o estouro de valores de ponto flutuante produz infinito.

Operador Significado Aridade Comentários
​? : Condicional Ternário A condição de expressão ? value1: value2 resolve para value1 se condition for true e value2 se condition for false. A condição deve ser booliana, enquanto value1 e value2 devem ser do tipo compatível.
​?? Coalesce Binário A expressão x ?? y resolve para x se x não é NA e resolve para y caso contrário. Os operandos devem ser ambos Singles, ou ambos Doubles. Esse operador é associado à direita.
| | Ou lógico ou Binário Os operandos e o resultado são boolianos. Se um operando for true, o resultado será verdadeiro, caso contrário, será false.
&& e lógico e Binário Os operandos e o resultado são boolianos. Se um operando for false, o resultado será false, caso contrário, será verdadeiro.
​==, =
!=, <>
<, <=
>, >=
igual a
não é igual a
menor que ou igual a
maior que ou igual a
Vários - Os operadores de comparação são de várias aridades, o que significa que eles podem ser aplicados a dois ou mais operandos. Por exemplo, um == b == c resulta em true se a, b e c tiverem o mesmo valor. O operador não igual requer que todos os operandos sejam distintos, portanto, 1 != 2 != 1 é falso. Para testar se x não é negativo, mas menor que 10, use 0 <= x < 10. Não é necessário gravar 0 <= x && x < 10 e fazer isso não terá um bom desempenho. Os operadores listados na mesma linha podem ser combinados em uma única expressão, portanto, a > b >= c é legal, mas a < b >= c não é.
– É igual e não é igual a qualquer tipo de operando, enquanto os operadores ordenados exigem operandos numéricos.
​+ - adição e subtração Binário Adição numérica e subtração com propagação NA.
​* / % multiplicação, divisão e módulo Binário Multiplicação numérica, divisão e módulo com propagação NA.
​- ! not negação numérica e não lógica Unário São operadores de prefixo unário, negação (-) que exigem um operando numérico e não (!) que exigem um operando booliano.
​^ Poder Binário Essa é a exponenciação associativa correta. Ele requer operandos numéricos. Para operandos inteiros, 0^0 produz 1.
​( ) agrupamento parêntese Unário Significado padrão.

A expressão With

A sintaxe para o with-expression é:

with-expression:

  • with( assignment-list ; expression )

assignment-list:

  • atribuição
  • assignment , assignment-list

Atribuição:

  • expressão identifier =

A expressão com apresenta um ou mais valores nomeados. Por exemplo, a expressão a seguir converte uma temperatura de celcius em fahrenheit e, em seguida, produz uma mensagem com base em se o fahrenheit é muito baixo ou alto.

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

A expressão de uma atribuição pode referenciar os identificadores introduzidos por atribuições anteriores, como neste exemplo que retorna -1, 0 ou 1 em vez das mensagens:

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

Conforme demonstrado acima, o with-expression é útil quando um valor de expressão é necessário várias vezes em uma expressão maior. Também é útil ao lidar com constantes complicadas ou significativas:

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

Isso calcula o dia da semana do número de tiques (como um Int64) desde a época padrão .Net DateTime (01/01/0001 no calendário gregoriano idealizado). As atribuições são usadas para o número de tiques em um segundo, número de tiques em uma hora, número de tiques em um ano e o dia da semana para a época. Para este exemplo, queremos mapear domingo para zero, portanto, como a época é uma segunda-feira, definimos dayEpoch como 1. Se a época fosse alterada ou quiséssemos mapear um dia diferente da semana para zero, simplesmente mudaríamos dayEpoch. Observe que ticksPerSecond é definido como 10000000L, para torná-lo um valor Int64 (inteiro de 8 bytes). Sem o sufixo L, ticksPerDay estourará o intervalo de Int32.

Funções

A transformação de expressão dá suporte a muitas funções úteis.

As funções unárias gerais que podem aceitar um operando de qualquer tipo são listadas na tabela a seguir.

Nome Significado Comentários
isna teste para na Retorna um valor booliano que indica se o operando é um valor NA.
na o valor na Retorna o valor NA do mesmo tipo que o operando (float ou double). Observe que isso não avalia o operando, ele usa apenas o operando para determinar o tipo de NA a ser retornado e essa determinação ocorre em tempo de compilação.
Padrão o valor padrão Retorna o valor padrão do mesmo tipo que o operando. Por exemplo, para mapear valores NA para valores padrão, use x ?? default(x). Observe que isso não avalia o operando, ele usa apenas o operando para determinar o tipo de valor padrão a ser retornado e essa determinação ocorre em tempo de compilação. Para tipos numéricos, o padrão é zero. Para booliano, o padrão é false. Para texto, o padrão é vazio.

As funções de conversão unárias são listadas na tabela a seguir. Um operando NA produz um NA ou gera se o tipo não dá suporte a ele. Uma conversão que não é bem-sucedida ou estouro também resulta em NA ou em uma exceção. O caso mais comum disso é ao converter de texto, que usa a análise de conversão padrão. Ao converter de um valor de ponto flutuante (float ou double) em um valor inteiro (Int32 ou Int64), a conversão faz uma operação de truncar (arredondar para zero).

Nome Significado Comentários
Bool converter em booliano O operando deve ser texto ou booliano.
Int converter em Int32 A entrada pode ser de qualquer tipo.
Longas converter em Int64 A entrada pode ser de qualquer tipo.
single, float converter em Single A entrada pode ser de qualquer tipo.
Duplo converter em Double A entrada pode ser de qualquer tipo.
Texto converter em texto A entrada pode ser de qualquer tipo. Isso produz uma representação de texto padrão.

As funções unárias que exigem um operando numérico são listadas na tabela a seguir. O tipo de resultado é o mesmo que o tipo de operando. Um valor de operando NA produz NA.

Nome Significado Comentários
Abs valor absoluto Produz o valor absoluto do operando.
Sinal sign (-1, 0, 1) Produz -1, 0 ou 1, dependendo se o operando é negativo, zero ou positivo.

As funções binárias que exigem operandos numéricos são listadas na tabela a seguir. Quando os tipos de operando não são os mesmos, os operandos são promovidos a um tipo apropriado. O tipo de resultado é o mesmo que o tipo de operando promovido. Um valor de operando NA produz NA.

Nome Significado Comentários
Min Mínimo Produz o mínimo dos operandos.
Max máximo Produz o máximo dos operandos.

As funções unárias que exigem um operando de ponto flutuante são listadas na tabela a seguir. O tipo de resultado é o mesmo que o tipo de operando. O estouro produz infinito. Os valores de entrada inválidos produzem NA.

Nome Significado Comentários
Sqrt raiz quadrada Operandos negativos produzem NA.
trunc, truncar truncar para um inteiro Arredonda em direção a zero para o valor inteiro mais próximo.
Chão Chão Arredonda para o infinito negativo para o valor inteiro mais próximo.
ceil, teto Teto Arredonda para o infinito positivo para o valor inteiro mais próximo.
Rodada arredondamento imparcial Arredonda para o valor inteiro mais próximo. Quando o operando está na metade entre dois valores inteiros, isso produz o inteiro par.
Exp Exponencial Levanta e para o operando.
ln, log Logaritmo Produz o logaritmo natural (base e). Também há uma versão de log de dois operandos para usar uma base diferente.
deg, degrees radianos em graus Mapeia de radianos para graus.
rad, radianos graus para radianos Mapeia de graus para radianos.
sin, sind Seno Usa o seno de um ângulo. A função sin pressupõe que o operando está em radianos, enquanto a função sind pressupõe que o operando está em graus.
cos, cosd Cosseno Usa o cosseno de um ângulo. A função cos pressupõe que o operando está em radianos, enquanto a função cosd pressupõe que o operando está em graus.
bronzeado, bronzeado Tangente Usa a tangente de um ângulo. A função tan pressupõe que o operando está em radianos, enquanto a função tand pressupõe que o operando está em graus.
Sinh seno hiperbólico Usa o seno hiperbólico de seu operando.
Cosh cosseno hiperbólico Usa o cosseno hiperbólico de seu operando.
Tanh tangente hiperbólica Usa a tangente hiperbólica de seu operando.
Asin seno inverso Usa o seno inverso de seu operando.
Acos cosseno inverso Usa o cosseno inverso de seu operando.
Atan tangente inversa Usa a tangente inversa de seu operando.

As funções binárias que exigem operandos de ponto flutuante são listadas na tabela a seguir. Quando os tipos de operando não são os mesmos, os operandos são promovidos a um tipo apropriado. O tipo de resultado é o mesmo que o tipo de operando promovido. Um valor de operando NA produz NA.

Nome Significado Comentários
Log logaritmo com determinada base O segundo operando é a base. O primeiro é o valor do qual usar o logaritmo.
atan2, atanyx determinar ângulo Determina o ângulo entre -pi e pi dos valores y e x fornecidos. Observe que y é o primeiro operando.

As funções de texto são listadas na tabela a seguir.

Nome Significado Comentários
len(x) comprimento do texto O operando deve ser texto. O resultado é um I4 que indica o comprimento do operando. Se o operando for NA, o resultado será NA.
lower(x), upper(x) minúsculas ou maiúsculas Mapeia o texto para letras minúsculas ou maiúsculas.
left(x, k), right(x, k) Subsequência O primeiro operando deve ser texto e o segundo operando deve ser Int32. Se o segundo operando for negativo, ele será tratado como um deslocamento do final do texto. Esse índice ajustado é então fixado em 0 a len(x). O resultado são os caracteres à esquerda ou à direita da posição resultante.
mid(x, a, b) Subsequência O primeiro operando deve ser texto e os outros dois operandos devem ser Int32. Os índices são transformados da mesma forma que para as funções esquerda e direita: valores negativos são tratados como deslocamentos do final do texto; esses índices ajustados são fixados em 0 a len(x). O segundo índice fixado também é fixado abaixo ao primeiro índice fixado. O resultado são os caracteres entre esses dois índices fixados.
concat(x1, x2, ..., xn) Concatenação Isso aceita um número arbitrário de operandos (incluindo zero). Todos os operandos devem ser texto. O resultado é a concatenação de todos os operandos, em ordem.

Métodos

Fit(IDataView)

Esse avaliador aplica uma expressão fornecida pelo usuário (especificada como uma cadeia de caracteres) a valores de coluna de entrada para produzir novos valores de coluna de saída.

GetOutputSchema(SchemaShape)

Esse avaliador aplica uma expressão fornecida pelo usuário (especificada como uma cadeia de caracteres) a valores de coluna de entrada para produzir novos valores de coluna de saída.

Métodos de Extensão

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

Acrescente um 'ponto de verificação de cache' à cadeia de avaliadores. Isso garantirá que os avaliadores downstream sejam treinados em relação aos dados armazenados em cache. É útil ter um ponto de verificação de cache antes dos treinadores que fazem várias passagens de dados.

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

Dado um avaliador, retorne um objeto de encapsulamento que chamará um delegado uma vez Fit(IDataView) chamado. Geralmente, é importante que um avaliador retorne informações sobre o que era adequado, e é por isso que o Fit(IDataView) método retorna um objeto especificamente tipado, em vez de apenas um geral ITransformer. No entanto, ao mesmo tempo, IEstimator<TTransformer> muitas vezes são formados em pipelines com muitos objetos, portanto, talvez seja necessário criar uma cadeia de avaliadores por meio EstimatorChain<TLastTransformer> de onde o avaliador para o qual queremos obter o transformador está enterrado em algum lugar nesta cadeia. Para esse cenário, podemos por meio desse método anexar um delegado que será chamado assim que fit for chamado.

Aplica-se a

Confira também