「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」
集成学习背景
一个弱学习器预测的结果往往不能准确的预测结果,存在很大的误差。这时可以选择使用集成学习来提高正确率。 集成学习通过构建并结合多个学习期来完成学习任务,有时也被称为多分类器系统。
集成学习的一般结构:先产生一组“个体学习器”,再用某种策略将它们结合起来,个体学习期通常由一个现有的学习算法从训练数据产生,例如C4.5决策树算法、BP神经网络算法等,此时集成中只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络,这样的集成是同质的。同质集成中的个体学习器也称为“基学习器”,相应的学习算法称为“基学习算法”。Bagging集成算法的示意图如下。
Bagging集成算法可看作是投票法,假设一百个学习器,50以上认为结果是1,其他的认为结果是0,那么多数获胜,最终结果为1.
集成学习代码实现
去10个数据,其标签只有1和-1,使用集成学习后,得出学习后的标签,与原标签进行对比。
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import numpy as np
df = pd.DataFrame([[0,1],[1,1],[2,1],[3,-1],[4,-1],
[5,-1],[6,1],[7,1],[8,1],[9,-1]])
M =[] # 存储决策树模型的数组
n_trees = 20 # 设置树的颗数
for i in range(n_trees):
tmp = df.sample(frac=1,replace=True)# 对样本进行采样,目的是建造不同的树
X = tmp.iloc[:,:-1]# 构造X
Y = tmp.iloc[:,-1]# 构造Y
model =DecisionTreeClassifier(max_depth=2) # 新建决策树模型
model.fit(X,Y)
# 将决策树模型加入数组
M.append(model)
# 打印每个基础模型的效果
X = df.iloc[:,:-1]# 获取全部数据的X
Y = df.iloc[:,-1] # 获取全部数据的Y
res = 0 # 初始化全零向量
for i in M: # 遍历模型数组
res += i.predict(X) # 将每个模型预测值叠加到res变量
# 取平均输出最终对每个样本标签的预测值
res = np.sign(res)
print(res)
结果如下: