Monthly Archives: 9月 2015

KNIME: ブースティング


今回は、集団学習法の1つであるブースティングを行うワークフローを構築してみます。

knime_boosting_01

訓練データ、テストデータは、以下のサイトにある化合物の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

ループ開始1

Boosting Learner Loop Startノードを用います。
特に設定は必要ありません。

学習

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

knime_bagging11

予測

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

knime_boosting_03

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

ループ終了1

Boosting Learner Loop Endノードを用います。
Boostingにおけるパラメータの設定は、本ノードで行うことができます。
Number of iterationsに指定した数だけモデルが作成されます。

knime_boosting_02

ループ開始2

Boosting Predictor Loop Startノードを使います。
Model columnで、Boostringで学習したモデルを指定し、Weight columnでモデルの重みを指定します。

knime_boosting_04

正規化2

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

ループ終了2

Boosting Predictor Loop Endノードを使います。

knime_boosting_05

評価

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

knime_boosting_06

以上で設定は終わりです。
ワークフローを実行した後、スコアノード上で右クリックしConfusion matrixを選択します。

knime_boosting_07

Accuracyは0.856であり、バッギングよりも若干良いスコアとなりました。


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

KNIME: バギング


バギングは、集団学習法の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

KNIME: PMMLノードの利用方法


PMML(Predictive Model Markup Language)は、異なるアプリケーションの間でもデータマイニングモデルを共有可能にするための規格です。KNIMEにもPMML関連のノードが用意されていますので、いくつか利用してみたいと思います。

knime_pmml01_01

訓練データ、テストデータは、以下のサイトにある化合物の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 SDF blocksにチェックを入れます。

knime_pmml01_02

Property handlingタブを選択し、scan filesボタンを押します。
SDF内のタブ名が表示されますので、ID、NAME、SOL_classificationにチェックを入れ、OKボタンを押します。

knime_pmml01_03

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

RDMol

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

knime_pmml01_04

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

記述子の計算

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

knime_pmml01_05

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

列の抽出

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

knime_pmml01_06

正規化1

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

knime_pmml01_07

学習

SVM Learnerノードを使って、学習を行います。
Class columnにSOL_classificationを指定します。この値が教師データとなります。

knime_pmml01_08

PMML出力

正規化1ノードと学習ノードの出力をPMMLでファイル出力します。

knime_pmml01_09

PMML入力

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

knime_pmml01_10

正規化2

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

予測

PMML Predictorを使って、テストデータのlogS値のカテゴリーの予測を行います。
特に設定は必要ありません。

評価

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

knime_pmml01_11

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

knime_pmml01_12