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 は、出力列名パラメーターで指定された という名前の新しい列を作成します。ここで、式は入力値に適用されます。 入力列の最大 1 つは VectorDataViewType 型で、入力にベクター列が含まれている場合、式はベクターの各要素で独立して計算され、その入力と同じ長さのベクター出力が作成されます。

式言語

式推定器の言語は、幅広いユーザーにとって快適である必要があります。 これは、いくつかの一般的な言語と多くの類似点を共有しています。 大文字と小文字が区別され、複数の型がサポートされ、豊富な演算子と関数のセットがあります。 言語に変更可能な値や変更操作が存在しないという意味では、純粋な機能です。 通常の値が適切でない場合に NA 値を生成する代わりに、例外メカニズムも必要もありません。 静的に型指定されますが、すべての型はコンパイラによって推論されます。

構文

ラムダの構文は、パラメーター リストの後にコロン (:)または矢印 (=>) の後に式が続く形式で構成されます。 パラメーター リストには、1 つの識別子、またはかっこで囲まれた 1 つ以上の識別子のコンマ区切りのリストを指定できます。

ラムダ:

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

parameter-list:

  • identifier
  • (parameter-names)

parameter-names:

  • identifier
  • identifier , parameter-names

式では、パラメーター、リテラル、演算子、with-expressions、および関数を使用できます。

リテラル

  • ブールリテラルは true と false です。
  • 整数リテラルは、10 進数または 16 進数 (例: 0x1234ABCD) にすることができます。 これらは、u または U でサフィックスを付けることができ、符号なしを示し、l または L は long (Int64) を示します。 U または U の使用はまれであり、特定の 32 ビットの 16 進値の昇格にのみ影響し、定数が負の Int32 値と見なされるか、正の Int64 値と見なされるかが判断されます。
  • 浮動小数点リテラルでは、指数表記 (123.45e-37) を含む標準構文が使用されます。 F または F のサフィックスを付け、単精度を示すか、d または D を付け、倍精度を示すことができます。 C# とは異なり、浮動小数点リテラルの既定の有効桁数は単精度です。 倍精度を指定するには、d または D を追加します。
  • テキスト リテラルは二重引用符で囲まれており、標準のエスケープ メカニズムをサポートします。

演算子

式言語の演算子を次の表に示します。前置順に示します。 特に記載がない限り、二項演算子は結合されたままであり、NA 値を伝達します (どちらかのオペランド値が NA の場合、結果は NA になります)。 一般に、整数値のオーバーフローは NA を生成し、浮動小数点値のオーバーフローは無限大を生成します。

[オペレーター] 意味 アリティ コメント
​? : 条件 付き 三 項 式の条件は ? value1 : 条件が true の場合は value1 に解決され、condition が false の場合は value2 に解決されます。 条件はブール値である必要があり、value1 と value2 は互換性のある型である必要があります。
​?? 合体 バイナリ 式 x ?? x が NA でない場合は y は x に解決され、それ以外の場合は y に解決されます。 オペランドは、単精度浮動小数点型 (Singles) または Doubles の両方である必要があります。 この演算子は右結合です。
| |または logical または バイナリ オペランドと結果はブール値です。 1 つのオペランドが true の場合、結果は true、それ以外の場合は false になります。
&& と logical と バイナリ オペランドと結果はブール値です。 1 つのオペランドが false の場合、結果は false になり、それ以外の場合は true になります。
​==, =
!=, <>
<、 <=
>、 >=
equals
等しくない
以下
以上
複数 - 比較演算子はマルチアリティです。つまり、2 つ以上のオペランドに適用できます。 たとえば、a、b、c の値が同じである場合、== b == c は true になります。 等しくない演算子では、すべてのオペランドが個別である必要があるため、1 != 2 != 1 は false です。 x が負でないが 10 未満であるかどうかをテストするには、0 <= x < 10 を使用します。 0 <= x && < x 10 を書く必要はなく、そのようにしてもパフォーマンスは向上しません。 同じ行にリストされている演算子は 1 つの式で組み合わせることができるため > 、b >= c は有効ですが < 、b >= c は有効ではありません。
- 等しいと等しくないは任意のオペランド型に適用されますが、順序付けられた演算子には数値オペランドが必要です。
​+ - 加算と減算 バイナリ NA 伝達を使用した数値の加算と減算。
​* / % 乗算、除算、および剰余 バイナリ NA 伝達を使用した数値乗算、除算、および剰余。
​- ! not 数値否定と論理否定 単 項 これらは単項プレフィックス演算子であり、数値オペランドを必要とする否定 (-) であり、ブールオペランドを必要とする (!) ではありません。
​^ 電源 バイナリ これは正しい連想指数です。 数値オペランドが必要です。 整数オペランドの場合、0^0 は 1 を生成します。
​( ) かっこで囲まれたグループ化 単 項 標準の意味。

With 式

with-expression の構文は次のとおりです。

with-expression:

  • with( assignment-list ; expression )

assignment-list:

  • 割り当て
  • assignment , assignment-list

割り当て:

  • identifier =

with-expression には、1 つ以上の名前付き値が導入されています。 たとえば、次の式は、セルシウス温度を華氏に変換し、華氏が低すぎるか高すぎるかに基づいてメッセージを生成します。

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

1 つの代入の式は、メッセージの代わりに -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)

これにより、標準の .Net DateTime エポック (理想的なグレゴリオ暦では 01/01/0001) 以降のティック数 (Int64 として) から曜日が計算されます。 割り当ては、秒単位のティック数、1 時間あたりのティック数、1 年のティック数、エポックの曜日に使用されます。 この例では、日曜日を 0 にマップするため、エポックは月曜日であるため、dayEpoch を 1 に設定します。 エポックが変更された場合、または別の曜日を 0 にマップする場合は、単に dayEpoch を変更します。 ticksPerSecond は 10000000L として定義され、Int64 値 (8 バイト整数) になります。 L サフィックスがない場合、ticksPerDay は Int32 の範囲をオーバーフローします。

関数

式変換では、多くの便利な関数がサポートされています。

任意の型のオペランドを受け取ることができる一般的な単項関数を次の表に示します。

名前 意味 コメント
isna na のテスト オペランドが NA 値かどうかを示すブール値を返します。
Na na 値 オペランドと同じ型 (float または double) の NA 値を返します。 これはオペランドを評価せず、オペランドのみを使用して返される NA の型を決定し、コンパイル時に決定が行われることに注意してください。
既定 既定値 オペランドと同じ型の既定値を返します。 たとえば、NA 値を既定値にマップするには、x ?? を使用します。 default(x)。 これはオペランドを評価せず、オペランドを使用して返される既定値の型のみを決定し、コンパイル時に決定が行われることに注意してください。 数値型の場合、既定値は 0 です。 ブール値の場合、既定値は false です。 テキストの場合、既定値は空です。

単項変換関数を次の表に示します。 NA オペランドは NA を生成し、型でサポートされていない場合は をスローします。 変換が成功しない、またはオーバーフローすると、NA または例外も発生します。 この最も一般的なケースは、標準の変換解析を使用するテキストから変換する場合です。 浮動小数点値 (float または double) から整数値 (Int32 または Int64) に変換する場合、変換では切り捨て操作が実行されます (ゼロに丸められます)。

名前 意味 コメント
Bool ブール値に変換する オペランドはテキストまたはブール値である必要があります。
Int に変換する Int32 入力には任意の型を指定できます。
長い に変換する Int64 入力には任意の型を指定できます。
単一、float に変換する Single 入力には任意の型を指定できます。
ダブル に変換する Double 入力には任意の型を指定できます。
テキスト テキストに変換する 入力には任意の型を指定できます。 これにより、既定のテキスト表現が生成されます。

数値オペランドを必要とする単項関数を次の表に示します。 結果の型はオペランド型と同じです。 NA オペランド値は NA を生成します。

名前 意味 コメント
Abs 絶対値 オペランドの絶対値を生成します。
署名 sign (-1, 0, 1) オペランドが負、ゼロ、または正のいずれであるかに応じて、-1、0、または 1 を生成します。

数値オペランドを必要とするバイナリ関数を次の表に示します。 オペランド型が同じでない場合、オペランドは適切な型に昇格されます。 結果の型は、昇格されたオペランド型と同じです。 NA オペランド値は NA を生成します。

名前 意味 コメント
最小 オペランドの最小値を生成します。
最大 maximum オペランドの最大値を生成します。

浮動小数点オペランドを必要とする単項関数を次の表に示します。 結果の型はオペランド型と同じです。 Overflow は無限大を生成します。 入力値が無効な場合、NA が生成されます。

名前 意味 コメント
Sqrt 平方根 負のオペランドは NA を生成します。
trunc、truncate 整数に切り捨てる 0 に丸め、最も近い整数値に切り上げます。
負の無限大に向かって、最も近い整数値に丸めます。
ceil, 天井 天井 正の無限大に向かって、最も近い整数値に丸めます。
ラウンド 偏りのない丸め 最も近い整数値に丸めます。 オペランドが 2 つの整数値の中間にある場合、偶数の整数が生成されます。
Exp 指数 オペランドに e を発生させます。
ln、log 対数 自然 (底 e) の対数を生成します。 別のベースを使用するためのログの 2 つのオペランド バージョンもあります。
deg、degrees ラジアンから度 ラジアンから度にマップします。
rad、radians degrees から ラジアン 度からラジアンへのマップ。
sin, sind 正弦 角度のサインを取ります。 sin 関数はオペランドがラジアンで、sind 関数はオペランドが度数であると仮定します。
cos, cosd コサイン 角度のコサインを取ります。 cos 関数はオペランドがラジアンで、cosd 関数はオペランドが度数であると仮定します。
tan、tand 接線 角度のタンジェントを受け取ります。 tan 関数はオペランドがラジアンで、tand 関数はオペランドが度数であると仮定します。
Sinh 双曲線サイン オペランドの双曲線サインを受け取ります。
Cosh 双曲線コサイン オペランドの双曲線余弦を受け取ります。
Tanh 双曲線正接 オペランドの双曲線正接を受け取ります。
Asin 逆サイン オペランドの逆サインを受け取ります。
Acos 逆コサイン オペランドの逆コサインを受け取ります。
Atan 逆正接 オペランドの逆正接を受け取ります。

浮動小数点オペランドを必要とするバイナリ関数を次の表に示します。 オペランド型が同じでない場合、オペランドは適切な型に昇格されます。 結果の型は、昇格されたオペランド型と同じです。 NA オペランド値は NA を生成します。

名前 意味 コメント
ログ 指定された底を持つ対数 2 番目のオペランドはベースです。 1 つ目は、 の対数を取る値です。
atan2、atanyx 角度を決定する 指定した y 値と x 値から -pi と pi の間の角度を決定します。 y は最初のオペランドであることに注意してください。

テキスト関数を次の表に示します。

名前 意味 コメント
len(x) テキストの長さ オペランドはテキストである必要があります。 結果は、オペランドの長さを示す I4 になります。 オペランドが NA の場合、結果は NA になります。
lower(x)、upper(x) 小文字または大文字 テキストを小文字または大文字にマップします。
left(x, k), right(x, k) サブスト リング 1 番目のオペランドは text で、2 番目のオペランドは Int32 である必要があります。 2 番目のオペランドが負の場合、テキストの末尾からのオフセットとして扱われます。 この調整されたインデックスは、0 から len(x) にクランプされます。 結果は、結果の位置の左または右の文字になります。
mid(x, a, b) サブスト リング 最初のオペランドはテキストで、残りの 2 つのオペランドは Int32 である必要があります。 インデックスは、左関数と右関数の場合と同じ方法で変換されます。負の値はテキストの末尾からのオフセットとして扱われます。これらの調整されたインデックスは、0 から len(x) にクランプされます。 2番目のクランプインデックスは、最初のクランプインデックスに以下にクランプされます。 結果は、これら 2 つのクランプされたインデックスの間の文字です。
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 が呼び出されると呼び出されるデリゲートをアタッチできます。

適用対象

こちらもご覧ください