1. Bagging和Boosting
在集成学习方法中,Bagging和Boosting是具有代表性的两大方法,Boosting方法是基于前向加法模型,基本分类器之间存在强依赖关系,每一步学习的分类器都依赖于前面分类器的预测结果,因此必须串行生成。而Bagging则是强调基本分类器之间不存在强依赖关系(不代表没有依赖关系),可以同时生成的并行化学习方法。
Bagging是放回采样的过程,对于给定M个样本的数据集,对于每一个基本分类器t,随机抽样m Bagging学习思想大体可以总结如下(图片来源周志华《机器学习》) 基本学习器的生成方式 鸢尾花iris数据集共有M=150个样本,和N=4个特征。Bagging首先进行"行采样",如下图所示: RF在Bagging的基础上,引入了列采样,只选取部分特征进行基础分类器的学习,注意每个基本决策树所选择的数据列都不相同。 Random Forest可以用作回归问题或者分类问题,若是回归问题,则基本学习器采用CART回归树CARTRegressor,对应为RandomForestRegressor;分类问题,基本学习器采用CART分类树CARTClassifier,对应为RandomForestClassifier。 以RandomForestClassifier为例: Bagging降低方差,Boosting降低偏差? 行采样和列采样的比例如何设定?基本学习器的个数如何设定?2.随机森林
Bagging思想中最具有代表性的就是随机森林Random Forest。在Bagging放回样本采样(行采样)的基础上,每个基本分类器RF随机选择n个特征(列采样)。考虑鸢尾花iris数据集:
最终对于基本分类器t,RF进行“行采样+列采样”。
RF对于分类问题, 采用简单的投票表决,如果出现相同票数则随机选择一个结果。对于回归问题,则采用T个基本分类器的平均值。3.代码实现
完整代码 bagging.py class RandomForestClassifier(ForestModel):
'''
Random Forest Classifier
'''
def __init__(self, n_estimators, sample_scale, feature_scale):
super(RandomForestClassifier, self).__init__(
n_estimators, #基本分类器的数目
sample_scale, #样本采样的比例
feature_scale) #特征采样的比例
def fit(self, X, y):
'''
随机森林的训练就是训练n个基础cart决策分类树,再对结果进行统计,求投票表决最大者
'''
#M个训练样本,N个特征
M,N = X.shape
self.forest = []
for i in range(self.n_estimators):
#生成行索引和列索引
sample_indices = random.choice(M,int(self.sample_scale*M),replace=False)
feature_indices = random.choice(N,int(self.feature_scale*N),replace=False)
#生成数据
data = X[[sample_indices]]
data = data[:,feature_indices]
target = y[[sample_indices]]
#进行cart分类树训练
basic_tree = CARTClassifier()
basic_tree.fit(data,target)
self.forest.append((basic_tree,feature_indices))
def predict(self, X):
res = []
for tree,feature_indices in self.forest:
data = X[:,feature_indices]
pred = tree.predict(data)
res.append(pred)
res = mat(res).getA()
preds= []
for i in range(len(X)):
column = res[:,i]
preds.append(argmax(bincount(column)))
return preds
4.优缺点
优缺点
内容
备注
优点
1. 结果表现好、效率高、实现简单、可以并行计算;2. 能够处理具有高维特征的输入样本,而且不需要降维; 3.对于异常值不敏感;4.可以计算特征的重要性。
缺点
1.随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。2.黑盒模型,无法控制模型内部。
5.FAQ
详见为什么说bagging是减少variance,而boosting是减少bias?
列采样一般为log2(N),N为特征数。