R完了:決定ツリー分類rpartを使用して決定ツリー分類を完了する例は以下の通りである.
従来のID 3およびC 4.5一般的に分類問題に用いるが、ここでID 3は情報ゲインを用いて特徴選択を行う、すなわち再帰的な選択分類能力が最も強い特徴がデータを分割する、C 4.5唯一異なるのは、情報利得比を用いて特徴選択を行うことである.
訓練データDに対する特徴Aの情報利得g(D,A)=集合Dの経験的エントロピーH(D)−特徴Aが与えられた場合のDの経験的条件エントロピーH(D|A)
特徴A対トレーニングデータDの情報利得比r(D,A)=g(D,A)/H(D)
CART(分類と回帰)モデルは分類にも回帰にも使用でき,回帰ツリー(最小二乗回帰ツリー生成アルゴリズム)に対しては最適分割変数と最適分割点を探す必要があり,分類ツリー(CART生成アルゴリズム)に対してはキニー指数を用いて最適特徴を選択する.
install.packages("rpart")
install.packages("rpart.plot")
library(rpart);
## rpart.control对树进行一些设置
## xval是10折交叉验证
## minsplit是最小分支节点数,这里指大于等于20,那么该节点会继续分划下去,否则停止
## minbucket:叶子节点最小样本数
## maxdepth:树的深度
## cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度
ct## kyphosis是rpart这个包自带的数据集
## na.action:缺失数据的处理办法,默认为删除因变量缺失的观测而保留自变量缺失的观测。
## method:树的末端数据类型选择相应的变量分割方法:
## 连续性method=“anova”,离散型method=“class”,计数型method=“poisson”,生存分析型method=“exp”
## parms用来设置三个参数:先验概率、损失矩阵、分类纯度的度量方法(gini和information)
## cost我觉得是损失矩阵,在剪枝的时候,叶子节点的加权误差与父节点的误差进行比较,考虑损失矩阵的时候,从将“减少-误差”调整为“减少-损失”
fit data=kyphosis, method="class",control=ct,
parms = list(prior = c(0.65,0.35), split = "information"));## 第一种
par(mfrow=c(1,3));
plot(fit);
text(fit,use.n=T,all=T,cex=0.9);## 第二种,这种会更漂亮一些
library(rpart.plot);
rpart.plot(fit, branch=1, branch.type=2, type=1, extra=102,
shadow.col="gray", box.col="green",
border.col="blue", split.col="red",
split.cex=1.2, main="Kyphosis决策树");## rpart包提供了复杂度损失修剪的修剪方法,printcp会告诉分裂到每一层,cp是多少,平均相对误差是多少
## 交叉验证的估计误差(“xerror”列),以及标准误差(“xstd”列),平均相对误差=xerror±xstd
printcp(fit);## 通过上面的分析来确定cp的值
## 我们可以用下面的办法选择具有最小xerror的cp的办法:
## prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])fit2 rpart.plot(fit2, branch=1, branch.type=2, type=1, extra=102,
shadow.col="gray", box.col="green",
border.col="blue", split.col="red",
split.cex=1.2, main="Kyphosis决策树");
: