t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【KNIME】データ解析の妥当性を検証する交差検証(Cross Validation)のKNIME Workflow

こんばんは,@PKです.

前回,決定木(Decision Tree)をKNIME Workflowで行う手法についてご紹介しました.
www.t-kahi.com

今回は,前回ご紹介した決定木のWorkflowを使って,モデルの検証手法である,交差検証(Cross Validation)ノードの紹介をしたいと思います.

交差検証とは

交差検証(交差確認)(こうさけんしょう、英: Cross-validation)とは、統計学において標本データを分割し、その一部をまず解析して、残る部分でその解析のテストを行い、解析自身の妥当性の検証・確認に当てる手法を指す.データの解析(および導出された推定・統計的予測)がどれだけ本当に母集団に対処できるかを良い近似で検証・確認するための手法である
交差検証 - Wikipedia

少ないデータを分割して学習する際に,選んだ学習データによっては全体のデータを反映していない可能性があります.
そのような場合に便利な検証方法として交差検証(Cross-Validation)があります.
交差検証という名前の通り,学習データとテストデータを交差させることによって学習が妥当かどうかを判断します(本当のテストデータはこの交差検証には使いません).

交差検証には主に"K-fold cross-validation(K-分割交差検証)"と"leave-one-out cross-validation(leave-one-out 交差検証)"の2種類の手法があります.

K-分割交差検証は学習データをk個に分割してそのうちの1つをテストデータに,残りを学習データにすることをk回行います.その後,得られた結果を平均して学習結果を推定するものです.

leave-one-out 交差検証はn個の学習データから1つを抜いてテストデータとし,残りを学習データにすることをn回行い,得られた結果を平均する手法です.
k分割法のkがnになったと考えるのがわかりやすいと思います.

交差検証をわかりやすく説明している記事を参考に示します.
比較的少なめのデータで機械学習する時は交差検証 (Cross Validation) をするのです - Qiita

交差検証は学習結果が正しいかどうかを判断するのに重要な手法なので,KNIME Workflowにもこの交差検証を行うノードがあります.
それが「X-Partitioner」と「X-Aggregator」です(名前が交差検証っぽくないけど).
nodepit.com
nodepit.com

これらのノードを使ったWorkflowの例をご紹介します.

KNIME Workflow

Decision Treeの交差検証を行うWorkflowを以下に示します.
f:id:t_kahi:20190709221825p:plain

以下に「X-Partitioner」と「X-Aggregator」の設定画面を示しています.
f:id:t_kahi:20190709222146p:plain
「X-Partitioner」の設定においては,"Number of validations"でK-分割交差検証のkを設定します.続いてサンプルの取得の方法ですが,今回は"Species"で均等になるようにサンプル取得を行います.
また,"Random seed"を設定しておくことで,同じ乱数設定で何度も実験をすることができます.
最後の"leave-one-out"にチェックを入れれば,leave-one-out 交差検証となります.

「X-Aggregator」の設定では,ターゲットカラムと予想カラムを選択します.
何回目のループなのかを見たいときは"Add column with fold id"にチェックを入れておきましょう.

「Decision Tree Learner/Predictor」については,前回触れたので今回の紹介は割愛します.

実行すると,以下のような表が出力されます.
f:id:t_kahi:20190709223748p:plain

予想された"Species"カラムと,交差検証の回数を表す"Fold #"のカラムが追加されています.

これらを「Scorer」を用いて誤判別の割合やAccuracyを確認します.
f:id:t_kahi:20190709224027p:plain

まとめ

簡単にですが,交差検証に関するWorkflowをご紹介しました.

交差検証(Cross Validation)をうまく使うことで,学習結果の偏りを減らすことができます.
Nested Cross Validationといった手法もあるみたいでして,この辺もおそらくKNIME Workflowで組めるので,後ほど紹介したいと思います.
Python: パラメータ選択を伴う機械学習モデルの交差検証について - CUBE SUGAR CONTAINER
ダブルクロスバリデーション(モデルクロスバリデーション)でテストデータいらず~サンプルが少ないときのモデル検証~

最後に全体のまとめ動画を示します.
youtu.be