b)接下来是交叉验证的结果
# 3折交叉验证,k取11
n = 699; zz1 = 1:n; # zz1为所有观测值(行)的下标
zz2 = rep(1:3, ceiling(699/3))[1:n]; set.seed(100); zz2 = sample(zz2, n); # 将样本随机分成三份,用zz2标记分到哪一份 nmse = list(NULL, NULL);
c <- breast_cancer_median; # 为了代码简洁将原来的数据赋值给c for (i in 1:3) {
data.train = c[-c(which(zz2 == i)), ]; # 训练集 data.test = c[c(zz2 == i), ]; # 测试集
d.train <- kknn(factor(btype)~., test = data.train, train = data.train, k = 11); # 训练结果
d.test <- kknn(factor(btype)~., test = data.test, train = data.train, k = 11); # 训练结果
table1 = table(predict(d.train, data.train, type = \ # 训练集混淆矩阵
table2 = table(predict(d.test , data.test, type = \ # 测试集混淆矩阵
nmse[[1]][i] = 1 - sum(diag(table1))/nrow(data.train); # 训练集错误率 nmse[[2]][i] = 1 - sum(diag(table2))/sum(table2); # 测试集错误率 cat(\第\折:\
cat(\训练集的错误率为:\
cat(\测试集的错误率为:\}
NMSE = array();
NMSE[1] = sum(nmse[[1]])/3; # 训练集平均错误率 NMSE[2] = sum(nmse[[2]])/3; # 测试集平均错误率
cat(\训练集上的平均错误率为:\cat(\测试集上的平均错误率为:\
结果:kknn method第 1 折: 训练集的错误率为: 0.01502146 测试集的错误率为: 0.03433476
kknn method第 2 折:
训练集的错误率为: 0.01287554 测试集的错误率为: 0.06008584
kknn method第 3 折:
训练集的错误率为: 0.01072961
16
测试集的错误率为: 0.0472103
knn method训练集上的平均错误率为: 0.01287554 knn method测试集上的平均错误率为: 0.0472103
C)方法比较
可以看出随机森林在训练集和测试集的效果都是最好的。
17