Last updated: 2014 -December 2012 -January 2010. Kajiyama             [ 目次に戻る ]

決定木・回帰木


決定木(decision tree)データが量的データかカテゴリーデータかで解析の呼び名が違うことをメモしてください. -Wikipedia

入門編を終えた後の参考書
・13章樹木モデル,"Rによるデータサイエンス", 金 明哲, 森北出版,2007.ISBN-10: 4627096011
・10章決定木,Rで学ぶデータサイエンス1"カテゴリカルデータ解析", 藤井良宜, 共立出版,2010.ISBN:978-4-320-01921-8


  1. 決定木(decision tree)--カテゴリーデータによる予測・判別・分類



  2. 初めての決定木「パッケージmvpart」インストール


    (1) 「パッケージ」インストールと読み込みの操作の手順

    > library(mvpart)
    以下にエラー library(mvpart) : 'mvpart' という名前のパッケージはありません
    
     パッケージ 'mvpart' は無事に開封され、MD5 サムもチェックされました 
    
    > library(mvpart)
    


    (2) 「決定木 rpart」解析プログラムの「パッケージ」インストール

    Rの「コンソール」画面に,

    library(mvpart)
    # と記述し,実行する.エラーが出たら,

    「パッケージ」−>「パッケージのインストール」−>

    「CRANのミラーサイトと選択」−>で

    パッケージの「mvpart」を指定しインストールする


    決定木解析プログラム「rpart」は2種類あり,
    機能を拡張したパッケージ「mvpart」の「rpart」を使用する



    (3) 「決定木 rpart」解析プログラムの「mvpartパッケージ」読み込み

    library(mvpart)
    # と記述し,決定木解析プログラム「rpart」をRに読み込む



  3. カテゴリーデータ「スタック形式」

      あやめの大きな3枚のはなびらは,「Sepal がく片」で,
    小さな3枚のはなびらが,「Petal 花びら」である.

    Species「あやめ3品種 [setosa・versicolor・virginica]」

    表1 「あやめ」データセット   「スタック形式」( 150個のサンプル )
        これは表2「iris」データセットをカテゴリーデータに変換したもの.
    ・Sepal.Length: Factorカテゴリ型 ・Sepal.Width : Factorカテゴリ型
    ・Petal.Length: Factorカテゴリ型 ・Petal.Width : Factorカテゴリ型
    ・Species: Factorカテゴリ型
     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
          5.0-6.0     3.5-4.0      0.0-2.0     0.0-1.0     setosa
          4.0-5.0     3.0-3.5      0.0-2.0     0.0-1.0     setosa
          4.0-5.0     3.0-3.5      0.0-2.0     0.0-1.0     setosa
          4.0-5.0     3.0-3.5      0.0-2.0     0.0-1.0     setosa
          5.0-6.0     3.5-4.0      0.0-2.0     0.0-1.0     setosa
          5.0-6.0     3.5-4.0      0.0-2.0     0.0-1.0     setosa
                ・・・・・・・・
                ・・・・・・・・
          6.0-7.0     3.0-3.5      4.0-6.0     2.0-3.0  virginica
          6.0-7.0     3.0-3.5      4.0-6.0     2.0-3.0  virginica
          6.0-7.0     2.5-3.0      4.0-6.0     1.0-2.0  virginica
          6.0-7.0     3.0-3.5      4.0-6.0     2.0-3.0  virginica
          6.0-7.0     3.0-3.5      4.0-6.0     2.0-3.0  virginica
          5.0-6.0     3.0-3.5      4.0-6.0     1.0-2.0  virginica
    



  4. Rに「スタック形式」のデータを読み込み,確認を行う


    (1) 「スタック形式」での操作の手順

    > x <- read.table ("clipboard", header=TRUE )
    > x 
        Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
    1        5.0-6.0     3.5-4.0      0.0-2.0     0.0-1.0     setosa
    2        4.0-5.0     3.0-3.5      0.0-2.0     0.0-1.0     setosa
    3        4.0-5.0     3.0-3.5      0.0-2.0     0.0-1.0     setosa
    4        4.0-5.0     3.0-3.5      0.0-2.0     0.0-1.0     setosa
    5        5.0-6.0     3.5-4.0      0.0-2.0     0.0-1.0     setosa
    6        5.0-6.0     3.5-4.0      0.0-2.0     0.0-1.0     setosa
                    ・・・・
                    ・・・・
    145      6.0-7.0     3.0-3.5      4.0-6.0     2.0-3.0  virginica
    146      6.0-7.0     3.0-3.5      4.0-6.0     2.0-3.0  virginica
    147      6.0-7.0     2.5-3.0      4.0-6.0     1.0-2.0  virginica
    148      6.0-7.0     3.0-3.5      4.0-6.0     2.0-3.0  virginica
    149      6.0-7.0     3.0-3.5      4.0-6.0     2.0-3.0  virginica
    150      5.0-6.0     3.0-3.5      4.0-6.0     1.0-2.0  virginica
    
    > str (x) # 必ず変数ごとのカテゴリー数のチェックをすること
    'data.frame':   150 obs. of  5 variables:
     $ Sepal.Length: Factor w/ 4 levels "4.0-5.0","5.0-6.0",..: 2 1 1 1 2  ...
     $ Sepal.Width : Factor w/ 5 levels "2.0-2.5","2.5-3.0",..: 4 3 3 3 4  ...
     $ Petal.Length: Factor w/ 4 levels "0.0-2.0","2.0-4.0",..: 1 1 1 1 1  ...
     $ Petal.Width : Factor w/ 3 levels "0.0-1.0","1.0-2.0",..: 1 1 1 1 1  ...
     $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1  ...
    
    > summary(x) # あるいはこれで,必ず変数ごとのカテゴリー数のチェックをすること
    

    (2) データフレームの読み込み

    表1 「あやめ」データセットの緑の部分をマウスで選択し,これをコピーする.

    次に,Rの「コンソール」画面に,

    x <- read.table ("clipboard", header=TRUE

    と記述し,コピーした[clipboard]データファイルを,Rの内部のデータフレーム,ファイル名x に直接読み込む.

    header=TRUE は第1行が列の変数名になっていることを指示している.

    ) # データをコピーした後で,カッコを入力する.ENTERーキーを押す.


    (3) 読み込んだデータフレームの確認

    x # と記述し,Rの内部に作成したデータフレーム x を,表示確認する.


    (4) データフレームの構造確認

    str (x) # と記述し,Rの内部のデータフレーム x の変数の内容を表示確認する.

    summary(x) # 

    ・分析で使用する変数名とカテゴリ名はRが理解した名前を使用する.

    注意: 因子(変数)のデータ形式が [Factor] 形式でないときは,[Facter]形式に変更する.

    x$変数名 <- factor( x$変数名 )



  5. 決定木による解析


    (1) 操作の手順

    > library(mvpart)
    > tree01 <- rpart(Species~., data=x )
    > tree01
    n= 150 
    
    node), split, n, loss, yval, (yprob)
          * denotes terminal node
    
     1) root 150 100 setosa (0.3333333 0.3333333 0.3333333)  
       2) Petal.Length=0.0-2.0 50   0 setosa (1.0000000 0.0000000 0.0000000) *
       3) Petal.Length=2.0-4.0,4.0-6.0,6.0-8.0 100  50 versicolor (0.0000000 0.5000000 0.5000000)  
         6) Petal.Width=1.0-2.0 71  21 versicolor (0.0000000 0.7042254 0.2957746)  
          12) Sepal.Length=5.0-6.0 28   3 versicolor (0.0000000 0.8928571 0.1071429) *
          13) Sepal.Length=4.0-5.0,6.0-7.0,7.0-8.0 43  18 versicolor (0.0000000 0.5813953 0.4186047)  
            26) Sepal.Length=6.0-7.0 36  13 versicolor (0.0000000 0.6388889 0.3611111) *
            27) Sepal.Length=4.0-5.0,7.0-8.0 7   2 virginica (0.0000000 0.2857143 0.7142857) *
         7) Petal.Width=2.0-3.0 29   0 virginica (0.0000000 0.0000000 1.0000000) *
    
    > par( xpd = NA )
    > plot(tree01, uniform=TRUE, margin=0.1 )
    > text(tree01, use.n=TRUE )
    


    (2) 「決定木 rpart」解析プログラムの「mvpartパッケージ」読み込み

    library(mvpart)
    # と記述し,決定木解析プログラム「rpart」をRに読み込む


    (3) 決定木によるあやめの分類  [目的変数 ~ 説明変数01 + 説明変数02 + 説明変数03]

    tree01 <- rpart(Species~., data=x ) #  と記述し,決定木解析プログラム「rpart」を使用する.
    tree01 #  と記述し,解析結果を表示する.

    tree01.2 <- rpart(Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data=x )
    #  と記述し,説明変数を指定できる
    tree01 <- rpart(Species~., data=x ) #  この書式は目的変数以外をすべて説明変数として分析

    ・結果はRが理解したカテゴリ名が使用される.


    (4) 解析結果の視覚化・グラフ化

    par( xpd = NA ) #  と記述し,グラフ全体表示のおまじない
    plot(tree01, uniform=TRUE, margin=0.1 ) #  と記述し,樹木図を作成する.
    text(tree01, use.n=TRUE, all=TRUE ) #  と記述し,樹木図に文字を入れる
    #


  6. 解釈


  1. 回帰木(regression tree)--量的データによる予測・判別・分類



  2. 初めての回帰木「パッケージmvpart」インストール


    (1) 「パッケージ」インストールと読み込みの操作の手順

    > library(mvpart)
    以下にエラー library(mvpart) : 'mvpart' という名前のパッケージはありません
    
     パッケージ 'mvpart' は無事に開封され、MD5 サムもチェックされました 
    
    > library(mvpart)
    


    (2) 「回帰木 rpart」解析プログラムの「パッケージ」インストール

    Rの「コンソール」画面に,

    library(mvpart)
    # と記述し,実行する.エラーが出たら,

    「パッケージ」−>「パッケージのインストール」−>

    「CRANのミラーサイトと選択」−>で

    パッケージの「mvpart」を指定しインストールする


    回帰木解析プログラム「rpart」は2種類あり,
    機能を拡張したパッケージ「mvpart」の「rpart」を使用する



    (3) 「回帰木 rpart」解析プログラムの「mvpartパッケージ」読み込み

    library(mvpart)
    # と記述し,回帰木解析プログラム「rpart」をRに読み込む



  3. 量的データ「スタック形式」

      あやめの大きな3枚のはなびらは,「Sepal がく片」で,
    小さな3枚のはなびらが,「Petal 花びら」である.

    Species「あやめ3品種 [setosa・versicolor・virginica]」

    表2 「iris」データセット   「スタック形式」( 150個のサンプル )

    ・Sepal.Length: num数値型 ・Sepal.Width : num数値型
    ・Petal.Length: num数値型 ・Petal.Width : num数値型
    ・Species: Factorカテゴリ型
     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
              5.1         3.5          1.4         0.2     setosa
              4.9         3.0          1.4         0.2     setosa
              4.7         3.2          1.3         0.2     setosa
              4.6         3.1          1.5         0.2     setosa
              5.0         3.6          1.4         0.2     setosa
              5.4         3.9          1.7         0.4     setosa
                ・・・・・・・・
                ・・・・・・・・
              6.7         3.3          5.7         2.5  virginica
              6.7         3.0          5.2         2.3  virginica
              6.3         2.5          5.0         1.9  virginica
              6.5         3.0          5.2         2.0  virginica
              6.2         3.4          5.4         2.3  virginica
              5.9         3.0          5.1         1.8  virginica
    



  4. Rに「スタック形式」のデータを読み込み,確認を行う


    (1) 「スタック形式」での操作の手順

    > y <- read.table ("clipboard", header=TRUE )
    > y 
        Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
    1            5.1         3.5          1.4         0.2     setosa
    2            4.9         3.0          1.4         0.2     setosa
    3            4.7         3.2          1.3         0.2     setosa
    4            4.6         3.1          1.5         0.2     setosa
    5            5.0         3.6          1.4         0.2     setosa
    6            5.4         3.9          1.7         0.4     setosa
                    ・・・・
                    ・・・・
    145          6.7         3.3          5.7         2.5  virginica
    146          6.7         3.0          5.2         2.3  virginica
    147          6.3         2.5          5.0         1.9  virginica
    148          6.5         3.0          5.2         2.0  virginica
    149          6.2         3.4          5.4         2.3  virginica
    150          5.9         3.0          5.1         1.8  virginica
    
    > str (y)  # 必ず変数ごとのカテゴリー数のチェックをすること
    'data.frame':   150 obs. of  5 variables:
     $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
     $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
     $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
     $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
     $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 ...
    
    > summary(y) # あるいはこれで,必ず変数ごとのカテゴリー数のチェックをすること
    

    (2) データフレームの読み込み

    表2 「iris」データセットの緑の部分をマウスで選択し,これをコピーする.

    次に,Rの「コンソール」画面に,

    y <- read.table ("clipboard", header=TRUE

    と記述し,コピーした[clipboard]データファイルを,Rの内部のデータフレーム,ファイル名y に直接読み込む.

    header=TRUE は第1行が列の変数名になっていることを指示している.

    ) # データをコピーした後で,カッコを入力する.ENTERーキーを押す.


    (3) 読み込んだデータフレームの確認

    y # と記述し,Rの内部に作成したデータフレーム y を,表示確認する.


    (4) データフレームの構造確認

    str (y) # と記述し,Rの内部のデータフレーム y の変数の内容を表示確認する.

    summary(y) # 

    ・分析で使用する変数名とカテゴリ名はRが理解した名前を使用する.

    注意: 因子(変数)のデータ形式が [Factor] 形式でないときは,[Facter]形式に変更する.

    y$変数名 <- factor( y$変数名 )



  5. 回帰木による解析


    (1) 操作の手順

    > library(mvpart)
    > tree02 <- rpart(Species~., data=y )
    > tree02
    n= 150 
    
    node), split, n, loss, yval, (yprob)
          * denotes terminal node
    
     1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)  
       2) Petal.Length< 2.45 50   0 setosa (1.00000000 0.00000000 0.00000000) *
       3) Petal.Length>=2.45 100  50 versicolor (0.00000000 0.50000000 0.50000000)  
         6) Petal.Width< 1.75 54   5 versicolor (0.00000000 0.90740741 0.09259259)  
          12) Petal.Length< 4.95 48   1 versicolor (0.00000000 0.97916667 0.02083333) *
          13) Petal.Length>=4.95 6   2 virginica (0.00000000 0.33333333 0.66666667) *
         7) Petal.Width>=1.75 46   1 virginica (0.00000000 0.02173913 0.97826087) *
     
    
    
    > par( xpd = NA )
    > plot(tree02, uniform=TRUE, margin=0.2 )
    > text(tree02, use.n=TRUE, all=TRUE  )
    


    (2) 「回帰木 rpart」解析プログラムの「mvpartパッケージ」読み込み

    library(mvpart)
    # と記述し,回帰木解析プログラム「rpart」をRに読み込む


    (3) 回帰木によるirisの分類  [目的変数 ~ 説明変数01 + 説明変数02 + 説明変数03]

    tree02 <- rpart(Species~., data=y ) #  と記述し,回帰木解析プログラム「rpart」を使用する.
    tree02 #  と記述し,解析結果を表示する.

    tree02.2 <- rpart(Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data=y )
    #  と記述し,説明変数を指定できる
    tree02 <- rpart(Species~., data=y ) #  この書式は目的変数以外をすべて説明変数として分析

    ・結果はRが理解したカテゴリ名が使用される.


    (4) 解析結果の視覚化・グラフ化

    par( xpd = NA ) #  と記述し,グラフ全体表示のおまじない
    plot(tree02, uniform=TRUE, margin=0.2 ) #  と記述し,樹木図を作成する.
    text(tree02, use.n=TRUE, all=TRUE ) #  と記述し,樹木図に文字を入れる
    #


  6. 解釈



決定木・回帰木による分析     [ 目次に戻る ]