こんばんは,@PKです.
前回の記事では〈前編〉KNIMEでRandom Forestということで,「Random Forest Learner/Predictor」を使って学習モデルの作成やテストデータの予測などを紹介しました.
しかし,実際にRandom Forestを行う際は,学習データに対して当てはまりの良いモデルを作成するためにパラメーター調整を行う必要があります.
中編では,「Random Forest Learner」の設定のためにパラメーターの最適化を行うWorkflowの紹介をしたいと思います.
「Parameter Optimization」と「Cross Validation」の実行
今回紹介するWorkflowの概要を以下に示します.
Workflowの大きな流れとしては,
- 「Parameter Optimization Loop Start/End」でパラメーターの値を変えてループ処理
- 「X-Partitioner/X-Aggregator」でテストデータの交差検証(Cross Validation)を実施
- 「Random Forest Learner/Predictor」でRandom Forestの実行
- パラメーターを変化させたときのAccuracyをグラフ化して最適なパラメーターを決定
のように進めていきます.
「Parameter Optimization」について
パラメーターの最適化は以下の2つのノードを使って設定していきます.
それぞれの設定画面を以下に示します.
「Parameter Optimization Loop Start」の設定については,"Search strategy"で最適化の手法を選択し,その後選んだパラメーターで各種設定とパラメーターの初期値などを入力します.
最適化手法の選択ですが以下の4種類が用意されていました.
詳細はNodePitの「Parameter Optimization Loop Start」のページに記載されています.
- Brute Force
- すべての組み合わせを探索して最適なパラメーターを決定する
- Hillclimbing
- 設定した値の間でランダムに選択し,その近傍を探索する.近傍で最適解が無い場合に探索を終了する
- Hill climbing - Wikipedia
- Random Search
- 設定した回数だけランダムに設定範囲内を探索し,最適解を求める.
- Bayesian Optimization (TPE)
- Tree-structured Parzen Estimator(TPE)という手法を用いた最適化法
- Parameter Tuning – 大阪大学医学部 Python会
- hyperoptって何してんの? - Qiita
今回は,"Brute Force"を選択し,1から8まで1刻みでパラメーターを設定しました.
「Parameter Optimization Loop Start」を実行すると,以下のように変数として先ほど設定したパラメーターの値が出力されます.
この変数は「Random Forest Learner」の"Max Levels"の変数として設定しておきます(詳細は動画で確認します).
「Parameter Optimization Loop End」では,ループ後に目的の数値を収集し,どの数値を選ぶか(Max or Min)選択します.
今回は"Accuracy"と,それを最大化をするパラメーターを選択しました.
実行結果は最後に出力して確認するので,Cross Validationに進みます.
「Cross Validation」について
続いて,Cross Validation(交差検証)を実行します.
交差検証の詳細はこちらで示しています.
「X-partitioner/X-aggregator」の設定は以下のように行いました.
交差検証の手法としては10-fold Cross Validationを使用しました.
また,「X-aggregator」では,ターゲットカラムと予想結果のカラムをそれぞれ"Species"に設定し,実行します.
内部のRandom Forestの部分は〈前編〉を参考にしてください.
実行結果を以下に示します.
「X-aggregator」では10回交差検証を行った結果が表で出力されています.
この結果を「Scorer」へ出力し,属性の誤判定の結果や,統計値を取得します.
結果の出力
最後に「Parameter Optimization Loop End」の結果を「Line Plot」で可視化します.
「Parameter Optimization Loop End」は結果を2種類出力し,上側ポートは最適なパラメーターを,下側ポートで全パラメーターの結果を表示します.
下側の結果を「Line Plot」で可視化すると上図のように,"Tree Depth"が3を超えるとAccuracyは頭打ちになっていることがわかります.
あまり"Tree Depth"が大きすぎても過学習になり汎化性が落ちるかもしれないので,パラメーターは3を選択しています.
まとめ
今回はRandom Forestのパラメーター最適化についてご紹介しました.
最適なパラメーターを「Parameter Optimization」と「Cross Validation」を用いて探索する手法は様々な学習モデルで使用できると思います.
自分も勉強途中なので,必要に応じて追記・修正をしていきます.
最後にWorkflowの全体を動画で示します.