【深度学习】集成学习笔记

过程具有多模态特性

集成学习

多来源多模态数据融合与集成研究进展
多来源多模态数据融合与集成研究进展

基础集成技术

  • 最大投票(Max Voting)法
    最大投票方法通常用于分类问题。
  • 平均(Averaging)法
    类似于最大投票技术,这里对每个数据点的多次预测进行平均。在这种方法中,我们从所有模型中取平均值作为最终预测。平均法可用于在回归问题中进行预测或在计算分类问题的概率时使用
  • 加权平均(Weighted Average)法
    这是平均法的扩展。为所有模型分配不同的权重,定义每个模型的预测重要性。

高级集成技术

- 堆叠(Stacking)

第一步:把训练集分成10份
【深度学习】集成学习笔记_第1张图片
第二步:基础模型(假设是决策树)在其中9份上拟合,并对第10份进行预测。
第三步:对训练集上的每一份如此做一遍。
【深度学习】集成学习笔记_第2张图片
第四步:然后将基础模型(此处是决策树)拟合到整个训练集上。
第五步:使用此模型,在测试集上进行预测。
【深度学习】集成学习笔记_第3张图片
第六步:对另一个基本模型(比如knn)重复步骤2到4,产生对训练集和测试集的另一组预测。
【深度学习】集成学习笔记_第4张图片
第七步:训练集预测被用作构建新模型的特征。
第八步:该新模型用于对测试预测集(test prediction set,上图的右下角)进行最终预测。
【深度学习】集成学习笔记_第5张图片

# 首先定义一个函数来对n折的训练集和测试集进行预测。此函数返回每个模型对训练集和测试集的预测。
def Stacking(model,train,y,test,n_fold):
   folds=StratifiedKFold(n_splits=n_fold,random_state=1)
   test_pred=np.empty((test.shape[0],1),float)
   train_pred=np.empty((0,1),float)

   for train_indices,val_indices in folds.split(train,y.values):
      x_train,x_val=train.iloc[train_indices],train.iloc[val_indices]
      y_train,y_val=y.iloc[train_indices],y.iloc[val_indices]

      model.fit(X=x_train,y=y_train)
      train_pred=np.append(train_pred,model.predict(x_val))
      test_pred=np.append(test_pred,model.predict(test))
    return test_pred.reshape(-1,1),train_pred

# 现在我们将创建两个基本模型:决策树和knn。
model1 = tree.DecisionTreeClassifier(random_state=1)
test_pred1 ,train_pred1=Stacking(model=model1,n_fold=10, train=x_train,test=x_test,y=y_train)
train_pred1=pd.DataFrame(train_pred1)
test_pred1=pd.DataFrame(test_pred1)

model2 = KNeighborsClassifier()
test_pred2 ,train_pred2=Stacking(model=model2,n_fold=10,train=x_train,test=x_test,y=y_train)

train_pred2=pd.DataFrame(train_pred2)
test_pred2=pd.DataFrame(test_pred2)

# 创建第三个模型,逻辑回归,在决策树和knn模型的预测之上。
df = pd.concat([train_pred1, train_pred2], axis=1)
df_test = pd.concat([test_pred1, test_pred2], axis=1)

model = LogisticRegression(random_state=1)
model.fit(df,y_train)
model.score(df_test, y_test)

# 创建的堆叠模型只有两层。决策树和knn模型建立在零级,而逻辑回归模型建立在第一级。其实可以随意的在堆叠模型中创建多个层次。

- 混合(Blending)

混合遵循与堆叠相同的方法,但仅使用来自训练集的一个留出(holdout)/验证集来进行预测。换句话说,与堆叠不同,预测仅在留出集上进行。留出集和预测用于构建在测试集上运行的模型
第一步:原始训练数据被分为训练集合验证集。
【深度学习】集成学习笔记_第6张图片
第二步:在训练集上拟合模型。
第三步:在验证集和测试集上进行预测。
【深度学习】集成学习笔记_第7张图片
第四步:验证集及其预测用作构建新模型的特征。
第五步:该新模型用于对测试集和元特征(meta-features)进行最终预测。

- Bagging

- 提升(Boosting)

在我们进一步讨论之前,这里有另一个问题:如果第一个模型错误地预测了某一个数据点,然后接下来的模型(可能是所有模型),将预测组合起来会提供更好的结果吗?Boosting就是来处理这种情况的。

基于Bagging和Boosting的算法

- Bagging meta-estimator

Bagging meta-estimator是一种集成算法,可用于分类(BaggingClassifier)和回归(BaggingRegressor)问题。它采用典型的bagging技术进行预测。以下是Bagging meta-estimator算法的步骤:
第一步:从原始数据集(Bootstrapping)创建随机子集。
第二步:数据集的子集包括所有特征。
第三步用户指定的基础估计器在这些较小的集合上拟合。
第四步:将每个模型的预测结合起来得到最终结果。

- 随机森林

随机森林是另一种遵循bagging技术的集成机器学习算法。它是bagging-estimator算法的扩展。随机森林中的基础估计器是决策树。与bagging meta-estimator不同,随机森林随机选择一组特征,这些特征用于决定决策树的每个节点处的最佳分割。
随机森林的具体步骤如下:
第一步:从原始数据集(Bootstrapping)创建随机子集。
第二步:在决策树中的每个节点处,仅考虑一组随机特征来决定最佳分割。
第三步:在每个子集上拟合决策树模型。
第四步:通过对所有决策树的预测求平均来计算最终预测。
注意:随机林中的决策树可以构建在数据和特征的子集上。特别地,sklearn中的随机森林使用所有特征作为候选,并且候选特征的随机子集用于在每个节点处分裂。
总而言之,随机森林随机选择数据点和特征,并构建多个树(森林)。

- AdaBoost

自适应增强或AdaBoost是最简单的boosting算法之一。通常用决策树来建模。创建多个顺序模型,每个模型都校正上一个模型的错误。AdaBoost为错误预测的观测值分配权重,后续模型来正确预测这些值。
以下是执行AdaBoost算法的步骤:
第一步:最初,数据集中的所有观察值都具有相同的权重。
第二步:在数据子集上建立一个模型。
第三步:使用此模型,可以对整个数据集进行预测。
第四步:通过比较预测值和实际值来计算误差。
第五步:在创建下一个模型时,会给预测错误的数据点赋予更高的权重。
第六步:可以使用误差值确定权重。例如,误差越大,分配给观察值的权重越大。
第七步:重复该过程直到误差函数没有改变,或达到估计器数量的最大限制。

你可能感兴趣的:(#,深度学习,Python,#,机器学习,集成学习,机器学习,决策树)