N進木 のRによる実施例です。
このコードの前に、ライブラリ「CHAID」のインストールが必要です。
データは、Yと3つのXがあるとします。100行分あります。
setwd("C:/Rtest") # 作業用ディレクトリを変更
library(CHAID) # ライブラリを読み込み
Data <- read.csv("Data.csv", header=T, stringsAsFactors=TRUE) # データを読み込み
treeModel <- chaid(Y ~ ., data = Data)# CHAIDを実行
plot(treeModel) # グラフにする。
データは、Yと3つのXがあるとします。100行分あります。X1は量的データになっています。
なお、このコードは、Yが量的データでも使えます。
setwd("C:/Rtest") # 作業用ディレクトリを変更
library(CHAID) # ライブラリを読み込み
Data <- read.csv("Data.csv", header=T, stringsAsFactors=TRUE) # データを読み込み
for (i in 1:ncol(Data)) { # ループの始まり。データの列数を数えて同じ回数繰り返す
if (class(Data[,i]) == "numeric") { # 条件分岐の始まり
Data[,i] <- droplevels(cut(Data[,i], breaks = 5,include.lowest = TRUE))# 5分割する場合。量的データは、質的データに変換する。
} # if文の処理の終わり
} # ループの終わり
treeModel <- chaid(Y ~ ., data = Data)# CHAIDを実行
plot(treeModel) # グラフにする。
Wekaにある「wether.numeric」というサンプルデータをcsv形式にして、Yの列名を変えたものでは枝分かれしませんでした。
原因は、このデータが14行しかないスモールデータのためと思います。
パラメータを変えれば様子が変わるかもしれませんが、そこまでは試していません。
C5.0は、量的・質的データが混ざっていても使える手法です。 量的データが二進木、質的データがN進木になります。
RのC50というライブラリーで使えます。インストールは簡単です。 下記のコードですが、まず、csvファイルの読み込み時に、文字列型(strings)と自動認識された列は、因子型(factor)に変換しています。 forから始まる5行は、論理値型(logical)と自動認識された列を因子型に変換しています。 これらの前処理をしないと、C50のパッケージではエラーになります。
setwd("C:/Rtest") # 作業用ディレクトリを変更
library(C50) # ライブラリを読み込み
library(partykit) # ライブラリを読み込み
Data <- read.csv("Data.csv", header=T, stringsAsFactors=TRUE) # データを読み込み
if (class(Data$Y) == "numeric") { # 条件分岐の始まり
Data$Y <- droplevels(cut(Data$Y, breaks = 5,include.lowest = TRUE))# 5分割する場合。量的データは、質的データに変換する。
} # if文の処理の終わり
for (i in 1:ncol(Data)) { # ループの始まり。データの列数を数えて同じ回数繰り返す
if (class(Data[,i]) == "logical") { # 条件分岐の始まり
Data[,i] <- as.factor(Data[,i])# logical型の列は、factor型に変換する。
} # if文の処理の終わり
} # ループの終わり
treeModel <- C5.0(Y ~ ., data = Data)# C5.0を実行
plot(as.party(treeModel)) # グラフにする。繰り返した回数分のグラフファイルができる。
左が、CHAIDの「XやYに量的データが混ざっている場合」で作ったデータの結果です。
右が
Wekaにある「wether.numeric」というサンプルデータをcsv形式にして、Yの列名を変えたものの結果です。
WekaのJ48とほぼ同じ結果になりました。
RのCHAIDのパラメータ
https://rdrr.io/rforge/CHAID/man/chaid.html
CHAIDのインストール
CHAIDは、一般的なRのパッケージとは違って、CRANにはありません。このページのファイルをダウンロードして手動で読み込むか、
R-forgeから読み込むように設定を変える必要があります。
https://r-forge.r-project.org/R/?group_id=343