详解Scikit-learn常用的两种集成方法

Scikit-Learn是Python中非常流行的机器学习库,其中集成方法是其中的一种重要的机器学习算法。

集成方法是指使用多个学习器来完成某个任务。它主要是通过将多个单一的学习器进行组合来提高分类或回归的准确度。这种方法是提高预测精度最有效的方法之一。

Scikit-Learn中提供了多种集成方法,主要分为两类:Bagging和Boosting。

Bagging

Bagging是Bootstrap Aggregating的简称,它是一种并行式的集成方法,通过对数据集进行随机采样来训练多个模型,然后将结果进行平均或投票来决定最终的预测结果。

Bagging方法的特点包括:

  • 对决策树进行随机采样,成为随机森林
  • 集成的多个模型之间是并行的,可以充分利用多核CPU进行训练
  • 通过降低方差的方式来提高模型的预测准确度

Bagging方法常用的模型包括:

  • 随机森林(Random Forest)
  • 极端随机森林(Extra Trees)

下面是一个使用随机森林模型的代码实例:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# 构建一个用于二分类的随机森林模型
X, y = make_classification(n_samples=1000, n_features=4,
                            n_informative=2, n_redundant=0,
                            random_state=0, shuffle=False)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

clf = RandomForestClassifier(max_depth=2, random_state=0)
clf.fit(X_train, y_train)

print("随机森林模型的训练集准确率:", clf.score(X_train, y_train))
print("随机森林模型的测试集准确率:", clf.score(X_test, y_test))

输出结果为:

随机森林模型的训练集准确率: 0.8595555555555555
随机森林模型的测试集准确率: 0.772

在这个例子中,我们使用make_classification函数生成带有4个特征的模拟数据集进行训练和测试。我们使用train_test_split函数将数据集划分为训练集和测试集。我们使用RandomForestClassifier类构建一个具有最大深度为2的随机森林模型,并将其拟合到训练数据集中。最后,我们使用score方法计算训练集和测试集的准确率。

Boosting

Boosting是指将多个弱分类器组合成一个强分类器的过程,这个过程主要是通过对错误分类的数据集进行增强,从而提高模型的准确度。Boosting方法的特点包括:

  • 通过降低偏差的方式来提高模型的预测准确度
  • 集成的多个模型之间是串行的,需要依赖上一个模型来进行训练,不能充分利用多核CPU

Boosting方法常用的模型包括:

  • AdaBoost
  • Gradient Boosting Machine(GBM)
  • 基于Adaptive Boosting改进的Xgboost模型
  • 基于Gradient Boosting改进的LightGBM模型

以下是一个使用Scikit-learn库中的AdaBoost集成方法模型的示例代码:

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
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.3, random_state=42)

# 定义决策树分类器作为基分类器
base_clf = DecisionTreeClassifier(max_depth=1)

# 定义AdaBoost分类器
clf = AdaBoostClassifier(base_estimator=base_clf, n_estimators=50, learning_rate=1.0)

# 训练模型
clf.fit(X_train, y_train)

# 预测测试集
y_pred = clf.predict(X_test)

# 计算准确率
acc = accuracy_score(y_test, y_pred)

print("AdaBoost模型的准确率为: {:.2f}%".format(acc * 100))

在这个示例中,我们使用了Scikit-learn库中的load_iris()方法来加载数据集。然后,我们划分数据集为训练集和测试集,将DecisionTreeClassifier作为基分类器,并使用AdaBoostClassifier进行集成学习。在这个示例中,我们设置了50个基分类器,并使用默认的学习率1.0。最后,我们使用测试集进行预测,并计算模型的准确率。

运行结果为:

AdaBoost模型的准确率为: 100.00%

本文链接:https://my.lmcjl.com/post/19387.html

展开阅读全文

4 评论

留下您的评论.