回帰モデルを構成

回帰モデルをトレーニング、保存、ロード、およびアンロードします。テキストデータの埋め込みベクトルおよび数字ターゲットデータに基づいてモデルをトレーニングします。

オプション 

  • [処理:] では実行する処理を指定します:

    • [モデルをトレーニング]: 指定されたトレーニングデータおよびアルゴリズムの引数を使用して新しい回帰モデルを作成およびトレーニングします。

    • [モデルを保存]: 後で使用するために、トレーニングされたモデルを [モデルの保存先:] オプションで指定したフィールドまたは変数にオブジェクトデータとして保存します。

    • [モデルをロード]: [モデルの保存先:] オプションで指定したオブジェクトフィールドまたは変数から以前に保存したモデルをメモリにロードします。

    • [モデルをアンロード]: メモリからモデルを取り除いてリソースを解放します。

  • [モデル名:] では [処理:] オプションが処理を実行する回帰モデルの固有の名前のテキスト式を指定します。モデルをトレーニングまたはロードした後、同じ名前でモデルを参照して PredictFromModel 関数で回帰を実行します。

[処理:] が [モデルをトレーニング] の場合にのみ使用できるオプション:

  • [アルゴリズム:] では使用する機械学習アルゴリズムを選択します。バージョン 22.0 では、提供されるアルゴリズムは [ランダムフォレスト] のみです。

  • [ベクトルフィールドをトレーニング] ではトレーニングデータのベクトルを含むテキストまたはオブジェクトフィールドを指定します。

  • [ターゲットフィールドをトレーニング] ではターゲット値 (予測する数値) を含むフィールドを指定します。各値は [ベクトルフィールドをトレーニング] の 1 つのトレーニング例に対応しています。

  • [空または無効なレコードをスキップ] は [ベクトルフィールドをトレーニング] または [ターゲットフィールドをトレーニング] で指定したフィールドが空または無効なデータを含む場合にレコードをスキップします。選択されていない場合、このスクリプトステップは空または無効なフィールドデータを持つ最初のレコードの後のすべてのレコードをスキップしてエラーを返します。

  • [引数:] ではアルゴリズム固有の引数をキーと値のペアとして指定する JSON オブジェクトのテキスト式を指定します。説明を参照してください。

[処理:] が [モデルをトレーニング] または [モデルを保存] の場合にのみ使用できるオプション:

  • [モデルの保存先:] ではトレーニングされたモデルを保存する変数またはオブジェクトフィールドを指定します。

[処理:] が [モデルをロード] の場合にのみ使用できるオプション:

  • [モデルのロード元:] ではトレーニングされたモデルからロードする変数またはオブジェクトフィールドを指定します。

互換性 

製品 サポート
FileMaker Pro はい
FileMaker Go はい
FileMaker WebDirect はい
FileMaker Server はい
FileMaker Cloud はい
FileMaker Data API はい
カスタム Web 公開 はい

起点バージョン 

22.0

説明 

このスクリプトステップを使用すると FileMaker Pro カスタム App 内で機械学習アルゴリズムを使用する回帰モデルを直接トレーニングおよび管理できるようになります。回帰モデルは独立入力変数 (特徴量) に基づいて従属出力変数 (ターゲット) の連続する数値を予測するため、予測、トレンド分析、およびデータ駆動型意思決定に適しています。

ランダムフォレストアルゴリズムは複数の決定木を組み合わせて単一の決定木よりも堅牢で正確な予測を作成するアンサンブル学習方法であり、このアルゴリズムは現実世界のデータに適しています。フォレストの各木はトレーニングデータと特徴量のランダムなサブセットでトレーニングされています。これにより、過剰適合 (トレーニングデータからパターンだけでなくランダムなノイズも取得する) を防いで新しいデータへの一般化を向上させます。

[モデルをトレーニング] 処理を選択した場合、スクリプトステップは次の処理を実行します:

  1. [ベクトルフィールドをトレーニング] でベクトルを解析して特徴値を抽出します。

  2. 指定されたアルゴリズム引数を適用するか、何も指定されていない場合はデフォルト値を使用します。

  3. [ベクトルフィールドをトレーニング] から抽出された特徴値と [ターゲットフィールドをトレーニング] のターゲット値でランダムフォレストアルゴリズムを使用してモデルをトレーニングします。

  4. 指定したモデル名でトレーニングされたモデルをメモリに格納して PredictFromModel 関数で使用します。

  5. [モデルの保存先:] が指定されている場合、後で使用するためにモデルを保存します。

[モデルを保存]、[モデルをロード]、および [モデルをアンロード] 処理を使用すると、トレーニングされたモデルを管理し、必要なときにのみ保存し、パフォーマンスを最適化するために使用中のみメモリに保持することができます。

ランダムフォレストアルゴリズムでは、必要に応じて、[引数:] オプションで次のキーと値を使用してトレーニングを調整できます。キーが指定されていない場合や [引数:] オプションが使用されていない場合、スクリプトステップにはデフォルト値が使用されます。

引数 説明 デフォルト値

numTrees

ランダムフォレストの決定木の数。一般的に木が多いほど精度が向上しますが、トレーニング時間とメモリ使用量が増加します。

10

maxDepth

各決定木の最大の深さ。トレーニング時に木はこの深さに達しない場合があります。木が深いほど複雑なパターンを取得できますが、トレーニングデータに過剰適合するおそれがあります。

10

minSamplesSplit

内部ノードを分割するために必要なサンプルの最小数。値が高いほど過剰適合を防ぐことができます。

2

numFeatures

正の場合、1 つの決定木のトレーニングに使用する可能性のある特徴の合計数 (有効な範囲は 1 ≤ numFeatures < 1536)。負の場合、すべての特徴をトレーニングに使用します。

-1

maxFeatures

1 つの決定木のトレーニングに使用する特徴の最大数:

0: numFeatures
1: Sqrt (numFeatures)
2: log2 (numFeatures)

1

たとえば、この JSON オブジェクトは [引数:] オプションのすべてのキーを設定します:

コピー
{
    "numTrees" : 15,
    "maxDepth" : 15,
    "minSamplesSplit" : 3,
    "numFeatures" : 1000,
    "maxFeatures" : 0
}

メモ 

  • [ベクトルフィールドをトレーニング] の値はテキストフィールドの有効な JSON 配列またはオブジェクトフィールドの同等のバイナリデータとして指定する必要があります。各配列にはすべてのレコードで同じ数の要素 (特徴) が含まれている必要があります。

    [対象レコードに埋め込みを挿入] スクリプトステップを使用すると、入力データを含む別のフィールドに基づいて [ベクトルフィールドをトレーニング] のテキスト埋め込みベクトルを生成できます。[対象レコードに埋め込みを挿入] によって生成された埋め込みベクトルはサポートされているテキスト埋め込みモデルを使用する場合に前述の要件を満たします。

  • [ターゲットフィールドをトレーニング] の値は数字にする必要があります。数字以外の値にするとトレーニングに失敗します。

  • モデル名は大文字と小文字が区別され、現在の FileMaker セッション内で固有である必要があります。トレーニング時に同じ名前のモデルがすでに存在する場合、新しいモデルに置き換えられます。

  • トレーニングしたモデルの精度をテストするには、PredictFromModel 関数を使用してモデルのトレーニングに使用したものと同じベクトルデータを使用して予測値を返します。次に予測値とトレーニング中に使用したターゲット値を比較します。モデルの全体的な精度を測定する方法の 1 つに予測値とターゲット値の平均二乗差を計算する MSE (平均二乗誤差) があります。MSE 値がゼロの場合はモデルの予測値と実際の値が完全に一致していることを示すため、MSE 値が低くなるほど精度は高くなります。モデルの最適な MSE 値はターゲット変数のスケールと特定のアプリケーションの許容誤差マージンによって異なります。MSE を計算するスクリプトについては、例 3 を参照してください。

  • パフォーマンスに関する考察:

    • トレーニング時間は決定木の数 (numTrees) と最大の深さ (maxDepth) が増えるほど長くなります。[引数:] のデフォルト値から始め、精度の要件とパフォーマンスの制約に基づいて調整します。

    • データセットが大きいほどトレーニング中に多くのメモリが必要になります。非常に大きなデータセットを操作する場合、最初のモデルトレーニングには代表的なサンプルの使用を検討します。

    • 明示的にアンロードされるか FileMaker セッションが終了するまでモデルはメモリ内に残ります。モデルが不要になった場合は [モデルをアンロード] 処理を使用してメモリを解放します。

例 1 - 基本モデルのトレーニング

デフォルトの [ランダムフォレスト] の引数を使用して床面積 (フィート)、寝室数、および家の築年数に基づいて住宅価格を予測する基本的な回帰モデルをトレーニングします。

「不動産」テーブルの「特徴」フィールドには床面積 (フィート)、寝室数、築年数を表す [1200, 3, 15] のような JSON 配列が含まれ、「価格」フィールドには対応する住宅価格が含まれています。このスクリプトステップを実行すると、モデルはメモリ上に保持され、モデル名「住宅価格モデル」を参照して PredictFromModel 関数で現在の FileMaker セッション内で使用できます。

この例ではモデルが保存されていないため、現在のセッションが終了した後はモデルを使用できません。

コピー
レイアウト切り替え [「不動産」(不動産) ; アニメーション: なし]

回帰モデルを構成 [処理: モデルをトレーニング ; モデル名: "住宅価格モデル" ; アルゴリズム: ランダムフォレスト ; ベクトルフィールドをトレーニング: 不動産::特徴 ; ターゲットフィールドをトレーニング: 不動産::価格 ; 空または無効なレコードをスキップ]

例 2 - 埋め込みベクトルの取得およびモデルのトレーニング

顧客のレビューテキストに基づいて星の評価 (1 から 5) を予測する回帰モデルをトレーニングします。

トレーニングデータは「レビュー」テーブルにあり、「レビューテキスト」(顧客のレビューを含むテキストフィールド) と「評価」(顧客が選択した星の評価を含む数字フィールド) で構成されています。スクリプトが FileMaker Server にインストールされている AI モデルサーバーの AI アカウントを設定した後、そのアカウントを使用して「レビューテキスト」フィールドのデータに基づいて「レビュー埋め込み」オブジェクトフィールドにテキスト埋め込みベクトルを挿入します。

次にスクリプトは回帰モデルを「レビューモデル」と名付けてトレーニングし、「レビュー埋め込み」のトレーニングベクトル、「評価」フィールドのターゲット値、およびカスタム引数を使用します。トレーニングが完了すると、モデルはグローバルオブジェクトフィールド「レビューモデル」に保存されます。

コピー
AI アカウント設定 [アカウント名: "AI_Model_Server" ; モデルプロバイダ: カスタム ; エンドポイント: "https://myserver.example.com:8080/" ; SSL 証明書の検証 ; API キー: グローバル::API キー]

レイアウト切り替え [「レビュー」(レビュー)]

対象レコードに埋め込みを挿入 [アカウント名: "AI_Model_Server" ; 埋め込みモデル: "all-MiniLM-L12-v2" ; ソースフィールド: レビュー::レビューテキスト ; ターゲットフィールド: レビュー::レビュー埋め込み ; エラー時に続行 ; 概要を表示]

変数を設定 [$parameters ; 値: 
  Let ([
    json = "{}" ;
    json = JSONSetElement (json; "numTrees"; 15; JSONNumber) ;
    json = JSONSetElement (json; "maxDepth"; 15; JSONNumber) ;
    json = JSONSetElement (json; "minSamplesSplit"; 3; JSONNumber) ;
    json = JSONSetElement (json; "numFeatures"; 1000; JSONNumber) ;
    json = JSONSetElement (json; "maxFeatures"; 0; JSONNumber)
  ] ;
    json
  )
]

回帰モデルを構成 [処理: モデルをトレーニング ; モデル名: "レビューモデル" ; アルゴリズム: ランダムフォレスト ; ベクトルフィールドをトレーニング: レビュー::レビュー埋め込み ; ターゲットフィールドをトレーニング: レビュー::評価 ; 空または無効なレコードをスキップ ; 引数: $parameters ; モデルの保存先: レビュー::レビューモデル]

「レビューモデル」という名前のモデルが使用できるようになりました。PredictFromModel例 2を参照してください。

例 3 - 平均二乗誤差の計算

トレーニングされた回帰モデルの精度を評価するために平均二乗誤差を計算します (メモを参照)。

スクリプトは例 2 で使用されたトレーニングデータを含む「レビュー」レイアウトに移動してすべてのレコードを表示し、$squaredLossSum 変数をゼロにして最初のレコードに移動してから、以前に保存したモデルをロードして「レビューモデル」と名付けます。

ループでは、各レコードについて、PredictFromModel 関数を使用してモデルによって予測された値と「評価」フィールドの実際の値の差を二乗して $squaredLossSum に追加します。

すべてのレコードをループした後、$squaredLossSum をサンプル数 (トレーニングデータセット内のレコード数) で割って MSE 値を計算し、ダイアログボックスに表示します。完了すると、スクリプトによってモデルをメモリからアンロードします。

コピー
レイアウト切り替え [「レビュー」(レビュー)]
全レコードを表示
変数を設定 [$squaredLossSum; 値: 0]

回帰モデルを構成 [処理: モデルをロード ; モデル名: "レビューモデル" ; モデルのロード元: レビュー::レビューモデル]

レコード/検索条件/ページへ移動 [最初の]
Loop [フラッシュ: 常に]
    変数を設定 [$loss; 値: レビュー::評価 - PredictFromModel ("レビューモデル" ; レビュー::レビュー埋め込み)]
    変数を設定 [$squaredLoss ; 値: $loss^2]
    変数を設定 [$squaredLossSum ; 値: $squaredLossSum + $squaredLoss]
    レコード/検索条件/ページへ移動 [次の ; 最後まできたら終了: オン]
End Loop

カスタムダイアログを表示 ["MSE 値" ; $squaredLossSum / Get (対象レコード数)]

回帰モデルを構成 [処理: モデルをアンロード ; モデル名: "レビューモデル"]

予想される MSE 値は .01875826440712939518 です。