初期推定値(ヒューリスティック)を予測モデル(機械学習)に統合する私は「ブレンドサーチ」というツールを開発しようとしています。今のところは問題なく動作していますが、技術的な実装方法がまだ分からない改善点があります。
Blend Searchの機能:
>> 入力は、プロパティを持つコンポーネントの集合です
>> 構成行列の生成
>> ブレンドの特性を計算するためのヒューリスティック(単純なモデル)の適用
>> より複雑なモデル(現在はブーステッドツリー)の適用。その予測因子はヒューリスティックによって推定されたブレンドの特性であり、その出力もまたブレンドの特性である。
Boosted Treeの視覚化を作成しました(添付の動画をご覧ください)。
予測変数の一つ(予測変数3)は、既に私の目標とする特性の初期推定値(予測値)を提供しています。当初の構想では、他の二つの予測変数はこの初期推定値をより精緻化するためのものでした。現在では、このモデルは一貫した予測値を提供しており、予測範囲から大きく外れることはありません。
しかし実際には、初期推定値を修正しているのではなく、トレーニングセット内のY値の平均値(デフォルトのブーステッドツリーの切片)を修正しているのです。ブレンドサーチをスケールアップしたい場合、このアプローチでは十分な堅牢性を確保できなくなります。
初期推定値を修正することで予測を行えるようにしたいと考えています。例えば、ブーステッドツリーに変数切片タイプを追加したいです。具体的な解決策はまだ思いつきませんが、既にいくつかの手法が存在することはほぼ確実です。何かアイデアがあれば、ぜひお聞かせください。
予測モデリングと機械学習件名:初期推定値(ヒューリスティック)を予測モデル(機械学習)に統合するこんにちは、 @RikkiTikkiTavi さん、
アルゴリズムモデリングのプロセスを完全に理解しているかどうかは定かではありませんが、一つアイデアがあります。予測精度を向上させるには、ブースティング手法(予測バイアスを低減するため)とバギング/モデル平均化手法(予測分散を低減するため)の2つのアプローチが考えられます。
- ブースティングアプローチ:目標がバイアス(予測平均応答と実測平均応答の差)を修正することで対象特性の予測精度を向上させることである場合、機械学習モデルを訓練して、生データや推定データ、および対象特性の予測値から、この対象特性の残差を予測することができます(元の変数と予測値に基づいて誤差をモデル化するため)。これにより、ブースティングされたツリーの誤差を予測し、ブースティングされたツリーの修正層として機能するモデルが得られます(ブースティングされたツリーの予測値に残差予測値を加算/減算することで)。
私はこの手法を何度か試しましたが、パフォーマンスの向上は非常に顕著です。予測に使用するモデルとは異なるタイプのモデルを誤差モデリングに使用することを検討する価値があるかもしれません(つまり、今回の場合はブーステッドツリー以外のモデル)。また、適切な検証戦略(ブーステッドツリーモデル単体との比較)とテスト戦略(実環境下でのパフォーマンス評価)を用いて、過学習を避け、この新しいモデルを徹底的に検証してください。誤差の予測には、予測変数と対象プロパティの予測値のみを使用し、予測時に利用可能なデータのみを使用することで、データ漏洩のリスクを回避してください。
- バギング/モデル平均化アプローチ:予測のばらつきを減らすもう一つの方法は、(ブーステッドツリーモデルに加えて)複数のモデルを並行して学習させ、それらの予測の平均値または中央値を取ることです。ただし、このアプローチでは、適切な検証およびテスト戦略を実装することが不可欠です。
これらのオプションの選択は、初期ブーステッドツリーモデルのパフォーマンスとデータのノイズに依存します。ブーステッドツリーが過学習を起こしやすい場合、または使用するデータにノイズが多い場合は、バギングアプローチが推奨されます。ブーステッドツリーのパフォーマンスが低く、バイアスが大きい場合(特定のパラメータを使用しない限り、モデルの動作から考えてこれはまずあり得ないと思われます)、ブースティングアプローチの方が効果的です。使用する予測モデル(ブーステッドツリー)は既にブースティングタイプのアプローチを採用しているため、バギングタイプのアンサンブルアプローチのテストを優先するかもしれません。
これらの選択肢があなたにインスピレーションを与えてくれることを願っています。
件名:初期推定値(ヒューリスティック)を予測モデル(機械学習)に統合するこんにちは、 @Victor_G さん。
残差(目標とする特性の実際の値と初期推定値との差)の予測は既に試みました。トレーニングセットではわずかな改善が見られましたが、テストセットでは失敗しました(RMSEが2倍になりました)。テストセットは、私が目指すスケールアップを表しています。これは非常に異なる組成のサブグループですが、これらの混合物の特性はトレーニングセットの特性とほぼ同じ範囲にあります。現在のブーステッドツリーは、テストセットでかなり良い予測結果を示しています。
モデル平均化の考え方は興味深いですね。この手法をテストするには、十分に異なる誤差を示すモデルを見つける必要があるのでしょうか?まずはバギングを試してみようと思います。私のデータにはノイズが多いことは分かっていますし、このタイプのモデルの方が、2つ、3つ、4つ…といった異なるモデルのセットよりも、ブレンド検索ツールに統合しやすいのではないかと考えています。
貴重なご意見をありがとうございました。
件名:初期推定値(ヒューリスティック)を予測モデル(機械学習)に統合するこんにちは、 @RikkiTikkiTavi さん、
はい、このアプローチの難しさは、過学習(訓練データセットでは改善が見られるものの、検証データセットでは性能が安定しない、あるいは悪化する)を避けるための適切な検証戦略にあるのです。
テストデータの説明から、ドメインシフトが発生する可能性があるのではないかと少し懸念しています。トレーニング中にモデルが学習した入力と出力の関係が、テスト時に存在する関係と異なるリスクがあるからです。このシフトを回避するために、トレーニングデータ、検証データ、テストデータを混合/ 層別化することは可能でしょうか(テストにはスケールアップデータのみを使用するなど)。こうすることで、モデルはスケールアップに関する情報も取得できるようになります。例えば、トレーニング中に使用する新しい変数(experiment_type: R&D / scale-up / Prodなど。各段階で切片が異なるかどうかによって、この変数が必要になるかどうかが決まります)でスケールアップを示すことができます。
残りのプロセスに関して、いくつか意見やアイデアを述べます。
- まず、トレーニング/検証/テスト戦略を設定します。可能であれば、変数に関して層別分割を行い、各セットで実験空間全体が網羅されるようにします(適切なトレーニングとパフォーマンスの良好な汎化を保証するため)。
- ブーステッドツリー(またはその他のモデル)をトレーニングする前に、比較モデルを設定します。他のモデルと比較して検証で優れたパフォーマンスを発揮するベンチマークモデル( ランダムフォレストをお勧めします)と、テスト対象モデルのパフォーマンスの下限を評価するモデルです。たとえば、トレーニングセットの平均応答を他のすべてのセット(検証およびテスト)で「予測」するだけのナイーブモデルです。他のモデルがこのモデルよりも劣っているか同等である場合(たとえば、RMSEがナイーブモデルに近いかそれ以上の場合)、これは、信号に対してデータに過剰なノイズがあること、要因からの情報が不足していること、および/または応答の変動が不十分であることを示している可能性があります。
- また、例えばモデルスクリーニングプラットフォームを用いて、トレーニングセットのみで交差検証を行うことで、様々なモデルをテストすることをお勧めします。そこから、最も有望なモデルを選択して先に進むことができます。
- モデルのパフォーマンスに応じて、トレーニングセットでの再トレーニングが可能であり、検証セットでのパフォーマンスを比較して、最もパフォーマンスの高いモデルを選択できます。並行して、以前のクロスバリデーションで既にトレーニングされた選択されたモデルを使用して、 モデル比較プラットフォームでモデル平均化を実行できます。モデル平均化の興味深い点は、Boosted Tree、Random Forest、 XGBoostなどのツリーベースモデルなど、異なる「構築タイプ」(帰納的バイアス)を持つモデルを、パフォーマンスに応じて、多変量回帰、SVM、ガウス過程、または小規模ニューラルネットワークなどの他のモデルと組み合わせることです。これらのモデルは、個々のパフォーマンスが良好である必要があり(データ内のシグナルを捉えている必要があります)、理想的には、エラー率がわずかに異なる(一部のモデルは特定の観測値を過大評価し、他のモデルは過小評価する)必要があります。トレーニングセットで再トレーニングされた個々のモデルとこのマクロモデルの比較は、検証セットでのパフォーマンス結果を比較することで、同じモデル比較プラットフォームを使用して実行できます。
- 最適なオプション(マクロモデルまたは個別モデル)が選択されたら、テストセット上でパフォーマンスを推定し、モデルが展開された後の挙動を評価します。
また、ランダムフォレストの自然なバギング以外の機械学習モデルをブートストラップすることで、トレーニング中のモデルの堅牢性を向上させることも可能です。
これらの提案がお役に立てば幸いです。