1、随机森林简介
(1)相关概念介绍:集成学习(Ensemble)、自助法(bootstrap)、自助抽样集成(bagging)
- 集成学习:组合多个弱监督模型得到一个更全全面的强监督模型,增强整体的泛化性能。也就是说,即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。
- 自助法(bootstrap):从样本自身中再生成很多可用的同等规模的新样本,使模型具有更稳定的抗过拟合能力。实际上是一个有放回抽样问题,假设我们有大小为N的样本,我们利用放回抽样,从中得到m个大小为N的样本用来训练。
- 自助抽样集成(bagging):将训练集分成m个新的训练集,然后在每个新训练集上构建一个模型,利用集成学习的思想奖m个模型进行整合,最终得到预测模型。整合机制对于分类问题选择Majority Voting(多数投票规则),对于回归问题选择平均值(各弱监督模型的均值)。
(2)随机森林简述:是一种以决策树为基分类器的集成算法,通过组合多棵独立的决策树后根据投票或取均值的方式得到最终预测结果的机器学习方法,往往比单棵树具有更高的准确率和更强的稳定性。更具体一点,随机森林实际上是将决策树用于bagging中的模型,首先,用bootstrap方法生成m个训练集,然后,对于每个训练集,构造一颗决策树,即生成了m个决策树,最后利用bagging中集成学习的思想,生成新的预测模型。(决策树介绍参见:https://zhuanlan.zhihu.com/p/149832596)
2、随机森林实现
随机森林模型的搭建和决策树模型基本一致,包括数据导入、预处理、模型搭建、训练、结果展示。但随机森林很重要的一步是超参数调优,结合Otto商品分类案例,对于超参数和调优方法进行介绍,参考:https://blog.csdn.net/weixin_38664232/article/details/87872929。
(1)模型的构建
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier #随机森林分类模型
from sklearn.model_selection import GridSearchCV #进行超参数调优
from sklearn.model_selection import cross_val_score #进行交叉验证
#省略了数据的导入模块,只列出部分重点代码
RF1 = RandomForestClassifier() #创建随机森林分类器
loss=cross_val_score(RF1,X_train,y_train,cv=3,score='neg_log_loss') #进行交叉验证
(2)超参数调优
需要调优的参数有:
- Bagging参数:树的数目n_estimators
- 与决策树相关的超参数:max_features(最大特征数目)、max_depth(树的深度)或max_leaf_nodes(叶子节点的数目)、min_samples_leaf(叶子节点的最小样本数)、min_samples_split(中间节点的最小样本数)、min_weight_fraction_leaf(叶子节点的样本权重占总权重的比例)
调优中注意事项:
- 与决策树max_features通常越大越好不同,随机森林中的max_features通常较小,每个基学习器之间的性惯性更小,集成模型的性能可能反而会更好。
- max_leaf_nodes和max_depth类似,调试其中任意一个就好。
- min_samples_split和min_samples_leaf通常也有关系,调试其中任意一个就好。
- min_weight_fraction_leaf:由于本任务我们对类别/样本没有设置,顾无需调整。
(3)随机森林总结
- 优点:有较好的抗过拟合能力;预测结果较稳定;可用来解决分类和回归问题。
- 缺点:当训练数据中存在噪音,也会出现过拟合情况;复杂性高,训练时间较长。
- 改进:对输入数据进行预处理,针对训练时间长问题,可以考虑降维算法对原始特征进行降维处理;针对数据存在噪音问题,可以进行原始数据滤波等相关处理。
参考文献:
《机器学习》、博客《随机森林案例--Otto商品分类》
《机器学习 周志华 人工智能入门教程 西瓜书机器学习入门中文教科书 人工智能深度学习框》【摘要 书评 试读】- 京东图书item.jd.com 随机森林案例--Otto商品分类_fly_Xiaoma的博客-CSDN博客_随机森林案例blog.csdn.net