0

私は使用していて、不一致partykitの可能性があることに気付きましたvarid(何かを誤解していない限り)。以下はサンプルコードです。

によって返されるルート ノードはnodeapply、分割変数として変数 5 を示します。

また、明示的に生成されたリストの最初の要素には5 があります。データ フレームsplit$varidを見ると、5 番目の列はであり、4 番目の列は、オブジェクトによって示されるルート ノードのです。irisSpeciesPetal.Widthvaridj48_party

varid実際に使われている機能が+1されているようですが、これは意図的なものですか?

> library(partykit)
> library(RWeka)
> data("iris")
> j48 <- J48(Species~., data=iris)
> j48_party <- as.party(j48)
> j48_party

Model formula:
Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

Fitted party:
[1] root
|   [2] Petal.Width <= 0.6: setosa (n = 50, err = 0.0%)
|   [3] Petal.Width > 0.6
|   |   [4] Petal.Width <= 1.7
|   |   |   [5] Petal.Length <= 4.9: versicolor (n = 48, err = 2.1%)
|   |   |   [6] Petal.Length > 4.9
|   |   |   |   [7] Petal.Width <= 1.5: virginica (n = 3, err = 0.0%)
|   |   |   |   [8] Petal.Width > 1.5: versicolor (n = 3, err = 33.3%)
|   |   [9] Petal.Width > 1.7: virginica (n = 46, err = 2.2%)

Number of inner nodes:    4
Number of terminal nodes: 5
> colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     
> nodeapply(j48_party)
$`1`
[1] root
|   [2] V5 <= 0.6 *
|   [3] V5 > 0.6
|   |   [4] V5 <= 1.7
|   |   |   [5] V4 <= 4.9 *
|   |   |   [6] V4 > 4.9
|   |   |   |   [7] V5 <= 1.5 *
|   |   |   |   [8] V5 > 1.5 *
|   |   [9] V5 > 1.7 *

> nodes <- as.list(j48_party$node)
> nodes[[1]]$split$varid
[1] 5
4

1 に答える 1

0

違いは次のとおりです。J48()他のほとんどのモデリング関数 ( 、 など) と同様lm()に、提供されたglm()を単に直接使用するのではdataなく、最初にmodel.frame. Surv()これにより、変数の変換 (たとえば、ログの取得、因子またはオブジェクトの作成)、data呼び出し環境にはない変数の収集、モデルに含まれていない変数の除外などが既に実行されています。詳細とリンクについては、formulaを参照してください。?model.frame

したがって、によって作成されたオブジェクトにJ48()model.frame正確irisなデータではありませんが、応答変数が最初の列に移動されています。

head(model.frame(j48))
##   Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1  setosa          5.1         3.5          1.4         0.2
## 2  setosa          4.9         3.0          1.4         0.2
## 3  setosa          4.7         3.2          1.3         0.2
## 4  setosa          4.6         3.1          1.5         0.2
## 5  setosa          5.0         3.6          1.4         0.2
## 6  setosa          5.4         3.9          1.7         0.4

そして、そこからの情報もオブジェクトに引き継がれpartyます。

j48_party$data
## [1] Species      Sepal.Length Sepal.Width  Petal.Length Petal.Width 
## <0 rows> (or 0-length row.names)

[注: この場合J48()、メタ情報のみが保存されますが、実際のデータはここでは必要ないため削除されます。ctree()しかし、たとえばこれは異なります。]

これmodel.frame()が元のデータと異なる可能性があることを確認するには、次の状況を考えてみましょう:呼び出し環境の一部ではなくnoise、呼び出し環境にある新しい変数を作成し、ログを取得して、いくつかの変数を省略します。iris

set.seed(1) 
noise <- rnorm(150)
j48 <- J48(Species ~ log(Petal.Width) + noise, data = iris)
j48_party <- as.party(j48)
head(model.frame(j48))
##   Species log(Petal.Width)      noise
## 1  setosa       -1.6094379 -0.6264538
## 2  setosa       -1.6094379  0.1836433
## 3  setosa       -1.6094379 -0.8356286
## 4  setosa       -1.6094379  1.5952808
## 5  setosa       -1.6094379  0.3295078
## 6  setosa       -0.9162907 -0.8204684
j48_party$data
## [1] Species          log(Petal.Width) noise           
## <0 rows> (or 0-length row.names)
于 2016-03-02T12:06:52.997 に答える