はじめに
「機械学習をやってみたいけど、プログラミングは苦手…」
そんな方におすすめなのが KNIME(ナイム) です。KNIMEは基本無料で使えるソフトで、プログラミングなしでマウス操作だけで機械学習を実行できます。
前回の記事では、シンプルでわかりやすい「決定木分析」を使って予測モデルを作成しました。
今回はその発展版として、より高精度なモデルを作ることができる ランダムフォレスト(Random Forest) をKNIMEで実行してみましょう。
ランダムフォレストは、複数の決定木を組み合わせて予測する「アンサンブル学習」という手法の代表例です。
1本の決定木ではデータの偏りに影響されやすいのに対し、ランダムフォレストは多数の木の「多数決」で予測するため、より安定した結果が得られます。
KNIMEではこの高度な手法も、ノードをつないで設定するだけで簡単に実行できます。
まずは、雰囲気をつかむために以下の動画をご覧ください。
60秒でランダムフォレスト分析を行うキャプチャ動画です。
KNIMEについてもう少し知りたい方はこちらの記事もご覧ください。
機械学習モデル作成とは?
まずは、機械学習モデルの基本的な流れを確認しておきましょう。
機械学習による予測モデルの利用には、大きく分けて次の3つのステップがあります。
- データ準備
現実のデータには欠損や入力ミスが含まれていることが多いため、まずは不備を整えて分析できる状態にします。
そのうえで、予測したい「結果データ」と、その予測に使う「特徴量データ」を用意します。 - 学習(トレーニング)
予測したい結果が含まれるデータ(教師データ)を使い、特徴量と結果の関係性を学習します。
例:患者データの「年齢」「検査値」「既往歴」など(特徴量)と、「再入院した/しなかった」(結果)。 - 予測(推論)
学習で得られた法則性を利用し、新しいデータに対して結果を予測します。
例:新しい患者データを入力すると、その人が再入院する可能性を予測できる。
つまり、「過去のデータからパターンを学習し、未来を予測する」 のが機械学習モデルです。
この記事では、特に 2. 学習(トレーニング) と 3. 予測(推論) の部分を中心に、KNIMEを使ったランダムフォレストの設定方法を紹介します。
ランダムフォレストとは?
ランダムフォレストは、複数の決定木を組み合わせて予測を行う アンサンブル学習の手法です。
1本の決定木ではデータの偶然やノイズに左右されやすいのに対し、ランダムフォレストでは多数の木を作り、それぞれが出した結果を「多数決」や「平均」でまとめることで、より汎用的で精度の高い予測を実現します。
たとえば病院の患者データを使う場合、
- 木①:「年齢が65歳以上なら再入院の可能性が高い」
- 木②:「入院日数が長ければ再入院リスクが高い」
- 木③:「血液検査の異常が多い人は再入院しやすい」
といったように、さまざまな視点で作られた複数のモデルを組み合わせて、総合的な判断を下します。
ランダムフォレストは、
- 精度が高く
- 過学習(学習データに依存しすぎること)を抑えやすく
- 特徴量の重要度を可視化できる
という利点があり、医療や金融、マーケティングなど幅広い分野で使われています。
データを読み込んでランダムフォレストの予測モデルを作る
新規ワークフローの作成とデータの読み込み
では実際にやってみましょう。
左上のHomeボタンを押してhome画面を表示させ、右側の「Create new workflow」ボタンを押します。

ワークフローの編集画面が表示されたら、分析したいファイルを任意のフォルダからドラッグアンドドロップでワークフローエリアに投入します。今回はCSVファイルですが、エクセルファイルでも構いません。KNIMEが自動的に判断して、適切なノードを配置してくれます。

因みに使用するのはこんなデータです。

年齢・BMI・血圧・併存実感指数・MMSEから再入院するかどうかを判定するモデルを作成します。再入院ありなら1,再入院無しなら0が再入院列に記載されています。
なお、このデータはプログラムで機械的に生成した架空の物です。実際の病態や患者像を反映したものではありません。ご注意ください。
ノードの配置と接続
ノードの配置は、画面左側のNodeタブから行います。大量のノードが表示されて探しにくいため、検索欄に「csv」や「decision」と入力して絞り込むのがおすすめです。

使用するのは以下のノードです。Nodesタブから順次追加してください。
なお、CSV Readerはファイルをドラッグアンドドロップした時点で自動的に追加されるため、Nodesタブから手動で追加する必要はありません。
これらのノードを画像のように配置・接続します。接続はノードの右側にある三角または四角のアイコンをマウスでドラッグアンドドロップすることで行います。

各ノードには四角と三角の接続アイコンがあります。これらの接続アイコンは同じ形同士しか接続できません。
注意が必要なのは「Table Partitioner」の接続です。「Table Partitioner」ノードの右上から出る矢印を「Decision Tree Learner」へ、ノードの右下から出る矢印を「Decision Tree Predictor」へ接続します。逆につなぐと、モデルの精度が下がってしまいます。
設定
概要
各ノードには状態を表す信号のアイコンがついています。

信号アイコンが赤になっている場合、上流のノードで問題が生じている場合もあります。注意してください。
ノードが正常に作動しているか分かりやすいように、画面上で左側のノードから設定・実行をしていきます。ノードについている信号が赤や黄色から緑になれば、そのノードは実行完了です。
今回、設定が必要なのはCSV ReaderノードとScoreノードです。
CSV Reader:データの選択
CSV Readerノードをダブルクリックすると以下のようなウィンドウが開きます。

初めは「Setting」タブが開かれている為、ウィンドウ上部の「Transformation」タブを押します。
画面を切り替えたら、不要なデータを分析から外します。必要ないデータのチェックボックスを外してください。今回のデータではid、any unknown new columnが不要です。
次に予測をしたい項目である「再入院」のTypeを確認します。TypeがNumberになっていたら、画像のようにStringにします。今回は分類モデルを作成するため、TypeがNumber(Integer)だと後続のノードでエラーが出てしまいます。
※Typeについて:分析の際にデータが整数、小数を含む実数、巨大な整数(21億以上)、文字列、のどのデータ型として扱われているかを示すものです。分析の目的に応じたデータ型を選択する必要があります。
設定が終わったら実行します。
ノードにマウスのポインタを重ねるといくつかアイコンが表示されます。左上の再生ボタンのアイコンを押すとノードが実行されます。(右クリックメニューからExecuteでもOK)

Tabale Partitioner:データの分割
このノードの設定は必須ではありません。特にこだわりが無ければ、そのままアイコンの左上の再生ボタンで実行し次に移りましょう。
初期設定ではデータの70%を学習用に、30パーセントを検証用に振り分ける設定になっています。
ノードをクリックすると右側に設定画面が出るため、必要に応じてデータの振り分け比率を変更してください。Relative Sizeを指定すると、振り分け比率を変更できます。

Random Forest Learner:データの学習
ノードをダブルクリックして設定画面を開き、予測したい項目(目的変数) が正しく設定されているか確認します。

今回は「再入院」列を予測することが目的です。
Class column が 再入院 になっていることを確認します。問題なければ、そのまま OKボタン をクリックして設定を保存します。
設定が終わったらこのノードも赤丸の再生ボタンで実行し、次のステップに進みましょう。

Random Forest Predictor:データの予測
このノードでは、学習済みモデルを使って新しいデータの結果を予測します。
特別な設定は不要で、再生ボタンで実行するだけです。
Score:予測精度の評価
このノードでは、正解データ(実際の再入院結果) と 予測結果(モデルによる予測値) を比較し、モデルの精度を評価します。

設定画面では、
- First Column:正解データ(再入院)
- Second Column:予測データ(Prediction(再入院))
が正しく対応していることを確認します。
2つの列で値が一致しているデータが多ければ予測精度が高く、
一致していないデータが多ければ予測精度が低いことになります。
結果を確認する
KNIMEでは、ノードにマウスポインタを重ねて虫眼鏡アイコンが表示される場合、そのアイコンをクリックすると結果を確認できます。

ここでは、Random Forest Learner と Score ノードの結果を見てみましょう。
Random Forest Learner の結果
Learnerノードにマウスを重ね、虫眼鏡のマークをクリックします。

この様な図が表示されます。ランダムフォレストの学習器が生成した、100個のツリーを確認できます。赤丸の数値を変えると、順次ツリーがひょじされていきます。
Score ノードの結果
Scoreノードの虫眼鏡アイコンをクリックすると、実際のデータと予測結果の比較表が表示されます。
さらに、Confusion Matrix(混同行列)を確認することで、正しく予測された件数や誤分類の傾向を確認できます。

上の表では赤枠の部分が実際の値で、緑色の枠が予測値を示しています。実際の値と予測値が同じものが多ければいい予測モデルであり、はずれが多ければモデルには改善の必要があります。
予測が当たったものが、2251+146=2397
予測が外れたものが、455+148=603
となっています。
表の下のエリアでは、全体として正しく分類された正しく分類された数・正しく分類できなかった数、正解率(Accuracy)が確認できます。
新しいデータで予測して結果を出力する
実際に新しいデータを読み込み、「Rdandom Forest Predictor」に接続すると、新規のデータに対しても予測ができます。
まずは、新しく予測をしたいデータを、ドラッグアンドドロップでワークフローエリアに投入します。今回はエクセルデータだっため、自動でExcel Readerが使用されています。
Excel Readerノードをダブルクリックして、IDなどの不要なデータ列を除去しましょう。なお、新規データに予測に必要なデータ列が含まれていないとエラーになります。
その他必要なノードをNodesタブから追加して、以下のように配置・接続します。

上記の赤枠内が追加した部分です。
ポイントは先ほど配置したRandom Forest Learnerを新しいRandom Forest Predictor に接続する事です。これをしないと予測が出来ません。
CSV Writerノードは、保存フォルダ・ファイル名の指定が必要です。ノードをダブルクリックして、設定画面を開きましょう。

赤丸の部分をクリックすると、保存先を選ぶダイアログが開きます。フォルダとファイル名を入力してOKを押します。
最後にCSV Writerノードを実行すると、指定したフォルダに予測値が追加されたデータが保存されます。
※デフォルト設定では、既に同名ファイルがある場合上書きしせずにエラーを出します。設定を変えながらどんどん上書きしたい場合は、If existsをoverwriteにしましょう。
まとめ
- KNIMEはプログラミング無しで機械学習ができる便利なフリーソフト
- ランダムフォレストは多数のツリーから総合的に判定する。そのため結果が偏りにくく、妥当な結論が得られやすい。
- CSVを読み込んで、学習 → 予測 → 評価の流れをマウス操作だけでできる
プログラミングを使わなくても、ここまでできるのがKNIMEの魅力です。
まずは手元のデータを使って試してみましょう!
コメント