先介绍了为什么使用集成学习,以及集成学习有哪几种形式,下边就先讲以下bagging模式。
jessie:集成学习系列-理论(1)zhuanlan.zhihu.com大纲
- bagging的随机森林原理
- 优缺点
- 随机森林代码实现
1.随机森林的基本原理
随机森林以决策树作为基学习器,多棵决策树组合构成随即森林。采用又放回采样的方法得到训练样本,随机的实质是随机取样本,随机选特征,森林指的是多棵决策树组合到一起。
多棵树同时进行判断,并以少数服从多数的方式输出最后结果,以此提高准确度!解决决策树的过拟合问题。
为什么随意样本和特征?
每棵树的输入样本都不一样,都是随机从总的样本中取出来的,每棵决策树的特征都不一样,随机从总的特征中选择的。
为什么有放回采样?
每棵树的训练样本可以不一样,但是如果无放回的话,会使数据出现偏差影响,每棵树的训练出现偏差。
2.随机森林优缺点
优点:可并行,不易过拟合。
缺点:取值划分较多的属性会对随机森林产生更大的影响。
代码实现
随机取样本
def get_bootstrap_data(self, X, Y):
# 通过bootstrap的方式获得n_estimators组数据
# get int(n_estimators) datas by bootstrap
m = X.shape[0]
Y = Y.reshape(m, 1)
# 合并X和Y,方便bootstrap (conbine X and Y)
X_Y = np.hstack((X, Y))
np.random.shuffle(X_Y)
data_sets = []
for _ in range(self.n_estimators):
idm = np.random.choice(m, m, replace=True)
bootstrap_X_Y = X_Y[idm, :]
bootstrap_X = bootstrap_X_Y[:, :-1]
bootstrap_Y = bootstrap_X_Y[:, -1:]
data_sets.append([bootstrap_X, bootstrap_Y])
return data_sets