sklearn.ensemble详解

发布时间:2023-05-17

一、概述

sklearn.ensemble模块是scikit-learn库的一个重要子模块。它提供了一些常用的集成算法,如随机森林、Bagging、Boosting等。集成算法通过组合多个基分类器(或基回归模型)来实现更加准确、鲁棒的预测结果。sklearn.ensemble模块封装了这些算法,方便用户快速地构建集成学习模型。

二、随机森林

随机森林是集成算法中的一种。它将多个决策树组成一个森林,每个决策树都是基于从原始数据集中随机抽取的子样本和特征集构建的。随机森林通过投票机制来确定最终的预测结果。 下面是用随机森林对iris数据集进行分类的示例:

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=42)
# 构建模型
rfc = RandomForestClassifier(n_estimators=100, random_state=42)
rfc.fit(X_train, y_train)
# 预测并评估模型
score = rfc.score(X_test, y_test)
print("Accuracy: %f" % score)

在上述代码中,我们首先加载了iris数据集,并将其分为训练集和测试集。然后,我们使用RandomForestClassifier类构建了一个随机森林分类器。在训练好随机森林模型后,我们对测试集进行预测,并计算预测准确率。

三、Bagging

Bagging是另一种集成算法,它通过在原始数据集中随机抽取一部分样本来构建多个基分类器。每个基分类器都是使用不同的样本进行训练的,并且它们的预测结果通过投票机制来决定最终的预测结果。 下面是用Bagging对digits数据集进行分类的示例:

from sklearn.datasets import load_digits
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
# 加载数据
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, random_state=42)
# 构建模型
bagging = BaggingClassifier(DecisionTreeClassifier(),
                            n_estimators=100,
                            max_samples=0.8,
                            max_features=0.8,
                            random_state=42)
bagging.fit(X_train, y_train)
# 预测并评估模型
score = bagging.score(X_test, y_test)
print("Accuracy: %f" % score)

在上述代码中,我们首先加载了digits数据集,并将其分为训练集和测试集。然后,我们使用BaggingClassifier类构建了一个基于决策树的Bagging分类器。在训练好Bagging模型后,我们对测试集进行预测,并计算预测准确率。

四、Boosting

Boosting是另一种集成学习算法,它通过逐步调整样本的权重来训练多个弱分类器,并将它们组合成一个强分类器。Boosting算法通常是按顺序进行的,即每个新的基分类器都是在之前的分类器的基础上训练出来的。通过不断提高误分类样本的权重,Boosting算法最终得到的模型比Bagging算法更加准确。 下面是用AdaBoost对digits数据集进行分类的示例:

from sklearn.datasets import load_digits
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
# 加载数据
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, random_state=42)
# 构建模型
ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2),
                         n_estimators=600,
                         algorithm="SAMME",
                         learning_rate=0.5,
                         random_state=42)
ada.fit(X_train, y_train)
# 预测并评估模型
score = ada.score(X_test, y_test)
print("Accuracy: %f" % score)

在上述代码中,我们首先加载了digits数据集,并将其分为训练集和测试集。然后,我们使用AdaBoostClassifier类构建了一个基于决策树的AdaBoost分类器。在训练好AdaBoost模型后,我们对测试集进行预测,并计算预测准确率。

五、总结

sklearn.ensemble模块提供了常见的集成学习算法,包括随机森林、Bagging和Boosting。这些算法可以帮助我们构建更加准确、鲁棒的预测模型。