学习Python集成学习和随机森林算法( 二 )


  • max_features:用于训练每个基础估计器的特征数量 。
  • 现在,本文将在训练集上拟合该分类器并进行评分 。
    bagging.fit(X_trAIn, y_train)bagging.score(X_test,y_test)对于回归任务 , 我们也可以做类似的操作,不同之处在于我们将使用回归估计器 。
    from sklearn.ensemble import BaggingRegressorbagging = BaggingRegressor(DecisionTreeRegressor())bagging.fit(X_train, y_train)model.score(X_test,y_test)5. 堆叠集成学习堆叠是一种将多个估计器组合在一起以减小它们的偏差并产生准确预测的技术 。然后将每个估计器的预测结果进行组合,并输入到通过交叉验证训练的最终预测元模型中;堆叠可以应用于分类和回归问题 。

    学习Python集成学习和随机森林算法

    文章插图
    堆叠集成学习
    堆叠的步骤如下:
    1. 将数据分为训练集和验证集 。
    2. 将训练集分为K个折叠 。
    3. 在K-1个折叠上训练基础模型 , 并在第K个折叠上进行预测 。
    4. 重复步骤3,直到对每个折叠都有一个预测结果 。
    5. 在整个训练集上拟合基础模型 。
    6. 使用该模型对测试集进行预测 。
    7. 对其他基础模型重复步骤3-6 。
    8. 使用测试集的预测结果作为新模型(元模型)的特征 。
    9. 使用元模型对测试集进行最终预测 。
    在下面的示例中,本文首先创建两个基础分类器(RandomForestClassifier和GradientBoostingClassifier)和一个元分类器(LogisticRegression),然后使用K折交叉验证从这些分类器的预测结果(iris数据集上的训练数据)中提取特征用于元分类器(LogisticRegression)的训练 。
    在使用K折交叉验证将基础分类器在测试数据集上进行预测,并将这些预测结果作为元分类器的输入特征后 , 再使用这两者的预测结果进行测试集上的预测,并将其准确性与堆叠集成模型进行比较 。
    # 加载数据集data = load_iris()X, y = data.data, data.target# 将数据拆分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 定义基础分类器base_classifiers = [   RandomForestClassifier(n_estimators=100, random_state=42),   GradientBoostingClassifier(n_estimators=100, random_state=42)]# 定义元分类器meta_classifier = LogisticRegression()# 创建一个数组来保存基础分类器的预测结果base_classifier_predictions = np.zeros((len(X_train), len(base_classifiers)))# 使用K折交叉验证进行堆叠kf = KFold(n_splits=5, shuffle=True, random_state=42)for train_index, val_index in kf.split(X_train):   train_fold, val_fold = X_train[train_index], X_train[val_index]   train_target, val_target = y_train[train_index], y_train[val_index]   for i, clf in enumerate(base_classifiers):       cloned_clf = clone(clf)       cloned_clf.fit(train_fold, train_target)       base_classifier_predictions[val_index, i] = cloned_clf.predict(val_fold)# 在基础分类器预测的基础上训练元分类器meta_classifier.fit(base_classifier_predictions, y_train)# 使用堆叠集成进行预测stacked_predictions = np.zeros((len(X_test), len(base_classifiers)))for i, clf in enumerate(base_classifiers):   stacked_predictions[:, i] = clf.predict(X_test)# 使用元分类器进行最终预测final_predictions = meta_classifier.predict(stacked_predictions)# 评估堆叠集成的性能accuracy = accuracy_score(y_test, final_predictions)print(f"Stacked Ensemble Accuracy: {accuracy:.2f}")6. 提升集成学习提升(Boosting)是一种机器学习的集成技术,通过将弱学习器转化为强学习器来减小偏差和方差 。这些弱学习器按顺序应用于数据集,首先创建一个初始模型并将其拟合到训练集上 。一旦第一个模型的错误被识别出来,就会设计另一个模型来进行修正 。
    有一些流行的算法和实现方法用于提升集成学习技术 。接下来将探讨其中最著名的几种 。
    6.1 AdaBoostAdaBoost是一种有效的集成学习技术,通过按顺序使用弱学习器进行训练 。每次迭代都会优先考虑错误的预测结果,同时减小分配给正确预测实例的权重;这种策略性地强调具有挑战性的观察结果 , 使得AdaBoost随着时间的推移变得越来越准确,其最终的预测结果由弱学习器的多数投票或加权总和决定 。


    推荐阅读