R语言-决策树算法(C4.5和CART)的实现

决策树算法的实现:

一、C4.5算法的实现


a、需要的包:sampling、party

library(sampling)
library(party)

sampling用于实现数据分层随机抽样,构造训练集和测试集。

party用于实现决策树算法

另外,还可以设置随机数种子,可以获得相同的随机数。方便数据重复检验。

#设置随机数种子,可以获得相同的随机数
set.seed(100)


b、数据准备

我们使用iris数据集作为算法使用的数据集,通过下列各方法可以查看数据集的各种指标。

head(iris)
str(iris)
dim(iris)
然后构造训练集和测试集

sub_train = strata(iris,
                   stratanames = "Species",
                   size = rep(35, 3),
                   method = "srswor")
data_train = iris[sub_train$ID_unit, ]
data_test = iris[-sub_train$ID_unit, ]
抽样方法是分层不放回抽样。


c、训练模型

iris_tree = ctree(Species ~ ., data = data_train)
我们可以通过方法print()或者plot()查看模型:

#查看模型
print(iris_tree)
plot(iris_tree)
plot(iris_tree,type="simple")
得到的结果如下:

R语言-决策树算法(C4.5和CART)的实现_第1张图片

R语言-决策树算法(C4.5和CART)的实现_第2张图片R语言-决策树算法(C4.5和CART)的实现_第3张图片


d、用测试集检验模型

test_pre = predict(iris_tree,newdata = data_test)
table(test_pre,data_test$Species)
correct = sum(as.numeric(test_pre)==as.numeric(data_test$Species))/nrow(data_test)
得到的结果如下图:


对测试集的判断准确率0.9333。

我们也可以看一下模型对训练集的判断准确率:

table(predict(iris_tree),data_train$Species)
correct = sum(as.numeric(predict(iris_tree))==as.numeric(data_train$Species))/nrow(data_train)
得到结果:


准确率0.97143。


二、CART算法的实现

添加以来的包

library(xts)
library(TTR)
library(quantmod)
library(ROCR)
library(DMwR)
可用于查看连续变量的相关性

#查看所有连续变量的相关性,所有分类变量的卡方值
#连续变量
idx.num=which(sapply(algae,is.numeric))
idx.num
correlation=cor(algae$a1,algae[,idx.num],use = "pairwise.complete.obs")
correlation
correlation=abs(correlation)
correlation=correlation[,order(correlation,decreasing = T)]
correlation
分类变量的卡方值

# 所有分类变量的卡方值
idx.factor=which((sapply(algae, is.factor)))
idx.factor
class(idx.factor)
algae[,idx.factor]
t1=table(algae$season,algae$size)
t1
chisq.test(t1)

你可能感兴趣的:(R语言-决策树算法(C4.5和CART)的实现)