醋醋百科网

Good Luck To You!

一文带您了解随机森林分类和回归模型:Python示例

随机森林"(Random Forest)是由Leo Breiman和Adele Cutler创建的常用机器学习算法,它将多个决策树的输出结合起来以得出单一的结果。其易用性和灵活性推动了它的广泛应用,可以处理分类和回归问题。

决策树(Decision Trees)

决策树是随机森林模型的基础,它是一种简单而高效的模型。决策树利用先前的决策信息来进行决策,通常通过一系列的if-then-else决策规则来逼近数据的复杂关系。决策树的深度越大,决策规则就越复杂,模型也越容易过度拟合。

决策树的优点:

  • 简单易懂:决策树模型可以以图形方式呈现、易于理解和解释,适合非专业人士。
  • 适用于多种数据类型:决策树可以处理数值和分类数据。
  • 决策树是白盒模型,可解释性强:模型的决策过程可以清晰地解释。
  • 计算成本低:计算复杂度为O(log(N)),预测数据的成本与训练数据量的对数(log)成正比。

决策树的缺点:

  • 容易过拟合:决策树模型对训练数据中的噪声敏感,可能生成过于复杂的树。
  • 对数据中的小变化敏感:小数据变化可能导致完全不同的决策树。
  • 不擅长处理平滑和连续预测:对于连续型数据和平滑预测的问题表现不佳。
  • 难以表达复杂概念:难以捕捉某些复杂数据关系,例如XOR、奇偶或多路复用器问题。
  • 在类别不平衡数据下可能生成偏向主导类别的模型:需要平衡数据集以防止偏差。

决策树算法:ID3、C4.5 和 CART:

ID3(Iterative Dichotomiser 3)由Ross Quinlan于1986年开发。该算法创建一个多分支树,在每个节点上(以贪婪方式)找到对于分类目标产生最大信息增益的分类特征。树生长到最大尺寸,然后通常会应用修剪步骤以提高树对未见数据的泛化能力。

C4.5是ID3的继任者,去除了特征必须是分类的限制,动态定义了一个离散属性(基于数值变量),将连续属性值划分为一组离散间隔。C4.5将训练后的树(即ID3算法的输出)转化为一组if-then规则。然后,评估每个规则的准确性以确定它们应该应用的顺序。

CART(Classification and Regression Trees)与C4.5非常相似,但不同之处在于它支持数值目标变量(回归),不计算规则集。CART使用每个节点上产生最大信息增益的特征和阈值构建二叉树。

下面使用IRIS 数据可视化决策的结果:

import pandas as pd
from sklearn import tree
import matplotlib.pyplot as plt


iris=pd.read_csv('iris.csv')


clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris[['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']], 
            iris['Species'])


plt.figure(figsize=(12, 8))
tree.plot_tree(clf,filled=True,fontsize=10)

集成学习(Ensemble Learning)

集成学习(Ensemble Learning)是一种机器学习技术,旨在通过组合多个基本模型(也称为弱学习器)的预测来创建一个更强大和鲁棒的模型,以提高预测的性能和泛化能力。集成学习的核心思想是将多个弱学习器的决策进行合理的组合,以获得比单个模型更好的整体性能。

Boosting(提升)和Bagging(装袋)都是集成学习(Ensemble Learning)中常见的机器学习技术,用于提高模型的性能和泛化能力。它们的主要区别在于如何组合多个弱学习器(也称为基本模型)以生成一个强学习器。

Bagging(套袋法)

Bagging((bootstrap aggregating))即套袋法,在多数情况下,bagging 方法提供了一种非常简单的方式来对单一模型(同一个算法在不同的训练集上训练多个模型)进行改进,而无须修改背后的算法。其算法过程如下:

  • 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
  • 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
  • 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

下面是我们以BaggingClassifier为元估计器、实例化DecisionTreeClassifier估计器的 bagging 集合,每个估计器就是一个课树。

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
estimators =BaggingClassifier(DecisionTreeClassifier(max_depth=2),
 max_samples=0.8, max_features=1,n_estimators=4)


estimators.fit(iris[['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']], 
            iris['Species'])


fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 6))
for i, ax in enumerate(axes.flat):
    if i < len(estimators.estimators_):
        tree.plot_tree(estimators.estimators_[i], filled=True, ax=ax)
        ax.set_title(f'Tree {i+1}')
plt.tight_layout()
plt.show()

boosting(提升)

Boosting是通过连续迭代来提升模型性能的集成方法。Boosting的核心思想是让下一个弱学习器关注于前一个学习器预测错误的样本,从而逐步提高模型的准确性。常见的Boosting算法包括AdaBoost,Gradient Boosting(如XGBoost、LightGBM、CatBoost)等。

Boosting的关键特点包括:

  • 每个弱学习器都侧重于修复前一个学习器的错误。
  • 样本的权重会被调整,以便于更关注被错误分类的样本。
  • 弱学习器通常是基于简单的模型,如决策树的深度很浅。

Boosting的主要优势在于它能够产生非常强大的集成模型,通常比Bagging的性能更好。但是,它也更容易过拟合训练数据,因此需要谨慎调整参数以防止过拟合。

Boosting(提升)和Bagging(装袋)的区别:

  • Bagging通过并行训练多个模型,减少了方差,适用于高方差低偏差的模型。
  • Boosting通过串行迭代训练多个模型,降低了偏差,适用于低方差高偏差的模型。
  • Bagging的模型是独立的,Boosting的模型是相关的。
  • 常见的Bagging算法是随机森林,常见的Boosting算法包括AdaBoost、Gradient Boosting等。

下面是我们以GradientBoostingClassifier 为示例Boosting过程,n_estimators=2 为决策树桩(decision stumps)。

from sklearn.ensemble import GradientBoostingClassifier


clf = GradientBoostingClassifier(n_estimators=2, learning_rate=1.0,
      max_depth=1, random_state=0)


clf.fit(iris[['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']], 
            iris['Species'])


fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(12, 6))
for i, ax in enumerate(axes.flat):
    if i < 6:
        tree.plot_tree(clf.estimators_[i//3][i%3], filled=True, ax=ax)
        ax.set_title(f'Tree {i+1}')
plt.tight_layout()
plt.show()

随机森林(Random Forest)

随机森林算法是 bagging 方法的扩展,因为它利用 bagging 和特征随机性来创建不相关的决策树森林。特征随机性,也称为特征装袋或“随机子空间方法”,生成特征的随机子集,从而确保决策树之间的低相关性。这是决策树和随机森林之间的关键区别。虽然决策树考虑所有可能的特征分割,但随机森林仅选择这些特征的子集。

决策树是一个有效、适应性较广的人工智能模型,那么整个森林会有多强大?随机森林由许多不同的决策树组成。每棵决策树都会提供其结果,该结果与森林中所有其他树的结果相结合。最后,综合研究结果会产生更精确的结论、预测或选择。

当你有大量数据时,随机森林是一个优秀的人工智能模型。该模型解决了回归和分类问题。随机森林模型在当代预测分析能力中发挥着重要作用。

下面简单demo 下RandomForestClassifier的用法和子树的情况:

from sklearn.ensemble import RandomForestClassifier
estimators =RandomForestClassifier(n_estimators=4,max_depth=3)


estimators.fit(iris[['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']], 
            iris['Species'])


fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 6))
for i, ax in enumerate(axes.flat):
    if i < len(estimators.estimators_):
        tree.plot_tree(estimators.estimators_[i], filled=True, ax=ax)
        ax.set_title(f'Tree {i+1}')
plt.tight_layout()
plt.show()

"随机森林"(Random Forest)是一种集成学习方法,也是Bagging的扩展,广泛应用于机器学习领域。它以卓越的性能和广泛的适用性而著称,可用于解决各种问题,包括分类和回归等。随机森林通过组合多个决策树的预测结果来提高模型的准确性和鲁性。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言