例6-13では、ディシジョン・ツリーおよびルールベース・モデルを構築する関数が含まれるC50
パッケージを使用します。このパッケージには、トレーニング・データとテスト・データのセットも含まれています。例6-13では、状態ごとのデータに基づいて1つのチャーン・モデルを作成することを目的に、C50
パッケージのchurn
データセットからのchurnTrain
トレーニング・データセットに基づいてC5.0モデルを構築します。この例では、次の操作を実行しています。
C50
パッケージをロードした後に、churn
データセットをロードします。
ore.create
関数を使用して、churnTrain
(data.frame
オブジェクト)からCHURN_TRAIN
データベース表およびそのプロキシore.frame
オブジェクトを作成します。
CHURN_TRAIN
(プロキシore.frame
オブジェクト)をore.groupApply
関数の最初の引数として指定し、state
列をINDEX
引数として指定します。ore.groupApply
関数は、state
列のデータをパーティショニングし、ユーザー定義の関数を各パーティションで呼び出します。
ore.groupApply
関数によって返されるore.list
オブジェクトを取得するための変数modList
を作成します。ore.list
オブジェクトには、データの各パーティションでユーザー定義の関数を実行した結果が含まれています。この場合は、状態ごとに1つのC5.0モデルで、各モデルはore.object
オブジェクトとして格納されています。
ユーザー定義の関数を指定します。ユーザー定義の関数の最初の引数は、データ(1つの状態に関連付けられたすべてのデータ)の1つのパーティションを受け取ります。
ユーザー定義の関数は、次のことを実行します。
データベースのRエンジンで起動したときに関数で使用できるように、C50パッケージをロードします。
state
列がモデルに含まれないように、data.frame
からこの列を削除します。
ore.frame
はファクタを定義しますが、ユーザー定義の関数にロードされたときにファクタが文字列ベクターとして表示されるため、列をファクタに変換します。
状態のモデルを構築し、それを返します。
ore.pull
関数を使用してデータベースからmod.MA
変数としてモデルを取得し、そこでsummary
関数を呼び出します。mod.MA
のクラスはC5.0
です。
例6-13 ore.groupApply関数の使用方法
library(C50) data("churn") ore.create(churnTrain, "CHURN_TRAIN") modList <- ore.groupApply( CHURN_TRAIN, INDEX=CHURN_TRAIN$state, function(dat) { library(C50) dat$state <- NULL dat$churn <- as.factor(dat$churn) dat$area_code <- as.factor(dat$area_code) dat$international_plan <- as.factor(dat$international_plan) dat$voice_mail_plan <- as.factor(dat$voice_mail_plan) C5.0(churn ~ ., data = dat, rules = TRUE) }); mod.MA <- ore.pull(modList$MA) summary(mod.MA)例6-13のリスト
R> library(C50) R> data(churn) R> R> ore.create(churnTrain, "CHURN_TRAIN") R> R> modList <- ore.groupApply( + CHURN_TRAIN, + INDEX=CHURN_TRAIN$state, + function(dat) { + library(C50) + dat$state <- NULL + dat$churn <- as.factor(dat$churn) + dat$area_code <- as.factor(dat$area_code) + dat$international_plan <- as.factor(dat$international_plan) + dat$voice_mail_plan <- as.factor(dat$voice_mail_plan) + C5.0(churn ~ ., data = dat, rules = TRUE) + }); R> mod.MA <- ore.pull(modList$MA) R> summary(mod.MA) Call: C5.0.formula(formula = churn ~ ., data = dat, rules = TRUE) C5.0 [Release 2.07 GPL Edition] Thu Feb 13 15:09:10 2014 ------------------------------- Class specified by attribute `outcome' Read 65 cases (19 attributes) from undefined.data Rules: Rule 1: (52/1, lift 1.2) international_plan = no total_day_charge <= 43.04 -> class no [0.963] Rule 2: (5, lift 5.1) total_day_charge > 43.04 -> class yes [0.857] Rule 3: (6/1, lift 4.4) area_code in {area_code_408, area_code_415} international_plan = yes -> class yes [0.750] Default class: no Evaluation on training data (65 cases): Rules ---------------- No Errors 3 2( 3.1%) << (a) (b) <-classified as ---- ---- 53 1 (a): class no 1 10 (b): class yes Attribute usage: 89.23% international_plan 87.69% total_day_charge 9.23% area_code Time: 0.0 secs