はじめに
誰向けの記事か
本記事は 前回のOrange紹介記事と同じく、非プログラマだけど機械学習してみたい、しなきゃいけない!という方のための記事です。Orangeより今回ご紹介するKNIMEの方が機能がリッチ、かつマシンパワーが必要なので、マシンスペックに自信のある方は是非こちらをお試しください。
実施事項
ドイツ出身の機械学習OSS、KNIMEをWindows7にインストールし、UCIのAdultデータセットを用い、様々な人の属性から、年収が5万ドル以上か?5万ドル未満か?を判定する分類器を作成し、評価を行います。
手順
ダウンロード
KNIMEのダウンロードサイトに行き、各入力項目に入力し、Submit & Downloadしてください。今回は、KNIME Analytics Platform + all free extensions for Windows (installer)を使ってインストールします。1.48 GBあるので、(64bit版)ダウンロードに少々時間がかかる場合があります。
インストール
.exeファイルを実行するといろいろ聞いてきますが、デフォルト設定でとりあえずはインストールしてください。
起動
インストール後に起動するか聞いてきますので、起動。Workspaceをどこに置くか聞かれますが、デフォルトでOK。(社員番号だけ塗りつぶしています)
クラスタリングフロー作成
1 新規ワークフローキャンバス作成
Ctrl+Nで新規ワークフローのためのキャンバスが作成できます。名前は今回はTESTとしておきます。
2 データの読み込み
左下のNode RepositoryからIO>Readを選び、File Readerを選択します。キャンバスにドラッグ・アンド・ドロップで、
このように置けますので、ダブルクリック。
UCIのAdultデータセットのURLを入れ、Column delimiterをコンマに設定すると、データが読み込まれます。URLから読み込むとColumn Nameが入らないので今回は手動で変更。OKを押します。
3 データの可視化
Node RepositoryからViewsを選び、データの全体感を見るため、Histogram(interactive)を選択、キャンバスにドラッグ・アンド・ドロップします。
このような画面が。ここで、Display all rowsにチェックを入れ、OKをクリック。
キャンバスに戻ってHistogramノードを右クリックし、Execute and Open Viewsボタンをクリックします。
下のタブでセッティングを色々変えられるので、データに異常がないかチェックできます。
4 モデル作成
Node RepositoryのAnalytics>Miningグループを見ると、様々なモデリング手法が用意されていることがわかります。その中で、今回はシンプルなDecision Treeを選択してみます。
その前に、Cross Validationの準備をしなければいけないので、
ScoringのなかにあるCross ValidationからX-Partitionerノードを選択し、キャンバスに置きます。ダブルクリックすると、以下のダイアログが現れます。
ランダムシードを適当に入力します。
そして、先程のDecition Tree LeanerとDecition Tree Predictorをキャンバスに置き、
ここで、Target ColumnがしっかりTargetになっていることを確認。Tuningもここでできます。
OKをクリックし、Decision Tree Learnerノードを右クリックしExecuteします。終わったら、Decision Tree Predictorノードを同じようにExecute。
Predictionまで終了後、Predictorノードを右クリックすると、Classified Dataが見られます。
5 モデル評価
モデルの評価をしましょう。Node Repositoryから、Scorerを選びます。
これをキャンバスに置き、Predictorノードとつなぎます。
Scorerノードをダブルクリックすると、
Second Columnの入力を求められるので、Prediction(target)を選択。OKをクリックして、Execute。
終了後、右クリックをすると、Confusion MatrixとAccuracy statisticsが見られますので、見てみます。
まずConfusion Matrix。
こちらを見ながらTuningするなり、モデリング手法を変えるなりして、良い分析結果まで導きましょう。
最後に
Orangeとの比較
前回の記事で使ったOrangeよりも、機能がリッチで本格的な印象です。かつ、モデリング手法が豊富です。NNまであります。ループ処理などもできますし、ワークフローをまとめて一つのノードにしてしまうことも可能です。javaもRもPythonも書けるので、いざという時にも安心です。
しかし、最初この記事もXGboostを使って書く予定だったのですが、うまくClassificationしてくれず、途中で手法をDecision Treeに変えました。KNIMEの方が、見えない難しさが潜んでいるのは間違いないです。
ワークフローの汎用言語への変換は今回も見つからず。できる方は教えてください。
結論
お手軽感を求めるならOrangeの方がおすすめで、色々弄り倒したい方にはKNIMEがおすすめ。他にこんなOSS知ってるよ!という方は是非ご連絡ください。