ExpressionEstimator Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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. |