Section 1 Quick start

もしまだmlrパッケージをインストールしていなければインストールしておこう。依存パッケージまで含めるとかなり時間がかかるかもしれない。インストールしたらパッケージを読み込んでおこう。

install.packages("mlr", dependencies = TRUE)
library(mlr)

なお、これ以降はmlrは読み込み済みだと仮定して話を進める。

インストールが終わったら簡単にmlrのワークフローをみてみよう。mlrで機械学習の問題を扱う場合の流れは、大雑把に言って5つのステップに分けることができる。

  1. タスクの定義
  2. 学習器の定義
  3. 訓練
  4. 予測
  5. 評価

1.1 タスクの定義

まずはタスクを定義する。タスクはすぐ次のセクションで説明するが、問題の概要をまとめたオブジェクトのことだ。ここには問題の種類や、扱うデータセットに関する情報が含まれる。以下ではデータセットirisを対象に、分類問題のタスクを定義している。

task = makeClassifTask(data = iris, target = "Species")

1.2 学習器の定義

ここでは学習器オブジェクトを作成して、タスクに対してどのようなアルゴリズムを適用するかを決定する。このアルゴリズム自体はいろいろなパッケージで実装されているものだが、mlrを使うと、これらを統一したインターフェースで取り扱うことができる。以下では分類手法として線形判別分析を指定している。

lrn = makeLearner("classif.lda")

1.3 (データを訓練セットとテストセットに分割する)

ここではデータセットを訓練セットとテストセットに分割しているが、これは本来mlrを使用する場合は行う必要の無い作業だという点に注意してもらいたい。mlrにはこのような作業を行うためのもっと良い方法が用意されているが、今はここでの説明を簡単にするためにこのような方法を採っているだけだ。

n = nrow(iris)
train.set = sample(n, size = 2/3*n)
test.set = setdiff(1:n, train.set)

一応何をしているか説明しておくと、irisの行数に対応するインデックスを、無作為に訓練用とテスト用に割り振っている。

1.4 訓練

訓練は基本的には作成した学習器とタスクのオブジェクトをtrain関数に渡すと実行できる。ここでは先程作成した訓練セットのインデックスを利用して、タスク内のデータセットから訓練に使用する部分を指定している。

model = train(lrn, task, subset = train.set)

1.5 予測

訓練セットを適合したフィット済みモデルを使って、新しいデータに対する出力を予測するにはpredict関数を使う。Rの他の関数(lmglmなど)と基本的には使い方は同じだ。

pred = predict(model, task = task, subset = test.set)

1.6 評価

mlrにはいろいろな指標でフィット済みモデルを評価する方法が備えられている。以下では予測結果から性能指標を計算している。

performance(pred, measures = list(mmce, acc))
$> mmce  acc 
$> 0.04 0.96

誤分類率0.04、精度0.96で分類できた、という結果が得られた。

なお、ここでは色々ともっと良いやり方を省略していることに注意してほしい。では、もっと良いやり方をこの先のセクションで順次見ていこう。