MLアンサンブル(βver)
オートMLやマニュアルMLが探索の途中で作ったモデルを選んで混ぜ、新しいモデルを作ります。 1 つのアルゴリズムに頼るより精度が上がることがあります。混ぜるモデルはモデル詳細情報のモデルIDで指定します。
入出力
| ポート | 内容 |
|---|---|
| モデル | オートMLかマニュアルMLが出した学習済みモデル。混ぜる候補はこの中にあります |
| 入力データ | 親のノードで学習に使ったのと同じデータ |
| アンサンブルモデル | いちばん精度の良かったモデル。モデルで予測値算出につなぎます |
| 構築モデル情報 | 項目と値の 2 列。採用されたモデルと精度の要約 |
| 機械が重視したデータ | 説明変数ごとの重要度 |
ボニートくんの口が別にあります。 ノードには出ませんが、学習の結果はここを通って精度検証結果 / 機械が重視したデータ / 学習プロセス / 精度改善の余地 / モデル詳細情報として読めます。
Spark エンジンでは動きません。
設定項目
目的変数と説明変数の欄はありません。 親のノードで決めたものをそのまま引き継ぎます。
- アンサンブル手法を選択
- ブレンディングだけです(βver のため選択肢が 1 つ)。カテゴリ予測は各モデルが出した確率を平均してから分類し、数値予測は各モデルの予測値を平均します。
- パターン必須
- 混ぜるモデルの組み合わせです。1 つのパターンに複数のモデルIDを選びます。パターンは行を足して何通りでも作れ、全パターンを作って精度を比べます。
オプション
- 出力するモデルを選択
- 最後に 1 つを選ぶときの候補を決めます。全モデルから最も精度の良いモデルを出力(既定)は親のノードのモデルも候補に入れるので、混ぜたものより元の 1 つのほうが良ければ、そちらが出ます。アンサンブルモデルから最も精度の良いモデルを出力はこのノードで混ぜたものだけから選ぶので、必ずアンサンブルモデルが出ます。どちらを選んでも、作られるモデルの数は変わりません。
モデルIDの調べ方
モデルIDはモデル詳細情報の一覧に出ています。 親のオートMLかマニュアルMLのノードからボニートくんを開き、構築モデル一覧のモデルID列を見てください。
違うアルゴリズムどうしでも、同じアルゴリズムでパラメータ違いのものどうしでも混ぜられます。 一覧にない ID を指定すると、その ID は無視されます。
出力の中身
構築モデル情報
| 項目 | 中身 |
|---|---|
| 採用モデル | 選ばれたモデルのアルゴリズム名。混ぜたものなら名前が + でつながります |
| 期待(指標名) | 親のノードで決めた指標の値 |
| 精度評価 | Great! / まぁまぁ / 低い のどれか |
| 過学習リスク(10段階) | 大きいほど過学習している可能性が高い |
機械が重視したデータ
特徴量名と重要度の 2 列です。重要度が大きいほど、機械が重視した列です。読み方は機械が重視したデータにあります。
使えない入力
| 入力したモデル | どうなるか |
|---|---|
| グループごとに作ったモデル | エラーになります。アンサンブルはグループ分けに対応していません |
| すでにアンサンブルしたモデル | エラーになります。アンサンブルを重ねることはできません |
エラーと対処
どのエラーも、つなぎ方か設定を直して実行し直せば消えます。 モデルの型の検査は入力データの検査より先に行われるので、両方おかしいときはモデル側のエラーが先に出ます。
グループごとのモデルは混ぜられない
グループ化したモデルはアンサンブル非対応です。
直し方 — オートMLの「グループごとにモデルを作成する」を外して作り直したモデルをつなぎます
アンサンブルしたモデルは混ぜられない
アンサンブルモデルはアンサンブル非対応です。
直し方 — このノードの出力ではなく、オートMLかマニュアルMLの出力を直接つなぎます
学習データがつながっていない
学習データが入力されていません。
直し方 — 右側の入力に、親のノードで学習に使ったのと同じデータをつなぎます
指定したモデルIDが 1 つも見つからない
学習可能なパラメータセットが存在しません。
直し方 — モデル詳細情報のモデルID列を見て、一覧にある ID を指定し直します
目的変数が説明変数にも入っている
(列名)が説明変数の列にも選択されているので実行できません。説明変数から取り除くか、目的変数の列を変更してください。
直し方 — 親のノードの説明変数からその列を外して、作り直したモデルをつなぎます
目的変数が 1 種類しかない
目的変数が1種類しかないためモデルの推定ができません。
直し方 — 目的変数に 2 種類以上の値があるデータを使います。絞り込みで片方が消えていないか確かめてください
検証用のデータにだけある値がある
訓練データに存在しない目的変数が検証データに存在します。処理モード設定でデータ分割方法を調整してください。
直し方 — 親のノードの処理モードをカスタムにして「学習に使うデータの行数比率」を上げるか、件数の極端に少ないカテゴリをまとめます
データが少なくて学習できない
データが少ないためモデルの学習に失敗しました。
直し方 — 行を増やすか、説明変数を減らします
文字列列の種類が多すぎる
列: (列名) のユニーク数が多すぎるためOneHotEncodeに失敗しました。LabelEncodeをお試しください。
直し方 — その列を親のノードの説明変数から外すか、文字の置換でまとめて種類を減らします
よく使う例
1. 上位 3 つのモデルを混ぜる
お題 — 単体のモデルでは精度がもう一歩
入力 — オートMLのモデルと、学習に使ったデータ
設定 — モデル詳細情報の上位 3 件のモデルIDを 1 つのパターンに入れる
出力 — 3 つを混ぜたモデルと、元のモデルのうち精度の良いほうが出る
2. 混ぜ方を何通りか比べる
お題 — どの組み合わせがいちばん効くか分からない
入力 — 例 1 と同じ
設定 — パターンを 3 行作り、1 行目に上位 2 件、2 行目に上位 3 件、3 行目に違うアルゴリズムどうしの 2 件を入れる
出力 — 3 通りすべてが作られ、いちばん精度の良いものが出る。順位はモデル詳細情報で確かめられる
3. 必ずアンサンブルを使う
お題 — 元の単体モデルではなく、混ぜたモデルを後ろの処理に渡したい
入力 — 例 1 と同じ
設定 — オプションの出力するモデルを選択をアンサンブルモデルから最も精度の良いモデルを出力にする
出力 — 混ぜたモデルの中からいちばん良いものが出る
4. 同じアルゴリズムのパラメータ違いを混ぜる
お題 — アルゴリズムは XGBoost で決まっているが、1 本では安定しない
入力 — 例 1 と同じ
設定 — モデル詳細情報から XGBoost のモデルIDを複数選び、1 つのパターンに入れる
出力 — パラメータ違いを平均したモデルが出る