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
- Реализации
Комментарии
Характеристики оценки
| Должен ли этот оценщик просмотреть данные для обучения его параметров? | No |
| Тип данных входного столбца | float, double, int, long, bool или text. |
| Тип данных выходного столбца | Может быть float, double, int, long, bool или text, в зависимости от выражения. |
Результирующий expressionTransformer создает новый столбец с именем, указанным в параметрах имени выходного столбца, где выражение применяется к входным значениям. В большинстве входных столбцов может быть тип VectorDataViewType, и если входные данные содержат векторный столбец, выражение вычисляется независимо от каждого элемента вектора, чтобы создать векторные выходные данные с той же длиной, что и входные данные.
Язык выражений
Язык оценки выражений должен быть удобным для широкого круга пользователей. Он разделяет множество сходств с некоторыми популярными языками. Он учитывает регистр, поддерживает несколько типов и имеет широкий набор операторов и функций. Это чисто функционально, в том смысле, что в языке отсутствуют изменяемые значения или мутирующие операции. Он не имеет никакого механизма исключения, а не создает значения NA, если нормальное значение не подходит. Он статически типизированный, но все типы выводятся компилятором.
Синтаксис
Синтаксис лямбда-кода состоит из списка параметров, за которым следует двоеточие (:) или стрелка (=>), за которым следует выражение. Список параметров может быть одним идентификатором или разделенным запятыми списком одного или нескольких идентификаторов, окруженных скобками.
лямбда::
- список параметров : выражение
- параметр-list => выражение
параметр-list:
- идентификатор
- (имена параметров)
имена параметров:
- идентификатор
- идентификатор , имена параметров
Выражение может использовать параметры, литералы, операторы, выражения с выражениями и функции.
Literals
- Логические литералы являются истинными и ложными.
- Целые литералы могут быть десятичными или шестнадцатеричными (например, 0x1234ABCD). Они могут быть суффиксированы с вами или U, указывая без знака, а также l или L, указывая длину (Int64). Использование вас или U редко и влияет только на повышение определенных 32-разрядных шестнадцатеричных значений, определяющее, считается ли константа отрицательным значением Int32 или положительным значением Int64.
- Литералы с плавающей запятой используют стандартный синтаксис, включая экспоненциальную нотацию (123.45e-37). Они могут быть суффиксированы с f или F, указывая одну точность или d или D, указывающую двойную точность. В отличие от C#, точность по умолчанию литерала с плавающей запятой является одной точностью. Чтобы указать двойную точность, добавьте d или D.
- Текстовые литералы заключены в двойные кавычки и поддерживают стандартные механизмы escape-обхода.
Operators
Операторы языка выражений перечислены в следующей таблице в порядке подготовки. Если не указано иное, двоичные операторы остаются ассоциативными и распространяют значения NA (если одно из операндов равно NA, результатом является NA). Как правило, переполнение целых значений создает значение NA, а переполнение значений с плавающей запятой приводит к бесконечности.
| Оператор | Meaning | Arity | Comments |
|---|---|---|---|
| ? : | условный | Тернарий | Условие выражения ? value1: value2 разрешает значение value1, если условие имеет значение true и значение2, если условие равно false. Условие должно быть логическим, а значение1 и значение2 должны иметь совместимый тип. |
| ?? | объединение | Двоичный файл | Выражение x ?? y разрешается в x, если x не является na, и разрешает значение y в противном случае. Операнды должны быть как синглами, так и обоими двойными. Этот оператор является правильным ассоциативным. |
| | | или | логические или | Двоичный файл | Операнды и результат являются логическими. Если один операнд имеет значение true, результат имеет значение true, в противном случае — значение false. |
| && и | логические и | Двоичный файл | Операнды и результат являются логическими. Если один операнд имеет значение false, результат имеет значение false, в противном случае — значение true. |
| ==, = !=, <> <, <= >, >= |
Равно не равно меньше или равно больше или равно |
Несколько | — Операторы сравнения являются многоармиями, то есть они могут применяться к двум или нескольким операндам. Например, a == b == c приводит к значению true, если a, b и c имеют то же значение. Оператор не равный требует, чтобы все операнды были разными, поэтому 1 != 2 != 1 имеет значение false. Чтобы проверить, является ли x не отрицательным, но менее 10, используйте 0 <= x < 10. Нет необходимости писать 0 <= x &&x < 10, и делать это не будет также. Операторы, перечисленные в одной строке, могут объединяться в одном выражении, поэтому > b >= c является законным, но b >< = c не является. — Равные и не равные применяются к любому типу операнда, а упорядоченные операторы требуют числовых операндов. |
| + - | добавление и вычитание | Двоичный файл | Числовое добавление и вычитание с распространением NA. |
| * / % | умножение, деление и модулы | Двоичный файл | Числовое умножение, деление и модулу с распространением NA. |
| - ! not | числовое отрицание и логические не | Унарный | Это унарные операторы префикса, отрицание (-), требующее числового операнда, а не (!), требующего логического операнда. |
| ^ | питание | Двоичный файл | Это правильное ассоциативное экспонентация. Для него требуются числовые операнды. Для целых операндов 0^0 производится 1. |
| ( ) | группирование с скобками | Унарный | Стандартное значение. |
Выражение с выражением
Синтаксис выражения with-expression:
with-expression:
- with( assignment-list ; expression )
assignment-list:
- задание
- назначение , список назначений
назначение:
- выражение идентификатора =
Выражение with вводит одно или несколько именованных значений. Например, следующее выражение преобразует температуру celcius в 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))
Как показано выше, выражение с выражением полезно при необходимости несколько раз в большем выражении. Это также полезно при работе с сложными или значительными константами:
ticks => with(
ticksPerSecond = 10000000L,
ticksPerHour = ticksPerSecond \* 3600,
ticksPerDay = ticksPerHour \* 24,
day = ticks / ticksPerDay,
dayEpoch = 1 ;
(day + dayEpoch) % 7)
Это вычисляет день недели от числа галок (как Int64) с стандартной эпохи .Net DateTime (01/01/0001 в идеализованном григорианском календаре). Назначения используются для числа клещей в секунду, количество клещей в час, количество клещей в год, а также день недели для эпохи. В этом примере мы хотим сопоставить воскресенье с нулем, поэтому, так как эпоха является понедельником, мы устанавливаем dayEpoch на 1. Если эпоха была изменена или мы хотели сопоставить другой день недели с нулем, мы просто изменим деньEpoch. Обратите внимание, что ticksPerSecond определяется как 100000000L, чтобы сделать его значение int64 (8 байтового целого числа). Без суффикса L ticksPerDay переполняет диапазон Int32.
Functions
Преобразование выражения поддерживает множество полезных функций.
Общие унарные функции, которые могут принимать операнду любого типа, перечислены в следующей таблице.
| Имя | Значение | Комментарии |
|---|---|---|
| isna | тест для na | Возвращает логическое значение, указывающее, является ли операнда значением NA. |
| na | значение na | Возвращает значение NA того же типа, что и операнд (с плавающей или двойной). Обратите внимание, что это не вычисляет операнду, он использует операнду только для определения типа возвращаемого НС, и это определение происходит во время компиляции. |
| по умолчанию | значение по умолчанию | Возвращает значение по умолчанию того же типа, что и операнды. Например, чтобы сопоставить значения NA со значениями по умолчанию, используйте x ?? default(x). Обратите внимание, что это не вычисляет операнду, он использует операнду только для определения типа возвращаемого значения по умолчанию, и это определение происходит во время компиляции. Для числовых типов значение по умолчанию равно нулю. Для логического значения значение по умолчанию равно false. Для текста значение по умолчанию пусто. |
Функции унарного преобразования перечислены в следующей таблице. Операнд NA создает НС или создает исключение, если тип не поддерживает его. Преобразование, которое не выполняется, или переполнение также приводит к НС или исключению. Наиболее распространенным случаем этого является преобразование из текста, которое использует стандартный анализ преобразования. При преобразовании из значения с плавающей запятой (float или double) в целочисленное значение (Int32 или Int64) преобразование выполняет операцию усечения (округление к нулю).
| Имя | Значение | Комментарии |
|---|---|---|
| bool | преобразование в логический | Операнд должен быть текстом или логическим. |
| int | преобразование в Int32 | Входные данные могут быть любого типа. |
| длинный | преобразование в Int64 | Входные данные могут быть любого типа. |
| single, float | преобразование в Single | Входные данные могут быть любого типа. |
| double | преобразование в Double | Входные данные могут быть любого типа. |
| текст | преобразование в текст | Входные данные могут быть любого типа. Это создает текстовое представление по умолчанию. |
Унарные функции, требующие числовых операндов, перечислены в следующей таблице. Тип результата совпадает с типом операнда. Значение операнда NA создает NA.
| Имя | Значение | Комментарии |
|---|---|---|
| abs | абсолютное значение | Создает абсолютное значение операнда. |
| знак | знак (-1, 0, 1) | Производит значение -1, 0 или 1 в зависимости от того, является ли операнд отрицательным, нулевым или положительным. |
Двоичные функции, требующие числовых операндов, перечислены в следующей таблице. Если типы операндов не совпадают, операнды повышаются до соответствующего типа. Тип результата совпадает с типом продвигаемого операнда. Значение операнда NA создает NA.
| Имя | Значение | Комментарии |
|---|---|---|
| min | минимальное значение | Создает минимум операндов. |
| макс. | максимум | Создает максимум операндов. |
Унарные функции, требующие операнда с плавающей запятой, перечислены в следующей таблице. Тип результата совпадает с типом операнда. Переполнение производит бесконечность. Недопустимые входные значения создают NA.
| Имя | Значение | Комментарии |
|---|---|---|
| sqrt | квадратный корень | Отрицательные операнды производят NA. |
| усечение, усечение | усечение в целое число | Округляется до нуля до ближайшего целого значения. |
| пол | пол | Округляется к отрицательной бесконечности до ближайшего целочисленного значения. |
| ceil, потолок | потолок | Округляется к положительному бесконечности до ближайшего целочисленного значения. |
| раунд | беспристрастное округление | Округляет до ближайшего целочисленного значения. Если операнд находится на полпути между двумя целыми значениями, это создает даже целое число. |
| exp | экспоненциальный | Поднимает e к операнду. |
| ln, log | логарифм | Создает естественный (базовый e) логарифм. Существует также две версии журнала операнда для использования другой базы. |
| deg, градусы | радианы в градусах | Карты от радианов к градусам. |
| rad, радианы | градусы радианам | Карты от градусов к радианам. |
| грех, грех | синус | Принимает синус угла. Функция греха предполагает, что операнд находится в радианах, в то время как греховная функция предполагает, что операнда находится в градусах. |
| cos, cosd | cosine | Принимает косинус угла. Функция cos предполагает, что операнд находится в радианах, а функция cosd предполагает, что операнд находится в градусах. |
| tan, tand | тангенс | Принимает тангенс угла. Функция загар предполагает, что операнду находится в радианах, а функция танда предполагает, что операнд находится в градусах. |
| синх | гиперболический синус | Принимает гиперболический синус своего операнда. |
| cosh | гиперболический косинус | Принимает гиперболический косин своего операнда. |
| танх | гиперболический тангенс | Принимает гиперболический тангенс своего операнда. |
| asin | инверсный синус | Принимает обратный синус своего операнда. |
| acos | обратная косинус | Принимает обратный косин своего операнда. |
| atan | инверсный тангенс | Принимает обратный тангенс своего операнда. |
Двоичные функции, требующие операндов с плавающей запятой, перечислены в следующей таблице. Если типы операндов не совпадают, операнды повышаются до соответствующего типа. Тип результата совпадает с типом продвигаемого операнда. Значение операнда NA создает NA.
| Имя | Значение | Комментарии |
|---|---|---|
| журнал | логарифм с заданной базой | Второй операнд является базой. Первое — это значение для принятия логарифма. |
| 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> того, где оценка, для которой мы хотим получить преобразователь, похоронен где-то в этой цепочке. В этом сценарии мы можем подключить делегат, который будет вызываться после вызова. |