Content
1、概念
1.1 个体学习
个体学习器(基学习器)通常由一个现有的学习算法从训练数据产生,例如决策树、贝叶斯算法。
1.2 集成学习
使用多种学习算法来获得比单独使用任何单独的学习算法更好的预测性能,也可以说是结合多个假设,形成一个(希望)更好的假设。
可以只包含同类型的个体学习器,例如:由多个决策树集成,这种集成被称为“同质”;也可以包含不同类型的个体学习器,例如:由决策树、神经网络,这种集成被称为“异质”。
集成学习的好处:增大假设空间;提高稳健性。
1.2.1 集成学习关键
集成学习有两个关键,第一,个体学习器;第二,结合策略。
1.2.2 个体学习器
根据个体学习器的生成方式,大致分两大类:
- 基分类器之间强依赖,必须串行。Boosting
- 基分类器之间无强依赖,可并行。Bagging、随机森林(Random Forest)
如何选择一组个体学习器?
一组个体学习器的关键是“好而不同”,就是说,具有差异性即多样性,又要准确性。如何产生并结合“好而不同”的个体学习器,恰是集成学习研究的核心。那么如何衡量个体学习器之间的差异性呢?如何增强多样性?
衡量个体学习器之间的差异性常见的指标:
- 误差-分歧分解:分歧表征了个体学习器在样本x上的不一致性,即一定程度反映了个体学习器的多样性
- 多样性度量:考虑个体分类器的两两相似/不相似性
- k-误差图
增强多样性:数据样本、输入属性、输出表示、算法参数进行扰动。
1.2.3 结合策略
集成学习是由多个个体学习器结合而成,是通过什么策略结成的呢?常见的有以下3种。
- 平均法:分为简单平均和加权平均法。常用于数值回归预测问题。
- 投票法:分为绝对多数投票法、相对多数投票法、加权投票法。
绝对多数投票法,即某类别的得票数超过一半,则为预测结果。代表Bagging
相对多数投票法,即少数服从多数,不要求得票数超过一半。代表Bagging
加权投票法,跟加权平均类似,对每个个体学习器的分类票数乘以一个权重值,常用于分类问题的预测。代表Boosting
- 学习法:通过另一个学习器来进行结合。代表Stacking。
1.3 集成方法
基于数据的集成方法主要使用取样技术(Bootstrap 取样)获取训练数据,包括有放回随机取样、无放回随机取样与混合取样3中,较为典型的方法就是Bagging与Adaboost。
1.3.1 Bagging
采用(自助采样法)有放回随机取样技术(使集成模型中的每个模型在投票时具有相同的权重)获取训练集,然后使用该数据集生成集成学习中的个体。个体间的差异性是通过Bootstrap重取采样技术获得。
此方法主要是用于不稳定(数据集中有微小的变化时,会导致模型有很大的变化)的学习算法,例如决策树和神经网络。对于稳定的学习算法,例如朴素贝叶斯法。
1.3.2 Boosting
从初始训练集得到基学习器,根据其表现,对训练样本进行调整,使得之前分类错误的样本后续更受关注,用改变后的样本学习下一个分类器。重复学习T个分类器,T个分类器的结果加权得到最终结果。
Boosting是一类集成学习算法的总称,它有许多变种,其中Adaboost是较为常见的。在训练新模型实例时更注重先前模型错误分类的实例来增量构建集成模型。
1.3.3 Stacking
我们把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器。通常用逻辑回归模型作为组合器
1.3.4 其他集成方法
- 贝叶斯最优分类器
- 桶模型
可以查看Wiki
https://en.wikipedia.org/wiki/Ensemble_learning
2、随机森林
2.1 随机森林思想
随机森林(Random Forests ,简写RF),是Bagging的一个变异体。
RF = Bagging + CART
利用随机的方式将许多决策树组合成一个森林,每个决策树在分类的时候投票决定测试样本的最终类别。
2.2 优缺点
优点:
- 可以处理高维度的数据,并不需要做特征选择
- 高度并行化,训练速度快
- 解释性强
- 对不平衡分类,可以平衡误差
- 填充缺失值,即使丢失很大一部分数据,也可以维持很高准确度。
缺点:
- 在噪声较大的分类和回归问题上,会出现过拟合
- 忽略属性之间的相关性
2.3、应用以及推广
应用:
主要应用于回归和分类。
回归:信用评分等。
分类:职位分类,预测疾病的风险等。
推广:
Extra Tree 是RF的变种,原理与RF几乎一样,但还是有些不同。
RF与ET的差别
差别 | RF | ET |
训练集 | 有放回随机采样 | 原始训练集 |
特征值划分 | 根据Gini,信息增益等原则,选择一个最优特征值 | 随机选择一个特征值 |
3、sklearn参数
官方文档:
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
经常会通过以下几个参数进行调优:
max_features : 使用特征的最大数量
n_estimators:子树的数量
min_sample_leaf:最小样本叶片大小
max_leaf_nodes:最大叶子节点数
max_depth:最大深度,特征较多的时候,建议限制。
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import VotingClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:,:2]
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
rf = RandomForestClassifier(random_state =50,min_samples_leaf =5)
mnb = MultinomialNB()
lr = LogisticRegression()
clfs = VotingClassifier(estimators=[('rf',rf),('mnb',mnb),('lr',lr)],voting='soft')
clfs.fit(X_train,y_train)
predict = clfs.predict(X_test)
print (classification_report(y_test,predict))
precision recall f1-score support
0 1.00 1.00 1.00 19
1 0.75 0.40 0.52 15
2 0.61 0.88 0.72 16
micro avg 0.78 0.78 0.78 50
macro avg 0.79 0.76 0.75 50
weighted avg 0.80 0.78 0.77 50