ここでは、決定木の目的変数が連続値である場合の回帰木について、R言語の「rpart」パッケージを用いて簡単に見ていく。

まずは必要となるパッケージのインストールとロードを行う。「rpart」パッケージは決定木を行うためのものだが、「rpart.plot」と「partykit」パッケージは結果を視覚的に表示するために使うので、あらかじめインストールとロードをしておく。


> install.packages("rpart")
> install.packages("rpart.plot")
> install.packages("partykit")
> library(rpart)
> library(rpart.plot)
> library(partykit)

サンプルデータとして、「rpart」パッケージに含まれる「cu.summary」を使わせていただいた。


> head(cu.summary)
                Price Country Reliability Mileage  Type
Acura Integra 4 11950   Japan Much better      NA Small
Dodge Colt 4     6851   Japan              NA Small
Dodge Omni 4     6995     USA  Much worse      NA Small
Eagle Summit 4   8895     USA      better      33 Small
Ford Escort   4  7402     USA       worse      33 Small
Ford Festiva 4   6319   Korea      better      37 Small

決定木を実行するには、rpart関数を用いる。目的変数が連続値であれば、自動的に回帰木として扱われる。同様に、目的変数がカテゴリ値ならば分類木として扱われる。


> rt <- rpart(Price ~ Mileage + Type + Country, data = cu.summary)
> print(rt)
n= 117 

node), split, n, deviance, yval
      * denotes terminal node

   1) root 117 7407473000 15743.460  
     2) Type=Compact,Small,Sporty,Van 80 3322389000 13035.010  
       4) Country=Brazil,France,Japan,Japan/USA,Korea,Mexico,USA 69 1426421000 11555.160  
         8) Type=Small 21   50309830  7629.048 *
         9) Type=Compact,Sporty,Van 48  910790000 13272.830  
           18) Country=Japan/USA,Mexico,USA 29  482343500 12241.550 *
           19) Country=France,Japan 19  350528000 14846.890 *
       5) Country=Germany,Sweden 11  797004200 22317.730 *
     3) Type=Large,Medium 37 2229351000 21599.570  
       6) Country=France,Korea,USA 25 1021102000 18697.280  
         12) Type=Medium 18  741101600 17607.440 *
	     13) Type=Large 7  203645100 21499.710 *
       7) Country=England,Germany,Japan,Sweden 12  558955000 27646.000 *

この結果をもっと視覚的に分かりやすいグラフとして表示してみる。まずは、標準のplot関数を用いてみる。


> par(xpd = NA)
> plot(rt, branch = 0.8, margin = 0.05)
> text(rt, use.n = TRUE, all = TRUE)

decision-tree-regression-tree-rpart

次に、「rpart.plot」パッケージのrpart.plot関数を用いてみる。


> rpart.plot(rt, type = 1, uniform = TRUE, extra = 1, under = 1, faclen = 0)

decision-tree-regression-tree-rpart.plot

最後に、「partykit」パッケージのas.party関数用いてデータを変換したものをplot関数に用いてみる。


> plot(as.party(rt))

decision-tree-regression-tree-rpart-party

これらのグラフはそれぞれ見栄えが異なるので、気に入ったものを使えばよいと思うが、「partkit」パッケージを用いたものが、比較的誰にでもわかりやすいように感じる。

次に剪定を考えるため、printcp関数と、plotcp関数を実行してみる。


> printcp(rt)

Regression tree:
rpart(formula = Price ~ Mileage + Type + Country, data = cu.summary)

Variables actually used in tree construction:
[1] Country Type   

Root node error: 7407472615/117 = 63311732

n= 117 

        CP nsplit rel error  xerror    xstd
1 0.250522      0   1.00000 1.01365 0.15804
2 0.148359      1   0.74948 0.90282 0.16685
3 0.087654      2   0.60112 0.79992 0.15733
4 0.062818      3   0.51347 0.65730 0.11368
5 0.010519      4   0.45065 0.55595 0.10363
6 0.010308      5   0.44013 0.57370 0.10665
7 0.010000      6   0.42982 0.57370 0.10665

> plotcp(rt)

decision-tree-regression-tree-rpart-cp

plotcp関数の結果から剪定の基準をcp=0.026として、再度決定木を行うと以下のようになる。


> rt2 <- rpart(Price ~ Mileage + Type + Country, data = cu.summary, cp = 0.026)
> print(rt2)
n= 117 

node), split, n, deviance, yval
      * denotes terminal node

  1) root 117 7407473000 15743.460  
    2) Type=Compact,Small,Sporty,Van 80 3322389000 13035.010  
      4) Country=Brazil,France,Japan,Japan/USA,Korea,Mexico,USA 69 1426421000 11555.160  
        8) Type=Small 21   50309830  7629.048 *
        9) Type=Compact,Sporty,Van 48  910790000 13272.830 *
      5) Country=Germany,Sweden 11  797004200 22317.730 *
    3) Type=Large,Medium 37 2229351000 21599.570  
      6) Country=France,Korea,USA 25 1021102000 18697.280 *
      7) Country=England,Germany,Japan,Sweden 12  558955000 27646.000 *

decision-tree-regression-tree-rpart-cp-prune

predict関数を用いると、予測が可能となる。ここでは、簡単のため、cu.summaryデータを二分割したものを用いる。


> train <- cu.summary[1:100,]
> test <- cu.summary[101:112,]
> rtp <- rpart(Price ~ Mileage + Type + Country, data = train)
> p <- predict(rtp, newdata = test)
> print(p)
          Buick Electra V6          Buick Le Sabre V6 
                  11981.79                   11981.79 
      Cadillac Brougham V8       Cadillac De Ville V8 
                  11981.79                   11981.79 
      Chevrolet Caprice V8 Ford LTD Crown Victoria V8 
                  11981.79                   11981.79 
       Lincoln Town Car V8         Chevrolet Astro V6 
                  11981.79                   11981.79 
   Chevrolet Lumina APV V6            Dodge Caravan 4 
                  11981.79                   11981.79 
    Dodge Grand Caravan V6           Ford Aerostar V6 
                  11981.79                   11981.79 

関連する記事

  • R言語 CRAN Task View:経験的ファイナンスR言語 CRAN Task View:経験的ファイナンス CRAN Task View: Empirical Financeの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Dirk Eddelbuettel Contact: Dirk.Eddelbuettel at […]
  • Ubuntu,R OpenGLを用いた3次元可視化パッケージrglのインストール方法Ubuntu,R OpenGLを用いた3次元可視化パッケージrglのインストール方法 Ubuntu上のRで、OpenGLを用いた3次元可視化パッケージであるrglをインストールする方法をいくつかのパターンに分けてお伝します。 Rはaptコマンドによりインストールされているものとします。 R上でinstall.packages関数によりrlgパッケージをインストールしようとしても、次のように「X11が見つからない」とエラーが出てインストールできません。 […]
  • SlideShareで公開されているR言語関係のまとめSlideShareで公開されているR言語関係のまとめ SlideShareで公開されているR言語関係の資料をまとめてみたのでご紹介する。全てを網羅しているわけではないが、あなたのお役に立てれば幸いだ。 Rによる医療統計2015 第1部 医療統計の基礎知識 前編 2015-12-18 / 70 slides Rによる医療統計2015 第1部 後半 2015-12-18 / 57 […]
  • RStudioのGlobal Optionsの各種設定RStudioのGlobal Optionsの各種設定 RStudioのGlobal Optionsにどのような内容が記載されているかをお伝えいたします。 RStudioのGlobal Optionsは、メニューバーからToolsを選択して、表示されたポップアップ内にあります。 目次 General: 一般 Code: コード Editing: 編集 Display: 表示 […]
  • WindowsでHeidiSQLを使用してMariaDBをバックアップ・リストアするの方法WindowsでHeidiSQLを使用してMariaDBをバックアップ・リストアするの方法 WindowsでHeidiSQLを使用してMariaDBをバックアップおよびリストア(復元)する方法をお伝えいたします。 MariaDBのバックアップ方法はいくつかありますが、今回ご紹介する方法は、ダンプファイルの作成という方法になります。MariaDBのダンプファイルの作成は、通常、CUI(黒い文字だけの画面)でmysqldumpというコマンドラインツールを用いて行い […]
決定木 – 回帰木