rpart
決定木
rpart.object
https://rdrr.io/cran/rpart/man/rpart.object.html
rpart() による学習結果のオブジェクト
rpart.object の要素
frame: データフレーム、tree を表現するvar: 分割に使用される変数、<leaf>は末端ノードnwtdevyvalcomplexityncompetensurrogateyval2
where: 整数ベクトル、訓練データのレコード数と同じ長さ。訓練データの各レコードがどのリーフに落ちたかを表す。値はframeの行番号call: このオブジェクトを作成するときに記述されたRコードのイメージterms:terms.objectフォーミュラをサマライズしたもの、ユーザーは基本使わないsplits: 分割を記述する matrix。列は、“count” “ncat” “improve” “index” “adj”、各行は分割に使われる変数名csplit: 整数行列、少なくとも1つの分割変数が factor である場合に作成されるmethod: 文字列、(“class”, “exp”, “poisson”, “anova” or “user"のうちのどれか)、この tree を作成するときに使われた方法cptable: 数値行列、complexityパラメタに基づいて決定された最適な枝刈りの情報? 列名 “CP” “nsplit” “rel error” “xerror” “xstd”variable.importance: 名前付きベクトル、変数重要度、numresp: 整数スカラー、目的変数の値の数、factorのレベルの数parms: 学習時に与えられたパラメタの値control: 学習時に与えられたパラメタの値functions:rpartオブジェクトのMethodとして使われる関数summary(),print()andtext()ordered: 名前付き論理ベクトル、要素名は変数名、値はその変数が順序付きfactorであるかを表すna.action:stats::model.frameから返される値、NAの取り扱いを決める
rpart.object の属性 attributes()
xlevels: 説明変数にある factor 型のレベルylevels: 目的変数の factor 型のレベル
rpart:::predict.rpart()
rpart.object を使って predict() したときに呼び出されるメソッド
https://www.rdocumentation.org/packages/rpart/versions/4.1-15/topics/predict.rpart
predict(object, newdata,
type = c("vector", "prob", "class", "matrix"),
na.action = na.pass, …)
type: 分類ではデフォルトは prob クラス確率, class なら予測された目的変数 (facor) の値、vector なら目的変数 factor の levels 属性の要素番号、回帰の場合は デフォルトは vector で目的変数の値(多分)
typpe="vector" の時は、rpart.object$frame$yval の値が返されるらしい(各データが落ちたリーフの yval の値) これを使ってリーフ番号を取得できる
rpart関係の別のライブラリ
rpart.plotitree: rpartの拡張らしい、rpartの作者もかかわっているtreeClust
rpart.plot::rpart.predict()
新しいデータに対して予測する
rpart::predict.rpart() と同じだが、予測値のノード番号とルールを出力できる
rpart.plot::rpart.predict(object, newdata,
type = c("vector", "prob", "class", "matrix"),
na.action = na.pass,
nn=FALSE, rules=FALSE, ...)
nn:TRUEなら ノード番号の列も返すrules:TRUEなら、ルールを文字列で記述した列も返す...:rpart.rules()に渡される引数、例えばclip.facs=TRUE
rpart.plot::rpart.rules
rpart.object から 各リーフに至るルールを表示する
rpart.rules(x = stop("no 'x' argument"),
style = "wide", cover = FALSE, nn = FALSE,
roundint = TRUE, clip.facs = FALSE,
varorder = NULL, ...)
しかし、リーフの最大値は1000に制限されているので、それ以上に複雑なtreeのルールを生成したいときは、パッケージをいじる必要がある
rpart.plot/R/rpart.rules.R の中の maxrules <- 1e3 をもっと大きい値に書き換える
そして、ローカルのソースからインストールする
install.packages("./rpart.plot/", type="source", repos = NULL)
style = “tall”
出力される値(class c("rpart.rules", "data.frame"))
target: 分類:クラス確率の文字列
行名: おそらく rpart.object$frame の行名に対応する?
treeClust::rpart.predict.leaves()
rpart.predict.leaves(rp, newdata, type = "where")
type"where": “rpart.object” の要素frameの行番号を返す"leaf": 実際のリーフ番号(frameの行名)を返す