Compartir a través de


ExpressionEstimator Clase

Definición

Este estimador aplica una expresión proporcionada por el usuario (especificada como cadena) a los valores de columna de entrada para generar nuevos valores de columna de salida.

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)
Herencia
ExpressionEstimator
Implementaciones

Comentarios

Características del estimador

¿Este estimador necesita examinar los datos para entrenar sus parámetros? No
Tipo de datos de columna de entrada float, double, int, long, bool o text.
Tipo de datos de columna de salida Puede ser float, double, int, long, bool o text, dependiendo de la expresión.

ExpressionTransformer resultante crea una nueva columna, denominada como se especifica en los parámetros de nombre de columna de salida, donde la expresión se aplica a los valores de entrada. Como máximo, una de las columnas de entrada puede ser de tipo VectorDataViewType y, cuando la entrada contiene una columna vectorial, la expresión se calcula de forma independiente en cada elemento del vector, para crear una salida vectorial con la misma longitud que esa entrada.

Lenguaje de expresiones

El lenguaje del estimador de expresiones debe ser cómodo para una amplia gama de usuarios. Comparte muchas similitudes con algunos lenguajes populares. Distingue mayúsculas de minúsculas, admite varios tipos y tiene un amplio conjunto de operadores y funciones. Es funcional puro, en el sentido de que no hay valores mutables ni operaciones de mutación en el lenguaje. No tiene, ni necesita, ningún mecanismo de excepción, sino que genera valores NA cuando un valor normal no es adecuado. Se escribe estáticamente, pero el compilador deduce todos los tipos.

Syntax

La sintaxis de la expresión lambda consta de una lista de parámetros seguida de dos puntos (:) o flecha (=>) seguida de una expresión. La lista de parámetros puede ser un identificador único o una lista separada por comas de uno o varios identificadores entre paréntesis.

Lambda:

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

parameter-list:

  • identifier
  • (nombres deparámetros)

parameter-names:

  • identifier
  • identifier , parameter-names

La expresión puede usar parámetros, literales, operadores, con expresiones y funciones.

Literales

  • Los literales booleanos son true y false.
  • Los literales enteros pueden ser decimales o hexadecimales (por ejemplo, 0x1234ABCD). Se pueden sufijar con usted o U, lo que indica unsigned, así como l o L, que indica long (Int64). El uso de usted o U es poco frecuente y solo afecta a la promoción de determinados valores hexadecimales de 32 bits, lo que determina si la constante se considera un valor Int32 negativo o un valor Int64 positivo.
  • Los literales de punto flotante usan la sintaxis estándar, incluida la notación exponencial (123.45e-37). Se pueden sufijar con f o F, lo que indica una precisión sencilla, o d o D, lo que indica una precisión doble. A diferencia de C#, la precisión predeterminada de un literal de punto flotante es de precisión única. Para especificar precisión doble, anexe d o D.
  • Los literales de texto se incluyen entre comillas dobles y admiten los mecanismos de escape estándar.

Operadores

Los operadores del lenguaje de expresión se muestran en la tabla siguiente, en orden de precendencia. A menos que se indique lo contrario, los operadores binarios son asociativos y propagan valores NA (si alguno de los valores de operando es NA, el resultado es NA). Por lo general, el desbordamiento de valores enteros genera NA, mientras que el desbordamiento de valores de punto flotante produce infinito.

Operador Significado Arity Comentarios
​? : Condicional Ternario La condición de expresión ? value1: value2 se resuelve en value1 si condition es true y en value2 si condition es false. La condición debe ser booleana, mientras que value1 y value2 deben ser de tipo compatible.
​?? Coalesce Binario La expresión x ?? y se resuelve en x si x no es NA y se resuelve en y en caso contrario. Los operandos deben ser singles o doubles. Este operador es asociativo a la derecha.
| | O lógico o Binario Los operandos y el resultado son booleanos. Si un operando es true, el resultado es true; de lo contrario, es false.
&& y lógico y Binario Los operandos y el resultado son booleanos. Si un operando es false, el resultado es false; de lo contrario, es true.
​==, =
!=, <>
<, <=
>, >=
es igual a
no es igual a
Menor o igual que
Mayor o igual que
Múltiples - Los operadores de comparación son de varias aristas, lo que significa que se pueden aplicar a dos o más operandos. Por ejemplo, a == b == c da como resultado true si a, b y c tienen el mismo valor. El operador no igual requiere que todos los operandos sean distintos, por lo que 1 != 2 != 1 es false. Para comprobar si x no es negativo pero menor que 10, use 0 <= x < 10. No es necesario escribir 0 <= x && x < 10 y hacerlo tampoco funcionará. Los operadores enumerados en la misma línea se pueden combinar en una sola expresión, por lo que b >>= c es legal, pero un < b >= c no.
: es igual y no es igual que se aplica a cualquier tipo de operando, mientras que los operadores ordenados requieren operandos numéricos.
​+ - suma y resta Binario Suma numérica y resta con propagación na.
​* / % multiplicación, división y módulo Binario Multiplicación numérica, división y módulo con propagación na.
​- ! not negación numérica y no lógica Unarios Se trata de operadores de prefijo unarios, negación (-) que requieren un operando numérico y no (!) que requieren un operando booleano.
​^ Poder Binario Esta es la exponenciación asociativa correcta. Requiere operandos numéricos. Para operandos enteros, 0^0 produce 1.
​( ) agrupación entre paréntesis Unarios Significado estándar.

La expresión With

La sintaxis de with-expression es:

with-expression:

  • with( assignment-list ; expression )

assignment-list:

  • asignación
  • asignación , lista de asignaciones

Asignación:

  • expresión de identificador =

La expresión with presenta uno o varios valores con nombre. Por ejemplo, la expresión siguiente convierte una temperatura celcius en fahrenheit y, a continuación, genera un mensaje basado en si el fahrenheit es demasiado bajo o alto.

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

La expresión de una asignación puede hacer referencia a los identificadores introducidos por las asignaciones anteriores, como en este ejemplo que devuelve -1, 0 o 1 en lugar de los mensajes:

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

Como se ha mostrado anteriormente, la expresión with es útil cuando se necesita un valor de expresión varias veces en una expresión mayor. También es útil cuando se trabaja con constantes complicadas o significativas:

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

Esto calcula el día de la semana a partir del número de tics (como int64) desde la época estándar de fecha y hora de .Net (01/01/0001 en el calendario gregoriano idealizado). Las asignaciones se usan para el número de tics en un segundo, el número de tics en una hora, el número de tics de un año y el día de la semana para la época. En este ejemplo, queremos asignar domingo a cero, por lo que, dado que la época es un lunes, establecemos dayEpoch en 1. Si la época cambiase o queríamos asignar un día diferente de la semana a cero, simplemente cambiaríamos dayEpoch. Tenga en cuenta que ticksPerSecond se define como 100000000L, para convertirlo en un valor Int64 (entero de 8 bytes). Sin el sufijo L, ticksPerDay desbordará el intervalo de Int32.

Functions

La transformación de expresiones admite muchas funciones útiles.

Las funciones unarias generales que pueden aceptar un operando de cualquier tipo se enumeran en la tabla siguiente.

Nombre Significado Comentarios
isna test for na Devuelve un valor booleano que indica si el operando es un valor NA.
Na el valor na Devuelve el valor NA del mismo tipo que el operando (float o double). Tenga en cuenta que esto no evalúa el operando, solo usa el operando para determinar el tipo de NA que se va a devolver y esa determinación se produce en tiempo de compilación.
Predeterminado el valor predeterminado Devuelve el valor predeterminado del mismo tipo que el operando. Por ejemplo, para asignar valores NA a valores predeterminados, use x ?? default(x). Tenga en cuenta que esto no evalúa el operando, solo usa el operando para determinar el tipo de valor predeterminado que se va a devolver y esa determinación se produce en tiempo de compilación. Para los tipos numéricos, el valor predeterminado es cero. Para booleano, el valor predeterminado es false. En el caso del texto, el valor predeterminado está vacío.

Las funciones de conversión unaria se enumeran en la tabla siguiente. Un operando NA genera una NA o produce si el tipo no lo admite. Una conversión que no se realiza correctamente o desbordamiento también da como resultado NA o una excepción. El caso más común de esto es cuando se convierte desde texto, que usa el análisis de conversión estándar. Al convertir de un valor de punto flotante (float o double) a un valor entero (Int32 o Int64), la conversión realiza una operación truncada (redondeo hacia cero).

Nombre Significado Comentarios
Bool convertir en booleano El operando debe ser texto o booleano.
Int convertir en Int32 La entrada puede ser de cualquier tipo.
Largo convertir en Int64 La entrada puede ser de cualquier tipo.
single, float convertir en Single La entrada puede ser de cualquier tipo.
Doble convertir en Double La entrada puede ser de cualquier tipo.
Texto convertir en texto La entrada puede ser de cualquier tipo. Esto genera una representación de texto predeterminada.

Las funciones unarias que requieren un operando numérico se enumeran en la tabla siguiente. El tipo de resultado es el mismo que el tipo de operando. Un valor de operando NA genera NA.

Nombre Significado Comentarios
Abs valor absoluto Genera el valor absoluto del operando.
Firmar signo (-1, 0, 1) Genera -1, 0 o 1 en función de si el operando es negativo, cero o positivo.

Las funciones binarias que requieren operandos numéricos se enumeran en la tabla siguiente. Cuando los tipos de operando no son los mismos, los operandos se promueven a un tipo adecuado. El tipo de resultado es el mismo que el tipo de operando promocionado. Un valor de operando NA genera NA.

Nombre Significado Comentarios
Min Mínimo Genera el mínimo de los operandos.
máximo maximum Genera el máximo de los operandos.

Las funciones unarias que requieren un operando de punto flotante se enumeran en la tabla siguiente. El tipo de resultado es el mismo que el tipo de operando. Desbordamiento produce infinito. Los valores de entrada no válidos generan NA.

Nombre Significado Comentarios
Sqrt raíz cuadrada Los operandos negativos generan NA.
trunc, truncar truncar en un entero Redondea hacia cero hasta el valor entero más cercano.
Piso Piso Redondea hacia el infinito negativo hasta el valor entero más cercano.
ceil, techo Techo Redondea hacia el infinito positivo hasta el valor entero más cercano.
Redondo redondeo no sesgado Redondea al valor entero más cercano. Cuando el operando está medio entre dos valores enteros, esto genera el entero par.
Exp Exponencial Genera e al operando.
ln, log Logaritmo Genera el logaritmo natural (base e). También hay una versión de dos operandos del registro para usar una base diferente.
deg, degrees radianes a grados Asigna de radianes a grados.
rad, radianes grados a radianes Asigna de grados a radianes.
pecado, pecado Seno Toma el seno de un ángulo. La función sin supone que el operando está en radianes, mientras que la función sind supone que el operando está en grados.
cos, cosd Coseno Toma el coseno de un ángulo. La función cos supone que el operando está en radianes, mientras que la función cosd supone que el operando está en grados.
tan, bronceado Tangente Toma la tangente de un ángulo. La función tan supone que el operando está en radianes, mientras que la función tand supone que el operando está en grados.
Sinh seno hiperbólico Toma el seno hiperbólico de su operando.
Cosh coseno hiperbólico Toma el coseno hiperbólico de su operando.
Tanh tangente hiperbólica Toma la tangente hiperbólica de su operando.
Asin seno inverso Toma el seno inverso de su operando.
Acos coseno inverso Toma el coseno inverso de su operando.
atan tangente inversa Toma la tangente inversa de su operando.

Las funciones binarias que requieren operandos de punto flotante se enumeran en la tabla siguiente. Cuando los tipos de operando no son los mismos, los operandos se promueven a un tipo adecuado. El tipo de resultado es el mismo que el tipo de operando promocionado. Un valor de operando NA genera NA.

Nombre Significado Comentarios
Registro logaritmo con base dada El segundo operando es la base. El primero es el valor del que se va a tomar el logaritmo.
atan2, atanyx determinar el ángulo Determina el ángulo entre -pi y pi de los valores y y y x especificados. Tenga en cuenta que y es el primer operando.

Las funciones de texto se enumeran en la tabla siguiente.

Nombre Significado Comentarios
len(x) longitud del texto El operando debe ser texto. El resultado es un I4 que indica la longitud del operando. Si el operando es NA, el resultado es NA.
lower(x), upper(x) minúsculas o mayúsculas Asigna el texto a mayúsculas o minúsculas.
left(x, k), right(x, k) Subcadena El primer operando debe ser texto y el segundo debe ser Int32. Si el segundo operando es negativo, se trata como un desplazamiento desde el final del texto. A continuación, este índice ajustado se sujeta a 0 a len(x). El resultado es los caracteres situados a la izquierda o a la derecha de la posición resultante.
mid(x, a, b) Subcadena El primer operando debe ser texto y los otros dos operandos deben ser Int32. Los índices se transforman de la misma manera que para las funciones izquierda y derecha: los valores negativos se tratan como desplazamientos desde el final del texto; estos índices ajustados se sujetan a 0 a len(x). El segundo índice abrazado también se sujeta debajo al primer índice abrazado. El resultado es los caracteres entre estos dos índices abrazados.
concat(x1, x2, ..., xn) Concatenación Esto acepta un número arbitrario de operandos (incluido cero). Todos los operandos deben ser texto. El resultado es la concatenación de todos los operandos, en orden.

Métodos

Fit(IDataView)

Este estimador aplica una expresión proporcionada por el usuario (especificada como cadena) a los valores de columna de entrada para generar nuevos valores de columna de salida.

GetOutputSchema(SchemaShape)

Este estimador aplica una expresión proporcionada por el usuario (especificada como cadena) a los valores de columna de entrada para generar nuevos valores de columna de salida.

Métodos de extensión

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

Anexe un "punto de control de almacenamiento en caché" a la cadena del estimador. Esto garantizará que los estimadores de nivel inferior se entrenarán con los datos almacenados en caché. Resulta útil tener un punto de control de almacenamiento en caché antes de que los instructores tomen varios pases de datos.

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

Dado un estimador, devuelva un objeto de ajuste que llamará a un delegado una vez Fit(IDataView) que se llame. A menudo, es importante que un estimador devuelva información sobre lo que cabe, por lo que el Fit(IDataView) método devuelve un objeto con tipo específico, en lugar de simplemente un general ITransformer. Sin embargo, al mismo tiempo, IEstimator<TTransformer> a menudo se forman en canalizaciones con muchos objetos, por lo que es posible que tengamos que crear una cadena de estimadores a través EstimatorChain<TLastTransformer> de donde el estimador para el que queremos obtener el transformador está enterrado en algún lugar de esta cadena. En ese escenario, podemos a través de este método adjuntar un delegado al que se llamará una vez que se llame a fit.

Se aplica a

Consulte también