Python 机器学习 基础 之 监督学习 [决策树集成] 算法 的简单说明

Python 机器学习 基础 之 监督学习 [决策树集成] 算法 的简单说明

目录

Python 机器学习 基础 之 监督学习 [决策树集成] 算法 的简单说明

一、简单介绍

二、监督学习 算法 说明前的 数据集 说明

三、监督学习 之 决策树集成

1、随机森林

2、梯度提升回归树(梯度提升机)

3、极端随机树

附录

一、参考文献


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

Python 机器学习是利用 Python 编程语言中的各种工具和库来实现机器学习算法和技术的过程。Python 是一种功能强大且易于学习和使用的编程语言,因此成为了机器学习领域的首选语言之一。Python 提供了丰富的机器学习库,如Scikit-learn、TensorFlow、Keras、PyTorch等,这些库包含了许多常用的机器学习算法和深度学习框架,使得开发者能够快速实现、测试和部署各种机器学习模型。

Python 机器学习涵盖了许多任务和技术,包括但不限于:

  1. 监督学习:包括分类、回归等任务。
  2. 无监督学习:如聚类、降维等。
  3. 半监督学习:结合了有监督和无监督学习的技术。
  4. 强化学习:通过与环境的交互学习来优化决策策略。
  5. 深度学习:利用深度神经网络进行学习和预测。

通过 Python 进行机器学习,开发者可以利用其丰富的工具和库来处理数据、构建模型、评估模型性能,并将模型部署到实际应用中。Python 的易用性和庞大的社区支持使得机器学习在各个领域都得到了广泛的应用和发展。

二、监督学习 算法 说明前的 数据集 说明

相关说明可见如下链接的  <  二、监督学习 算法 说明前的 数据集 说明 >,这里不在赘述:

数据集 说明:Python 机器学习 基础 之 监督学习 K-NN (K-邻近)算法 的简单说明

三、监督学习 之 决策树集成

集成 (ensemble)是合并多个机器学习模型来构建更强大模型的方法。在机器学习文献中有许多模型都属于这一类,但已证明有两种集成模型对大量分类和回归的数据集都是有效的,二者都以决策树为基础,分别是随机森林(random forest)和梯度提升决策树(gradient boosted decision tree)。

决策树集成是指将多个决策树模型组合在一起以改善预测性能的技术。常见的决策树集成方法包括随机森林、梯度提升树和极端随机树等。这些方法通过组合多个决策树的预测结果,来提高整体模型的准确性和泛化能力。

随机森林(Random Forest)

随机森林是一种基于决策树的集成学习方法。它通过在数据集的不同子集上训练多个决策树,并将它们的预测结果进行平均或投票来得到最终的预测结果。随机森林具有以下特点:

  • 每个决策树都是独立训练的,因此可以并行化处理,训练速度较快。
  • 通过随机选择特征子集进行训练,避免了决策树容易过拟合的问题。
  • 可以处理大量的特征和样本,适用于高维数据集。

梯度提升树(Gradient Boosting Tree)

梯度提升树是一种通过迭代训练决策树来提升模型性能的集成学习方法。它通过在每一轮迭代中拟合一个新的决策树来逐步改进模型的预测能力。梯度提升树具有以下特点:

  • 每个新的决策树都是在前一轮模型的残差上训练的,从而逐步减小模型在训练集上的误差。
  • 可以使用不同的损失函数来适应不同类型的问题,如回归、分类和排序等。
  • 可以通过设置合适的超参数来控制模型的复杂度,从而避免过拟合。

极端随机树(Extra Trees)

极端随机树是一种随机森林的变种,它在每个节点上随机选择特征进行划分,而不是在特征子集上寻找最佳划分。这样可以进一步提高模型的训练速度,并降低模型的方差。极端随机树具有以下特点:

  • 在训练过程中,每个节点的特征划分都是通过随机选择的,因此不需要像随机森林那样对特征进行排序。
  • 由于随机性更强,极端随机树通常比随机森林更快地训练和预测。
  • 可以使用与随机森林相同的技术来度量特征的重要性,并进行特征选择。

决策树集成方法在实际应用中表现出色,通常比单个决策树具有更好的预测性能和泛化能力。因此,在解决各种机器学习问题时,决策树集成方法通常是首选的模型之一。

1、随机森林

我们刚刚说过,决策树的一个主要缺点在于经常对训练数据过拟合。随机森林是解决这个问题的一种方法。随机森林本质上是许多决策树的集合,其中每棵树都和其他树略有不同。随机森林背后的思想是,每棵树的预测可能都相对较好,但可能对部分数据过拟合。如果构造很多树,并且每棵树的预测都很好,但都以不同的方式过拟合,那么我们可以对这些树的结果取平均值来降低过拟合。既能减少过拟合又能保持树的预测能力,这可以在数学上严格证明。

为了实现这一策略,我们需要构造许多决策树。每棵树都应该对目标值做出可以接受的预测,还应该与其他树不同。随机森林的名字来自于将随机性添加到树的构造过程中,以确保每棵树都各不相同。随机森林中树的随机化方法有两种:一种是通过选择用于构造树的数据点,另一种是通过选择每次划分测试的特征。我们来更深入地研究这一过程。

1)构造随机森林

想要构造一个随机森林模型,你需要确定用于构造的树的个数(RandomForestRegressor 或 RandomForestClassifier 的 n_estimators 参数)。比如我们想要构造 10 棵树。这些树在构造时彼此完全独立,算法对每棵树进行不同的随机选择,以确保树和树之间是有区别的。想要构造一棵树,首先要对数据进行自助采样 (bootstrap sample)。也就是说,从 n_samples 个数据点中有放回地(即同一样本可以被多次抽取)重复随机抽取一个样本,共抽取 n_samples 次。这样会创建一个与原数据集大小相同的数据集,但有些数据点会缺失(大约三分之一),有些会重复。

举例说明,比如我们想要创建列表 ['a', 'b', 'c', 'd'] 的自助采样。一种可能的自主采样是 ['b', 'd', 'd', 'c'] ,另一种可能的采样为 ['d', 'a', 'd', 'a'] 。

接下来,基于这个新创建的数据集来构造决策树。但是,要对我们在介绍决策树时描述的算法稍作修改。在每个结点处,算法随机选择特征的一个子集,并对其中一个特征寻找最佳测试,而不是对每个结点都寻找最佳测试。选择的特征个数由 max_features 参数来控制。每个结点中特征子集的选择是相互独立的,这样树的每个结点可以使用特征的不同子集来做出决策。

由于使用了自助采样,随机森林中构造每棵决策树的数据集都是略有不同的。由于每个结点的特征选择,每棵树中的每次划分都是基于特征的不同子集。这两种方法共同保证随机森林中所有树都不相同。

在这个过程中的一个关键参数是 max_features 。如果我们设置 max_features 等于 n_features ,那么每次划分都要考虑数据集的所有特征,在特征选择的过程中没有添加随机性(不过自助采样依然存在随机性)。如果设置 max_features 等于 1 ,那么在划分时将无法选择对哪个特征进行测试,只能对随机选择的某个特征搜索不同的阈值。因此,如果 max_features 较大,那么随机森林中的树将会十分相似,利用最独特的特征可以轻松拟合数据。如果 max_features 较小,那么随机森林中的树将会差异很大,为了很好地拟合数据,每棵树的深度都要很大。

要利用随机森林进行预测,算法首先对森林中的每棵树进行预测。对于回归问题,我们可以对这些结果取平均值作为最终预测。对于分类问题,则用到了“软投票”(soft voting)策略。也就是说,每个算法做出“软”预测,给出每个可能的输出标签的概率。对所有树的预测概率取平均值,然后将概率最大的类别作为预测结果。

2)分析随机森林

下面将由 5 棵树组成的随机森林应用到前面研究过的 two_moons 数据集上:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_splitX, y = make_moons(n_samples=100, noise=0.25, random_state=3)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y,random_state=42)forest = RandomForestClassifier(n_estimators=5, random_state=2)
forest.fit(X_train, y_train)

作为随机森林的一部分,树被保存在 estimator_ 属性中。我们将每棵树学到的决策边界可视化,也将它们的总预测(即整个森林做出的预测)可视化

import numpy as np
import matplotlib.pyplot as plt
import mglearnfig, axes = plt.subplots(2, 3, figsize=(20, 10))
for i, (ax, tree) in enumerate(zip(axes.ravel(), forest.estimators_)):ax.set_title("Tree {}".format(i))mglearn.plots.plot_tree_partition(X_train, y_train, tree, ax=ax)mglearn.plots.plot_2d_separator(forest, X_train, fill=True, ax=axes[-1, -1],alpha=.4)
axes[-1, -1].set_title("Random Forest")
mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], y_train)plt.savefig('Images/04DecisionTreeEnsemble-01.png', bbox_inches='tight')
plt.show()
5 棵随机化的决策树找到的决策边界,以及将它们的预测概率取平均后得到的决策边界

你可以清楚地看到,这 5 棵树学到的决策边界大不相同。每棵树都犯了一些错误,因为这里画出的一些训练点实际上并没有包含在这些树的训练集中,原因在于自助采样。

随机森林比单独每一棵树的过拟合都要小,给出的决策边界也更符合直觉。在任何实际应用中,我们会用到更多棵树(通常是几百或上千),从而得到更平滑的边界。

再举一个例子,我们将包含 100 棵树的随机森林应用在乳腺癌数据集上:

from sklearn.datasets import load_breast_cancercancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)print("Accuracy on training set: {:.3f}".format(forest.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(forest.score(X_test, y_test)))

在没有调节任何参数的情况下,随机森林的精度为 97%,比线性模型或单棵决策树都要好。我们可以调节 max_features 参数,或者像单棵决策树那样进行预剪枝。但是,随机森林的默认参数通常就已经可以给出很好的结果。

与决策树类似,随机森林也可以给出特征重要性,计算方法是将森林中所有树的特征重要性求和并取平均。一般来说,随机森林给出的特征重要性要比单棵树给出的更为可靠。见下图

def plot_feature_importances_cancer(model):n_features = cancer.data.shape[1]plt.barh(range(n_features), model.feature_importances_, align='center')plt.yticks(np.arange(n_features), cancer.feature_names)plt.xlabel("Feature importance")plt.ylabel("Feature")plot_feature_importances_cancer(forest)
plt.savefig('Images/04DecisionTreeEnsemble-02.png', bbox_inches='tight')
plt.show()
拟合乳腺癌数据集得到的随机森林的特征重要性

如你所见,与单棵树相比,随机森林中有更多特征的重要性不为零。与单棵决策树类似,随机森林也给了“worst radius”(最大半径)特征很大的重要性,但从总体来看,它实际上却选择“worst perimeter”(最大周长)作为信息量最大的特征。由于构造随机森林过程中的随机性,算法需要考虑多种可能的解释,结果就是随机森林比单棵树更能从总体把握数据的特征。

3)优点、缺点和参数

用于回归和分类的随机森林是目前应用最广泛的机器学习方法之一。这种方法非常强大,通常不需要反复调节参数就可以给出很好的结果,也不需要对数据进行缩放。

从本质上看,随机森林拥有决策树的所有优点,同时弥补了决策树的一些缺陷。仍然使用决策树的一个原因是需要决策过程的紧凑表示。基本上不可能对几十棵甚至上百棵树做出详细解释,随机森林中树的深度往往比决策树还要大(因为用到了特征子集)。因此,如果你需要以可视化的方式向非专家总结预测过程,那么选择单棵决策树可能更好。虽然在大型数据集上构建随机森林可能比较费时间,但在一台计算机的多个 CPU 内核上并行计算也很容易。如果你用的是多核处理器(几乎所有的现代化计算机都是),你可以用 n_jobs 参数来调节使用的内核个数。使用更多的 CPU 内核,可以让速度线性增加(使用 2 个内核,随机森林的训练速度会加倍),但设置 n_jobs 大于内核个数是没有用的。你可以设置 n_jobs=-1 来使用计算机的所有内核。

你应该记住,随机森林本质上是随机的,设置不同的随机状态(或者不设置 random_state 参数)可以彻底改变构建的模型。森林中的树越多,它对随机状态选择的鲁棒性就越好。如果你希望结果可以重现,固定 random_state 是很重要的。

对于维度非常高的稀疏数据(比如文本数据),随机森林的表现往往不是很好。对于这种数据,使用线性模型可能更合适。即使是非常大的数据集,随机森林的表现通常也很好,训练过程很容易并行在功能强大的计算机的多个 CPU 内核上。不过,随机森林需要更大的内存,训练和预测的速度也比线性模型要慢。对一个应用来说,如果时间和内存很重要的话,那么换用线性模型可能更为明智。

需要调节的重要参数有 n_estimatorsmax_features ,可能还包括预剪枝选项(如 max_depth )。n_estimators 总是越大越好。对更多的树取平均可以降低过拟合,从而得到鲁棒性更好的集成。不过收益是递减的,而且树越多需要的内存也越多,训练时间也越长。常用的经验法则就是“在你的时间 / 内存允许的情况下尽量多”。

前面说过,max_features 决定每棵树的随机性大小,较小的 max_features 可以降低过拟合。一般来说,好的经验就是使用默认值:对于分类,默认值是 max_features=sqrt(n_features) ;对于回归,默认值是 max_features=n_features 。增大 max_featuresmax_leaf_nodes 有时也可以提高性能。它还可以大大降低用于训练和预测的时间和空间要求。

2、梯度提升回归树(梯度提升机)

梯度提升回归树是另一种集成方法,通过合并多个决策树来构建一个更为强大的模型。虽然名字中含有“回归”,但这个模型既可以用于回归也可以用于分类。与随机森林方法不同,梯度提升采用连续的方式构造树,每棵树都试图纠正前一棵树的错误。默认情况下,梯度提升回归树中没有随机化,而是用到了强预剪枝。梯度提升树通常使用深度很小(1 到 5 之间)的树,这样模型占用的内存更少,预测速度也更快。

梯度提升回归树(Gradient Boosting Regression Tree,简称梯度提升树或梯度提升机)是一种强大的集成学习方法,用于回归问题。它通过组合多个决策树来构建一个更强大的预测模型。

梯度提升树的基本思想是通过迭代地训练决策树来逐步改进模型的预测能力。每一棵决策树都是在前一棵决策树的残差上训练的,从而逐步减小模型在训练集上的误差。具体来说,算法的步骤如下:

  1. 初始化模型为一个简单的回归器,通常选择均值作为初始预测值。
  2. 在每一轮迭代中,根据当前模型的预测结果计算残差(实际值与预测值之间的差异)。
  3. 在残差上训练一个新的回归器(通常是决策树),并将其添加到当前模型中。
  4. 更新模型的预测结果,将新的回归器的预测结果加到当前模型的预测结果上。
  5. 重复步骤2至4,直到满足停止条件(如达到预设的迭代次数或模型性能不再提升)。

梯度提升树的优点包括:

  • 非常灵活,可以适用于各种类型的回归问题,并且能够学习复杂的非线性关系。
  • 在训练过程中,通过逐步拟合残差来改进模型,从而提高了模型的泛化能力。
  • 可以使用不同的损失函数来适应不同类型的问题,如平方损失函数、绝对损失函数等。

然而,梯度提升树也有一些缺点,包括:

  • 对超参数敏感,需要仔细调节才能达到最佳性能。
  • 训练时间较长,尤其是在处理大规模数据集时。
  • 容易过拟合,特别是在训练数据不足或噪声较多的情况下。

总的来说,梯度提升树是一种强大的回归算法,广泛应用于各种领域,如金融、保险、医疗等。

梯度提升背后的主要思想是合并许多简单的模型(在这个语境中叫作弱学习器 ),比如深度较小的树。每棵树只能对部分数据做出好的预测,因此,添加的树越来越多,可以不断迭代提高性能。

梯度提升树经常是机器学习竞赛的优胜者,并且广泛应用于业界。与随机森林相比,它通常对参数设置更为敏感,但如果参数设置正确的话,模型精度更高。

除了预剪枝与集成中树的数量之外,梯度提升的另一个重要参数是 learning_rate (学习率),用于控制每棵树纠正前一棵树的错误的强度。较高的学习率意味着每棵树都可以做出较强的修正,这样模型更为复杂。通过增大 n_estimators 来向集成中添加更多树,也可以增加模型复杂度,因为模型有更多机会纠正训练集上的错误。

下面是在乳腺癌数据集上应用 GradientBoostingClassifier 的示例。默认使用 100 棵树,最大深度是 3,学习率为 0.1:

from sklearn.ensemble import GradientBoostingClassifierX_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)gbrt = GradientBoostingClassifier(random_state=0)
gbrt.fit(X_train, y_train)print("Accuracy on training set: {:.3f}".format(gbrt.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(gbrt.score(X_test, y_test)))

由于训练集精度达到 100%,所以很可能存在过拟合。为了降低过拟合,我们可以限制最大深度来加强预剪枝,也可以降低学习率:

gbrt = GradientBoostingClassifier(random_state=0, max_depth=1)
gbrt.fit(X_train, y_train)print("Accuracy on training set: {:.3f}".format(gbrt.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(gbrt.score(X_test, y_test)))

gbrt = GradientBoostingClassifier(random_state=0, learning_rate=0.01)
gbrt.fit(X_train, y_train)print("Accuracy on training set: {:.3f}".format(gbrt.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(gbrt.score(X_test, y_test)))

降低模型复杂度的两种方法都降低了训练集精度,这和预期相同。在这个例子中,减小树的最大深度显著提升了模型性能,而降低学习率仅稍稍提高了泛化性能。

对于其他基于决策树的模型,我们也可以将特征重要性可视化,以便更好地理解模型,见下图。由于我们用到了 100 棵树,所以即使所有树的深度都是 1,查看所有树也是不现实的:

gbrt = GradientBoostingClassifier(random_state=0, max_depth=1)
gbrt.fit(X_train, y_train)plot_feature_importances_cancer(gbrt)
plt.savefig('Images/04DecisionTreeEnsemble-03.png', bbox_inches='tight')
plt.show()
用于拟合乳腺癌数据集的梯度提升分类器给出的特征重要性

可以看到,梯度提升树的特征重要性与随机森林的特征重要性有些类似,不过梯度提升完全忽略了某些特征。

由于梯度提升和随机森林两种方法在类似的数据上表现得都很好,因此一种常用的方法就是先尝试随机森林,它的鲁棒性很好。如果随机森林效果很好,但预测时间太长,或者机器学习模型精度小数点后第二位的提高也很重要,那么切换成梯度提升通常会有用。

如果你想要将梯度提升应用在大规模问题上,可以研究一下 xgboost 包及其 Python 接口,在写作本书时,这个库在许多数据集上的速度都比 scikit-learn 对梯度提升的实现要快(有时调参也更简单)。

优点、缺点和参数

梯度提升决策树是监督学习中最强大也最常用的模型之一。其主要缺点是需要仔细调参,而且训练时间可能会比较长。与其他基于树的模型类似,这一算法不需要对数据进行缩放就可以表现得很好,而且也适用于二元特征与连续特征同时存在的数据集。与其他基于树的模型相同,它也通常不适用于高维稀疏数据。

梯度提升树模型的主要参数包括树的数量 n_estimators 和学习率 learning_rate ,后者用于控制每棵树对前一棵树的错误的纠正强度。这两个参数高度相关,因为 learning_rate 越低,就需要更多的树来构建具有相似复杂度的模型。随机森林的 n_estimators 值总是越大越好,但梯度提升不同,增大 n_estimators 会导致模型更加复杂,进而可能导致过拟合。通常的做法是根据时间和内存的预算选择合适的 n_estimators ,然后对不同的 learning_rate 进行遍历。

另一个重要参数是 max_depth (或 max_leaf_nodes ),用于降低每棵树的复杂度。梯度提升模型的 max_depth 通常都设置得很小,一般不超过 5。

3、极端随机树

极端随机树(Extra Trees)是一种决策树的集成学习方法,也称为 Extremely Randomized Trees。它是随机森林的一种变种,与随机森林不同之处在于在构建每棵树时使用了更多的随机性。

与随机森林中的每个决策树在节点上进行随机特征选择不同,极端随机树在每个节点上都会随机选择特征进行划分。具体来说,极端随机树的主要特点包括:

  1. 随机划分节点: 在每个节点上,极端随机树会从特征的一个随机子集中选择最佳的划分特征,而不是从整个特征集中选择。这种随机性使得树的生长更加随机,增加了模型的多样性。

  2. 随机选择划分阈值: 在确定划分特征后,极端随机树会随机选择一个阈值来进行划分,而不是像传统决策树那样选择最佳的划分阈值。这进一步增加了模型的随机性。

  3. 投票预测: 在预测阶段,极端随机树会将每棵树的预测结果进行平均或投票,以获得最终的预测结果。与随机森林相似,极端随机树的集成预测具有较高的稳定性和准确性。

极端随机树相比于随机森林具有以下优点:

  • 训练速度更快:由于在构建每棵树时都采用了更多的随机性,极端随机树的训练速度通常比随机森林更快。
  • 降低过拟合风险:随机性的增加可以降低模型对训练数据的过拟合风险,尤其是在训练数据较少的情况下。

总的来说,极端随机树是一种高效且有效的集成学习方法,适用于各种类型的问题,如分类、回归和异常检测等。它在实践中被广泛应用于大规模数据和高维数据集的建模任务中。

使用乳腺癌数据集进行极端随机树(Extra Trees)的决策树集成学习方法说明:

导入必要的库和数据集,加载数据集并拆分为训练集和测试集:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.metrics import accuracy_score, classification_report# 加载乳腺癌数据集
data = load_breast_cancer()
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)

使用 scikit-learn 中的 ExtraTreesClassifier 类来构建和训练极端随机树模型,使用测试集评估模型的性能,通常使用准确率(accuracy)、精确率(precision)、召回率(recall)和 F1 分数等指标进行评估

# 构建并训练极端随机树模型
model = ExtraTreesClassifier(random_state=42)
model.fit(X_train, y_train)# 在测试集上进行预测
y_pred = model.predict(X_test)# 计算模型的准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)# 打印分类报告
print(classification_report(y_test, y_pred))

对于其他基于决策树的模型,我们也可以将特征重要性可视化,以便更好地理解模型,见下图

plot_feature_importances_cancer(model)
plt.savefig('Images/04DecisionTreeEnsemble-04.png', bbox_inches='tight')
plt.show()

一些注意事项

当使用极端随机树(Extra Trees)时,以下是一些注意事项以及相应的示例:

1)超参数调节: 调节超参数对模型性能至关重要。例如,您可以调节树的数量(n_estimators)、每棵树的最大深度(max_depth)等。

# 示例:调节树的数量和最大深度
model = ExtraTreesClassifier(n_estimators=100, max_depth=5, random_state=42)

2)特征重要性: 了解特征重要性可以帮助您识别最相关的特征。例如,您可以通过绘制特征重要性图表来查看每个特征的重要性。

# 示例:绘制特征重要性图表
plot_feature_importances(model, data.feature_names)

3)处理不平衡数据: 处理类别不平衡问题可以提高模型的性能。例如,您可以使用过采样或欠采样等技术处理不平衡数据。

# 示例:使用过采样技术处理不平衡数据
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)

4)避免过拟合: 使用交叉验证和正则化技术可以帮助减少过拟合的风险。例如,您可以使用网格搜索来调节模型的超参数。

# 示例:使用网格搜索进行超参数调优
from sklearn.model_selection import GridSearchCV
param_grid = {'n_estimators': [50, 100, 200], 'max_depth': [3, 5, 7]}
grid_search = GridSearchCV(model, param_grid, cv=5)

5)模型解释性: 极端随机树模型可能不够易于解释。如果需要对模型做出解释性的分析,可能需要考虑其他模型或技术。

# 示例:使用线性模型进行解释性分析
from sklearn.linear_model import LogisticRegression
linear_model = LogisticRegression()

通过考虑这些示例和注意事项,您可以更好地利用极端随机树模型,并在解决实际问题时取得更好的性能和效果。

附录

一、参考文献

参考文献:[德] Andreas C. Müller [美] Sarah Guido 《Python Machine Learning Basics Tutorial》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/703123.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring】AbstractApplicationContext源码解读

这个类源码一打开&#xff0c;我滴妈有一种我不卷了&#xff0c;我送外卖去了的感觉1500行 但是还是对你自己说 坚持坚持再坚持。35岁再送外卖也不迟。 这里我们先看这个抽象类的注释&#xff1a; Abstract implementation of the ApplicationContext interface. Doesnt man…

Android存储文件路径的区别

一、Android存储简介 Android系统分为内部存储和外部存储 从Android6.0开始不断在更新存储&#xff08;读写&#xff09;权限&#xff0c;除了在AndroidManifest.xml文件里声明&#xff0c;app运行时也要动态申请使用对应的权限 提醒&#xff1a;应用私有存储不需要动态申请权…

大模型相关内容的研究学习

大模型研究学习 1.大模型的“幻觉” 幻觉可以分为事实性幻觉和忠实性幻觉。 事实性幻觉&#xff0c;是指模型生成的内容与可验证的现实世界事实不一致。 比如问模型“第一个在月球上行走的人是谁&#xff1f;”&#xff0c;模型回复“Charles Lindbergh在1951年月球先驱任务…

抖音剪辑音乐配乐音效合集,短视频制作分类配乐库素材

一、素材描述 这是一套短视频剪辑配乐库&#xff0c;包含大气震撼、儿童幽默、片头片尾、科技未来、惊险悬念、婚礼婚庆、各种各样、轻松明朗、民族风格、叙事抒情等配乐分类&#xff0c;基本上是应有尽有了。本套配乐库素材&#xff0c;大小18.18G&#xff0c;5个分卷压缩文件…

Chromium 调试指南2024 Windows11篇-条件断点、函数断点(十一)

1. 前言 在调试过程中&#xff0c;步进代码和条件断点/函数断点是非常有用的工具和技术&#xff0c;它们可以帮助开发者更加精确地定位和解决问题。本文将介绍步进代码的常用工具以及条件断点/函数断点的设置方法&#xff0c;帮助开发者更加高效地进行调试工作。 2. 步进代码…

一例Phorpiex僵尸网络变种的分析

概述 这是一例Phorpiex僵尸网络变种&#xff0c;通过NSIS打包&#xff0c;加载恶意dll(Flaminius.dll)&#xff0c;读取dat文件&#xff08;Preoral.dat&#xff09;&#xff0c;在内存解密并解压缩出一个Pe&#xff0c;创建同名傀儡进程并注入。通过可移动存储介质传播&#…

单链表题-ysf-反转-中间节点-回文-合并-分割

环形链表的约瑟夫问题_牛客题霸_牛客网 经典的约瑟夫环 #include <stdint.h> #include <stdlib.h> //创建链表 typedef struct ListNode ListNode;ListNode* buyNode(int x){ListNode* newNode(ListNode*)malloc(sizeof(ListNode));if(newNodeNULL){exit(1);}newN…

【Linux取经路】进程通信之匿名管道

文章目录 一、进程间通信介绍1.1 进程间通信是什么&#xff1f;1.2 进程间通信的目的1.3 进程通信该如何实现 二、管道2.1 匿名管道2.1.1 站在文件描述符角度深入理解管道2.1.2 接口使用2.1.3 PIPE_BUFFER 和 Pipe capacity2.1.4 管道中的四种情况2.1.5 管道特征总结 2.2 匿名管…

ORACLE ODAX9-2的一个误告警Affects: /SYS/MB的分析处理

在运维的多套ORACLE ODAX9-2版本&#xff0c;都遇到了一个计算节点的告警&#xff1a;Description: The service Processor poweron selftest has deteced a problem. Probabity;:100, UulD:cd1ebbdf-f099-61de-ca44-ef646defe034, Resource:/SYS/MB,&#xff1b;此告警从描述上…

优雅草便民工具v2.0.3更新

优雅草便民工具v2.0.3更新 2024年5月13日v2.0.3更新优雅草便民工具youyacao-tools-界面大改版增强用户体验 apk下载 https://fenfacun.youyacao.com/tools203.apk 介绍 优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益工具&#xff0c;2024年1月17…

202009青少年软件编程(Python)等级考试试卷(三级)B卷

第 1 题 【单选题】 关于利用CSV模块对文件进行操作,下列描述不正确的是&#xff1f; A :CSV是一种常用的文本格式,使用逗号分隔值的 B :CSV模块是Python的内置模块,包含很多函数,可以非常方便地读取和写入数据 C :由于CSV模块是Python的内置模块,所以可直接使用,无需引入 …

【全开源】国际版JAVA同城服务美容美发到店服务上门服务系统源码支持Android+IOS+H5

国际版同城服务美容美发到店与上门服务系统&#xff1a;一站式打造美丽新体验 随着人们生活水平的提高和审美观念的升级&#xff0c;美容美发服务已成为人们日常生活中不可或缺的一部分。为了满足全球消费者的多样化需求&#xff0c;我们推出了“国际版同城服务美容美发到店与…