集成学习通过构造并结合多个学习器来完成学习任务
原理: 先产生一组“个体学习器”,在用某种策略将它们结合起来
boosting:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本进行调整,使得先前基学习器做错的样本在后续受到更多关注,然后基于调整后的样本分布训练下一个基学习器;如此重复下去,直至基学习器数目达到事先指定的值T,最终将这T个学习期进行加权结合。
bagging:是投票式算法,首先使用Bootstrap产生不同的训练集数据集,然后分别基于这些训练数据及得到多个基础分类器,最后组合基础分类器的分类结果得到一个相对更优的预测模型。bagging算法的优点在于它是一个容易理解、易于实现且功能强大的学习算法,但得到的结果很难解释则是该算法的主要缺点。(运算速度慢)
随机森林:是bagging的一个扩展变体,随机森林在以决策树为基学习器构造Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。因此,不但样本是随机的,就连每个节点变量的产生都有相当大的随机性。若是分类问题,则输出为所有书中预测概率总和最大的那个类,若是回归问题,则输出为所有树的输出平均值。
参数说明:
bagging(formula, data, mfinal = 100, control, par=FALSE,…)
mfinal: 为算法的迭代次数,即基的分类器的个数
—————————–随机森林———————————————
在随机森林中有importance和varImpPlot两个函数用来评估,每个属性的重要性,其中importance函数以列表展示模型中每个属性的重要性,varImpPlot函数可以通过绘制平均精确率下降及平均基尼下降曲线实现属性重要性的可视化
代码:
# 集成学习
library(adabag)
bagging.model <- bagging(Species ~ ., data = iris, mfinal = 50)
boosting.model <- boosting(Species ~ ., data = iris, mfinal = 50)
# 随机森林
library(randomForest)
randomForest.model <- randomForest(Species ~ ., data = iris)
# 构建result,存放预测结果
result <- data.frame(arithmetic = c('bagging', 'boosting', '随机森林'), erriris = rep(0, 3))
for (i in 1:3) {
# 预测结果
iris_predict <- predict(switch(i, bagging.model, boosting.model, randomForest.model),
newdata = iris)
tableTR <- table(actual = iris$Species,
predict = switch(i, iris_predict$class,
iris_predict$class, iris_predict)) # 混淆矩阵
# 计算误差矩阵
result[i, 2] <- paste(round((sum(tableTR) - sum(diag(tableTR)))*100/sum(tableTR), 2), '%')
}