ExpressionEstimator Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Этот оценщик применяет предоставленное пользователем выражение (указанное в виде строки) к входным значениям столбца для создания новых значений выходных столбцов.
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)
- Наследование
-
ExpressionEstimator
- Реализации
Комментарии
Характеристики оценщика
Требуется ли этому оценщику просмотреть данные для обучения его параметров? | Нет |
Тип данных входного столбца | float, double, int, long, bool или text. |
Тип данных выходного столбца | В зависимости от выражения может иметь значение float, double, int, long, bool или text. |
Результирующий ExpressionTransformer создает новый столбец с именем, указанным в параметрах имени выходного столбца, где выражение применяется к входным значениям. Не более одного из входных столбцов может иметь тип VectorDataViewType, а если входные данные содержат векторный столбец, выражение вычисляется независимо для каждого элемента вектора для создания векторных выходных данных с той же длиной, что и входные данные.
Язык выражений
Язык оценщика выражений должен быть удобным для широкого круга пользователей. Он имеет много общего с некоторыми популярными языками. Он учитывает регистр, поддерживает несколько типов и имеет широкий набор операторов и функций. Она является чисто функциональной в том смысле, что в языке нет изменяемых значений или изменяемых операций. Он не имеет и не нуждается в каком-либо механизме исключения, вместо этого создает значения NA, если нормальное значение не подходит. Он является статически типизированным, но все типы выводятся компилятором.
Синтаксис
Синтаксис лямбда-выражения состоит из списка параметров, за которым следует двоеточие (:) или стрелка (=>), за которой следует выражение. Список параметров может быть либо одним идентификатором, либо разделенным запятыми списком из одного или нескольких идентификаторов, окруженных круглыми скобками.
Лямбда:
- parameter-list : expression
- parameter-list => expression
список-параметров:
- identifier
- (parameter-names)
parameter-names:
- identifier
- identifier , parameter-names
Выражение может использовать параметры, литералы, операторы, выражения with и функции.
Литералы
- Логические литералы имеют значение true и false.
- Целочисленные литералы могут быть десятичными или шестнадцатеричными (например, 0x1234ABCD). Они могут иметь суффиксы you или U, обозначающие неподписанный знак, а также l или L, обозначающие long (Int64). Вы или U используется редко и влияет только на повышение определенных 32-разрядных шестнадцатеричных значений, определяя, считается ли константа отрицательным значением Int32 или положительным значением Int64.
- Литералы с плавающей запятой используют стандартный синтаксис, включая экспоненциальную нотацию (123,45e-37). Они могут быть обозначены суффиксами f или F, обозначающими однократную точность, или d или D, обозначающие двойную точность. В отличие от C#, по умолчанию точность литерала с плавающей запятой — одна точность. Чтобы указать двойную точность, добавьте d или D.
- Текстовые литералы заключаются в двойные кавычки и поддерживают стандартные escape-механизмы.
Операторы
Операторы языка выражений перечислены в следующей таблице в порядке предопределенности. Если не указано иное, бинарные операторы остаются ассоциативными и распространяют значения NA (если одно из значений операнда — NA, результатом является NA). Как правило, переполнение целочисленных значений приводит к НС, а переполнение значений с плавающей запятой — к бесконечности.
Оператор | Значение | Арность | Комментарии |
---|---|---|---|
? : | Условного | Троичный | Условие выражения ? value1 : значение2 разрешается в значение1, если условие имеет значение true, и в значение2, если условие имеет значение false. Условие должно быть логическим, а значения value1 и value2 должны иметь совместимый тип. |
?? | Coalesce | Двоичном | Выражение x ?? y разрешается в x, если x не является NA, и разрешается в y в противном случае. Операнды должны быть как singles, так и doubles. Этот оператор имеет правую ассоциативность. |
| | Или | логическая или | Двоичном | Операнды и результат являются логическими. Если один операнд имеет значение true, результат равен true, в противном случае — false. |
&& и | логические и | Двоичном | Операнды и результат являются логическими. Если один операнд имеет значение false, результат — false, в противном случае — true. |
==, = !=, <> <, <= >, >= |
equals (равно) не равно меньше или равно больше или равно |
Несколько | — Операторы сравнения являются многоарифмными, то есть их можно применять к двум или более операндам. Например, значение == b == c приводит к значению true, если a, b и c имеют одинаковое значение. Оператор not equal требует, чтобы все операнды были разными, поэтому 1 != 2 != 1 имеет значение false. Чтобы проверить, не является ли x отрицательным, но меньше 10, используйте 0 <= x < 10. Нет необходимости писать 0 <= x && x < 10, и это не будет работать так же. Операторы, перечисленные в одной строке, можно объединить в одном выражении, поэтому > b >= c является допустимым < , а b >= c — нет. — равно и не равно применяется к любому типу операнда, в то время как упорядоченные операторы требуют числовых операндов. |
+ - | сложение и вычитание | Двоичном | Числовое сложение и вычитание с распространением НС. |
* / % | умножение, деление и модуль | Двоичном | Числовое умножение, деление и модуль с распространением НС. |
- ! not | числовое отрицание и логическое не | Унарные | Это унарные префиксные операторы, для отрицания (-) требуется числовой операнд, а не (!), требующий логического операнда. |
^ | Мощность | Двоичном | Это правильная ассоциативная экспоненциация. Для этого требуются числовые операнды. Для целочисленных операндов 0^0 приводит к 1. |
( ) | группирование скобок | Унарные | Стандартное значение. |
Выражение With
Синтаксис выражения with-expression имеет следующий вид:
with-expression:
- with( assignment-list ; expression )
assignment-list:
- назначение
- assignment , assignment-list
Назначения:
- выражение идентификатора =
Выражение with вводит одно или несколько именованных значений. Например, следующее выражение преобразует температуру celcius в значение fahrenheit, а затем создает сообщение в зависимости от того, слишком низкая или высокая ли температура по fahrenheit.
c => with(f = c * 9 / 5 + 32 ; f < 60 ? "Too Cold!" : f > 90 ? "Too Hot!" : "Just Right!")
Выражение для одного назначения может ссылаться на идентификаторы, введенные предыдущими назначениями, как в этом примере, который возвращает -1, 0 или 1 вместо сообщений:
c : with(f = c * 9 / 5 + 32, cold = f < 60, hot = f > 90 ; -float(cold) + float(hot))
Как показано выше, аргумент with-expression полезен, если значение выражения требуется несколько раз в большем выражении. Это также полезно при работе со сложными или значительными константами:
ticks => with(
ticksPerSecond = 10000000L,
ticksPerHour = ticksPerSecond \* 3600,
ticksPerDay = ticksPerHour \* 24,
day = ticks / ticksPerDay,
dayEpoch = 1 ;
(day + dayEpoch) % 7)
При этом день недели вычисляется на основе количества тактов (int64) со времени стандартной эпохи даты и времени .NET (01.01.0001 в идеализованном григорианском календаре). Задания используются для числа тактов в секунду, числа тактов в час, числа тактов в году и дня недели для эпохи. В этом примере мы хотим сопоставить воскресенье с нулем, поэтому, так как эпоха является понедельником, мы задаем значение dayEpoch равным 1. Если эпоха была изменена или мы хотели бы сопоставить другой день недели с нулевым, мы бы просто изменили dayEpoch. Обратите внимание, что ticksPerSecond определяется как 10000000L, чтобы сделать его значением Int64 (8-байтовое целое число). Без суффикса L ticksPerDay переполняет диапазон Int32.
Функции
Преобразование выражений поддерживает множество полезных функций.
Общие унарные функции, которые могут принимать операнды любого типа, перечислены в следующей таблице.
Имя | Смысл | Комментарии |
---|---|---|
isna | test for na | Возвращает логическое значение, указывающее, является ли операнд значением NA. |
Na | значение na | Возвращает значение na того же типа, что и операнд (float или double). Обратите внимание, что при этом не вычисляется операнд, а используется только для определения возвращаемого типа НС, и это определение происходит во время компиляции. |
По умолчанию | значение по умолчанию | Возвращает значение по умолчанию того же типа, что и операнд. Например, чтобы сопоставить значения НС со значениями по умолчанию, используйте x ?? default(x). Обратите внимание, что при этом не вычисляется операнд, а используется только для определения типа возвращаемого значения по умолчанию, и это определение происходит во время компиляции. Для числовых типов значение по умолчанию равно нулю. Для логического значения значение по умолчанию — false. Для текста значение по умолчанию пусто. |
Унарные функции преобразования перечислены в следующей таблице. Операнд НС создает НС или выдает исключение, если тип не поддерживает его. Преобразование, которое не завершается успешно, или переполнение также приводит к НД или исключению. Чаще всего это происходит при преобразовании из текста, в котором используется стандартный анализ преобразования. При преобразовании значения с плавающей запятой (float или double) в целочисленное значение (Int32 или Int64) преобразование выполняет операцию усечения (округление к нулю).
Имя | Смысл | Комментарии |
---|---|---|
Bool | преобразование в логическое значение | Операнд должен быть текстовым или логическим. |
Int | преобразовать в Int32 | Входные данные могут иметь любой тип. |
Длинные | преобразовать в Int64 | Входные данные могут иметь любой тип. |
одинарный, float | преобразовать в Single | Входные данные могут иметь любой тип. |
Двухместный | преобразовать в Double | Входные данные могут иметь любой тип. |
Текст | преобразование в текст | Входные данные могут иметь любой тип. При этом создается текстовое представление по умолчанию. |
Унарные функции, которым требуется числовой операнд, перечислены в следующей таблице. Тип результата совпадает с типом операнда. Значение операнда НС создает значение НС.
Имя | Смысл | Комментарии |
---|---|---|
Abs | абсолютное значение | Создает абсолютное значение операнда. |
Знак | знак (-1, 0, 1) | Возвращает значение -1, 0 или 1 в зависимости от того, является ли операнд отрицательным, нулевым или положительным. |
Двоичные функции, которым требуются числовые операнды, перечислены в следующей таблице. Если типы операндов не совпадают, операнды повышаются до соответствующего типа. Тип результата совпадает с типом операнда с повышенным значением. Значение операнда НС создает значение НС.
Имя | Смысл | Комментарии |
---|---|---|
Мин | Минимальный | Создает минимум операндов. |
Макс | maximum | Создает максимум операндов. |
Унарные функции, которым требуется операнд с плавающей запятой, перечислены в следующей таблице. Тип результата совпадает с типом операнда. Переполнение производит бесконечность. Недопустимые входные значения создают НД.
Имя | Смысл | Комментарии |
---|---|---|
Sqrt | квадратный корень | Отрицательные операнды создают НС. |
усечение, усечение | усечение до целого числа | Округляет к нулю до ближайшего целочисленного значения. |
Этаже | Этаже | Округляет в сторону отрицательной бесконечности до ближайшего целочисленного значения. |
ceil, потолок | Потолка | Округляет к положительной бесконечности до ближайшего целочисленного значения. |
Круглый | беспристрастное округление | Округляет до ближайшего целочисленного значения. Если операнд находится на полпути между двумя целыми значениями, создается четное целое число. |
Exp | Экспоненциальной | Вызывает e к операнду. |
ln, log | Логарифм | Создает натуральный (базовый e) логарифм. Существует также две версии операнда журнала для использования разных баз данных. |
градусов, градусов | радианы до градусов | Карты от радианов к градусам. |
rad, радианы | градусов к радианам | Карты от градусов к радианам. |
грех, грех | Синус | Принимает синус угла. Функция sin предполагает, что операнд находится в радианах, а функция sind предполагает, что операнд находится в градусах. |
cos, cosd | Косинус | Принимает косиус угла. Функция cos предполагает, что операнд находится в радианах, а функция cosd предполагает, что операнд находится в градусах. |
tan, tand | Касательной | Принимает тангенс угла. Функция tan предполагает, что операнд находится в радианах, а функция tand предполагает, что операнд находится в градусах. |
Sinh | гиперболический синус | Принимает гиперболический синус своего операнда. |
Cosh | гиперболический косисинус | Принимает гиперболический косиус своего операнда. |
танх | гиперболический тангенс | Принимает гиперболический тангенс операнда. |
Asin | инверсный синус | Принимает обратный синус операнда. |
acos | обратный косисинус | Принимает обратный косиус своего операнда. |
Atan | обратный тангенс | Принимает обратный тангенс операнда. |
Двоичные функции, которым требуются операнды с плавающей запятой, перечислены в следующей таблице. Если типы операндов не совпадают, операнды повышаются до соответствующего типа. Тип результата совпадает с типом операнда с повышенным значением. Значение операнда НС создает значение НС.
Имя | Смысл | Комментарии |
---|---|---|
Журнала | логарифм с заданным основанием | Второй операнд является основанием. Первый — это значение, которое принимает логарифм. |
atan2, atanyx | определение угла | Определяет угол между -pi и pi по заданным значениям y и x. Обратите внимание, что y — это первый операнд. |
Текстовые функции перечислены в следующей таблице.
Имя | Смысл | Комментарии |
---|---|---|
len(x) | длина текста | Операнд должен быть текстом. Результатом будет I4, указывающий длину операнда. Если операнд имеет значение NA, результатом будет NA. |
lower(x), upper(x) | нижний или верхний регистр | Сопоставляет текст с нижним или верхним регистром. |
left(x, k), right(x, k) | Подстроки | Первый операнд должен быть текстовым, а второй — int32. Если второй операнд отрицательный, он рассматривается как смещение от конца текста. Затем этот скорректированный индекс зажимается до 0 до len(x). Результатом являются символы слева или справа от результирующей позиции. |
mid(x, a, b) | Подстроки | Первый операнд должен быть текстовым, а два других операнда — Int32. Индексы преобразуются так же, как и для левой и правой функций: отрицательные значения обрабатываются как смещения от конца текста; эти скорректированные индексы зажимаются до 0 до len(x). Второй зажатый индекс также зажимается ниже первого зажатого индекса. Результатом являются символы между этими двумя зажатыми индексами. |
concat(x1, x2, ..., xn) | Объединения | При этом принимается произвольное количество операндов (включая ноль). Все операнды должны быть текстовыми. Результатом является объединение всех операндов по порядку. |
Методы
Fit(IDataView) |
Этот оценщик применяет предоставленное пользователем выражение (указанное в виде строки) к входным значениям столбца для создания новых значений выходных столбцов. |
GetOutputSchema(SchemaShape) |
Этот оценщик применяет предоставленное пользователем выражение (указанное в виде строки) к входным значениям столбца для создания новых значений выходных столбцов. |
Методы расширения
AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment) |
Добавьте контрольную точку кэширования в цепочку оценщика. Это гарантирует, что подчиненные оценщики будут обучены на основе кэшированных данных. Полезно иметь контрольную точку кэширования перед инструкторами, которые принимают несколько проходов данных. |
WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>) |
Учитывая оценщик, верните объект-оболочку, который будет вызывать делегат после Fit(IDataView) вызова . Оценщику часто важно возвращать сведения о том, что подходит, поэтому Fit(IDataView) метод возвращает объект конкретного типа, а не просто общий ITransformer. Однако, в то же время, IEstimator<TTransformer> часто формируются в конвейеры с большим количеством объектов, поэтому нам может потребоваться построить цепочку оценщиков, где EstimatorChain<TLastTransformer> оценщик, для которого мы хотим получить преобразователь, похоронен где-то в этой цепочке. Для этого сценария с помощью этого метода можно подключить делегат, который будет вызываться после вызова fit. |