Rによるデータ分析

RによるN進木

N進木 のRによる実施例です。

CHAID

質的データだけの場合(CHAID)

このコードの前に、ライブラリ「CHAID」のインストールが必要です。

データは、Yと3つのXがあるとします。100行分あります。
Decision Tree

setwd("C:/Rtest") # 作業用ディレクトリを変更
library(CHAID)
# ライブラリを読み込み
Data <- read.csv("Data.csv", header=T, stringsAsFactors=TRUE)
# データを読み込み
treeModel <- chaid(Y ~ ., data = Data)
# CHAIDを実行
plot(treeModel)
# グラフにする。
Decision Tree

XやYに量的データが混ざっている場合(CHAID)

データは、Yと3つのXがあるとします。100行分あります。X1は量的データになっています。
Decision Tree

なお、このコードは、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)
# グラフにする。
Decision Tree

Wekaにある「wether.numeric」というサンプルデータをcsv形式にして、Yの列名を変えたものでは枝分かれしませんでした。 原因は、このデータが14行しかないスモールデータのためと思います。 パラメータを変えれば様子が変わるかもしれませんが、そこまでは試していません。
Decision Tree

C5.0

XやYに量的データが混ざっている場合(C5.0)

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とほぼ同じ結果になりました。
Decision Tree Decision Tree



Rによる決定木

Rによるランダムフォレスト

Rによるモデル木

参考文献

CHAID

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





Tweet データサイエンス教室