Поделиться через


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.

Применяется к

См. также раздел