mlrパッケージによる予測モデルの構築・評価

これは,R Advent Calendar 2014 6日目の記事です.
本記事では,Rで機械学習の予測モデルの構築・評価を統一的なフレームワークで実行するmlrパッケージについて入門的な説明を行います.

mlrパッケージとは

mlrパッケージは,Michael Lang氏によって開発されており,機械学習の予測モデルを構築し評価する統一的なフレームワークを提供する.use!R 2014でも発表が行われている.

基本的な流れ

kernlabパッケージに収録されているspamデータセットに対して,メールがスパムかどうかを判定するための学習器を作成してみよう.ここでは,カーネルSVMを使用して10-foldのクロスバリデーションを実行してみる.

> install.packages("mlr")
> library(mlr)
> install.packages("kernlab")
> library(kernlab)
> data(spam)
> # spamデータセットに対して目的変数をtypeとしたクラス分類タスクの作成
> task <- makeClassifTask(id="spam", data=spam, target="type")
> # カーネルSVMの学習器の作成
> learner <- makeLearner("classif.ksvm")
> # 10-foldクロスバリデーションを実行するためのデータセットの作成
> rdesc <- makeResampleDesc(method="CV", iters=10)
> # 学習の実行
> r <- resample(learner=learner, task=task, rdesc)

以下,各機能について概要的な説明を行う.

実行可能なタスク

下表のように,5つのタスクが提供されている.

関数名 タスク
makeClassifTask クラス分類
makeClusterTask クラスタリング
makeCostSensTask コスト考慮型学習
makeRegrTask 回帰
makeSurvTask 生存時間分析

リサンプリング方法

リサンプリング方法は,以下の6つが利用できる.カッコ内は,makeResampleDesc関数のmethod引数に指定する文字列を表している.

  • クロスバリデーション("CV")
  • 1つ抜きクロスバリデーション("LOOCV")
  • 繰り返しクロスバリデーション("RepCV")
  • Out-of-bagブートストラップ("Bootstrap")
  • サプサンプリング("Subsample")
  • ホールドアウト検定("Holdout")

ハイパーパラメータの最適化

ハイパーパラメータの最適化は,makeParamSet関数により探索するパラメータの範囲を指定することにより実行する.

> library(mlr)
> library(kernlab)
> data(spam)
> task <- makeClassifTask(id="spam", data=spam, target="type")
> learner <- makeLearner("classif.ksvm")
> rdesc <- makeResampleDesc(method="CV", iters=10)
> par.set <- makeParamSet(
+   makeDiscreteParam("C", values=2^(-2:2)),
+   makeDiscreteParam("sigma", values=2^(-2:2))
> )
> ctrl <- makeTuneControlGrid()
> res <- tuneParams("classif.ksvm", task=task, resampling=rdesc, par.set=par.set, control=ctrl)

属性選択

一般的に,属性選択はフィルタ法,ラッパ法の2つに大別される.フィルタ法は,学習器を構築することなく各属性の重要度を定量化するアプローチである.一方で,ラッパ法は,学習器を構築しながら書く属性の重要度を定量化する.

mlrパッケージでは,ラッパ法については以下のように4つの属性選択のアルゴリズムが提供されている.

関数名 タスク
makeFeatSelControlExhaustive Exhaustive search
makeFeatSelControlGA 遺伝的アルゴリズム
makeFeatSelControlRandom ランダム探索
makeFeatSelControlSequential 決定論的な前方/後方探索

並列計算

クロスバリデーションやグリッドサーチによるハイパーパラメータの最適化などの処理は,並列計算が可能である.

caretとの相違点

Rで機械学習の予測モデルを構築する汎用的なタスクのパッケージとしてはcaretが有名であるが,caretと比較したときにmlrは以下のような特徴を持っている.

  • グリッドサーチ以外のハイパーパラメータの最適化手法を提供
  • 様々な属性選択方法を提供
  • 不均衡データへの対応

現時点では,caretよりも使用できるアルゴリズムは少ないものの,特にハイパーパラメータの最適化や属性選択で様々な手法を提供しており,caretよりも便利なユースケースもあると思われる.今後の動向をウォッチしていきたい.