KNIME: バギング

By | 2015年9月16日


バギングは、集団学習法の1つであり、ブーストラップサンプリングにより生成した複数の判別器を組み合わせることで、精度の高い判別器を生成する手法です。
今回は、決定木による学習をバギングで行った場合とそうでない場合の両方で実施してみます。
まずは、バギングを用いた場合のワークフローを示します。

knime_bagging01
knime_bagging02

訓練データ、テストデータは、以下のサイトにある化合物のlogS値(Huuskonen dataset)を利用しています。

入手先:
https://github.com/rdkit/rdkit-orig/tree/master/Docs/Book/data
ファイル名: solubility.train.sdf, solubility.test.sdf

各ノードの設定方法を説明します。
各ノードを配置、接続した後、ノードをダブルクリックするとConfigureが開き、設定を行うことができます。

訓練データの入力

SDFの読み込みには、SDF Readerノードを使います。
File selectionタブでsolubility.train.sdfファイルの場所を指定し、Extract molecule nameとExtract SDF blocksにチェックを入れます。

knime_bagging04

次に、Property handlingタブにおいて、Scan filesボタンをし、SOL_classificationにチェックをいれます。

knime_bagging05

テストデータの入力ノードの設定におきましても、選択するファイルをsolubility.test.sdfにするだけで、残りの設定は同じです。

RDMol

SDFからRDKitのMol形式(RDMol)にRDKit From Moleculeノードを用いて変換します。

knime_bagging06

ワークフローの中に2つのRDMolノードがありますが、設定は同じです。

記述子の計算

RDKit Descriptor Calculationノードを使って、記述子の計算を行います。

knime_bagging07

ワークフローの中に2つの記述子の計算ノードがありますが、設定は同じです。

列の抽出

Column Filterを用いて、学習に必要な列だけ抽出します。

knime_bagging08

正規化1

Normalizer(PMML)を使って、入力データの正規化を行います。
ここで生成された正規化に関わる情報は、PMML出力ノードでPMMLとして出力されます。

knime_bagging09

行をシャッフル

Shuffleノードを使って、行をシャッフルします。
特に設定は行いません。

ループ開始

Chunk Loop Startノードを使って、繰り返し回数の指定を行います。
ここでは、No. of chunksに10を指定していますので、繰り返し回数は10となり、chunkごとにテーブルの行数/10の行が割り当てられます。

knime_bagging10

学習

Decision Tree Learnerノードを用いて、決定木による機械学習を行います。

knime_bagging11

ループ終了

PMML Ensemble Loop Endノードを使って、集団学習に関するパラメータの設定を行います。
ここでは、Multiple models methodとして、Majority voteを選択しています。

knime_bagging12

PMMLモデルの結合

PMML Model Appenderノードを使て、正規化とバギングに得られた学習モデルを結合します。
特に設定は必要ありません。

PMML出力

PMML Writerノードを使って、PMMLをファイル出力します。

knime_bagging13

PMML入力

PMML Readerノードを使って、PMMLファイルの読み込みを行います。

knime_bagging14

正規化2

Normalizer Apply(PMML)ノードを使って、テストデータの正規化を行います。
特に設定は必要ありません。

予測

PMML Ensemble Predictorノードを使って、予測を行います。

knime_bagging15

評価

Scorerノードを使って、予測結果の評価を行います。

knime_bagging16

以上で設定は終わりです。
まずは、上半分の学習ワークフローを実行し、bg_model.pmmlを出力します。
次に、下半分の予測ワークフローを実行し、bg_model.pmmlを入力し、評価を行います。
評価の結果は、ScorerノードのView: Confusion Matrixを選択すると結果を見ることができます。

knime_bagging17

Accuracyは0.83でした。

バギングを使わない場合

ワークフローを以下に示します。

knime_bagging03

Accuracyは、0.798でした。

knime_bagging18

今回のケースでは、バギングを用いることで、精度の向上が確認できました。


利用したソフトウェア:
KNIME 2.11.3