ExpressionEstimator Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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. |