【机器学习】集成学习---Bagging之随机森林(RF)

【机器学习】集成学习---Bagging之随机森林(RF)

  • 一、引言
    • 1. 简要介绍集成学习的概念及其在机器学习领域的重要性。
    • 2. 引出随机森林作为Bagging算法的一个典型应用。
  • 二、随机森林原理
    • 1. Bagging算法的基本思想
    • 2. 随机森林的构造
    • 3. 随机森林的工作机制
  • 三、随机森林的伪代码
  • 四、随机森林的优点
  • 五、案例分析
  • 六、总结与展望

一、引言

1. 简要介绍集成学习的概念及其在机器学习领域的重要性。

  在机器学习的广袤领域中,集成学习是一种强大且灵活的策略,它通过将多个单独的学习器(或称为“基学习器”)组合起来,形成一个更加强大的学习器,以提升模型的预测性能。集成学习的核心思想在于“集体智慧”的力量,即多个学习器的联合决策通常会比单一学习器的决策更为准确和稳健。

  集成学习的重要性在于它能够有效解决单一学习器可能存在的过拟合、欠拟合、稳定性差等问题。通过将多个基学习器的预测结果进行综合,集成学习不仅能够提高预测精度,还能增强模型的鲁棒性和泛化能力。此外,集成学习还能够利用不同基学习器之间的差异性,捕捉到数据中的更多信息,从而进一步提升预测性能。

  在集成学习的众多策略中,Bagging(Bootstrap Aggregating)是一种非常受欢迎的方法。Bagging通过自助法采样生成多个不同的训练子集,并在每个子集上构建基学习器。由于每个基学习器都是在不同的数据子集上训练的,因此它们之间具有较大的差异性。这种差异性使得Bagging能够在集成过程中有效地降低模型的方差,提高预测的稳定性。

2. 引出随机森林作为Bagging算法的一个典型应用。

  随机森林(Random Forest,简称RF)则是Bagging算法的一个典型应用,也是当前机器学习领域最受欢迎的算法之一。随机森林以决策树作为基学习器,并在构建每棵决策树时引入了额外的随机性。具体来说,随机森林在构建决策树时不仅使用自助法采样生成不同的训练子集,还会在每个节点分裂时随机选择一部分特征进行考虑。这种随机性的引入进一步增加了基学习器之间的差异性,使得随机森林能够取得更好的预测性能。

  综上所述,集成学习是一种强大的机器学习策略,而随机森林作为Bagging算法的一个典型应用,不仅继承了Bagging的优点,还通过引入随机性进一步提升了模型的预测性能。在接下来的内容中,我们将详细探讨随机森林的原理、实现方式、优点以及实际应用案例,以期为读者提供更深入的理解和认识。

二、随机森林原理

  随机森林是一种基于集成学习的预测模型,它结合了多个决策树的预测结果来提高整体预测的准确性。随机森林的构造基于Bagging算法,通过在数据样本和特征选择上的随机性,增加模型的多样性和稳定性。

1. Bagging算法的基本思想

  在集成学习原理总结中,给出bagging的原理图。
在这里插入图片描述

  (1)、Bagging的特点“随机采样”。随机采集跟训练集个数m相同的样本,采集T次。得到采样集。

  (注意:GBDT(Gradient Boosted Decision Tree)的子采样是无放回采样,而Bagging的子采样是放回采样。)

  (2)、对于一个样本,在m个样本的随机采样中,每次被采集到的概率是1/m。

  在m次采样中没有采集到的概率是:

   P (一次都未被采集) = ( 1 − 1 / m ) m P(一次都未被采集) = (1-1/m)^m P(一次都未被采集)=(11/m)m

  对m取极限得到:
lim ⁡ m → ∞ ( 1 − 1 m ) m → 1 e ≈ 0.368 \begin{aligned} \lim_{m\to \infty} (1 - \tfrac{1}{m})^m \rightarrow \tfrac{1}{e} \approx 0.368 \end{aligned} mlim(1m1)me10.368

  也就是说bagging的每轮随机采样中,训练集大约有36.8%的数据没被采集。

  对于大约36.8%没被采样的数据,称为“袋外数据”。这些数据没参与训练集模型的拟合,但可以作为测试集用于测试模型的泛化能力,这样的测试结果称为“外包估计”。

  (3)、bagging对于弱学习器没有限制,这和Adaboost一样。但是最常用的一般也是决策树和神经网络。

  (4)、bagging的结合策略也比较简单,对于分类问题,通常使用简单投票法,得到最多票数的类别或者类别之一为最终的模型输出。对于回归问题,通常使用简单平均法,对T个弱学习器得到的回归结果进行算术平均得到最终的模型输出。

  由于Bagging算法每次都进行采样来训练模型,因此泛化能力很强,对于降低模型的方差很有作用。当然对于训练集的拟合程度就会差一些,也就是模型的偏倚会大一些。

  Bagging算法的基本思想是通过结合多个基学习器的预测结果来提升整体性能。具体来说,Bagging采用自助法(Bootstrap)采样来生成多个不同的训练子集,并在每个子集上构建基学习器。这种采样方式是有放回的,即每次从原始训练集中随机抽取一个样本后,该样本仍然可以被再次抽取。

  通过自助法采样,每个基学习器都是在不同的数据子集上训练的,因此它们之间具有较大的差异性。这种差异性使得Bagging能够在集成过程中有效地降低模型的方差,提高预测的稳定性。

  在构建基学习器时,Bagging通常采用决策树作为基学习器。决策树是一种易于理解和实现的分类与回归方法,通过递归地将数据集划分为若干个子集,并根据子集的纯度来选择最佳的划分属性。

  在得到多个基学习器的预测结果后,Bagging通过投票或平均的方式将它们组合起来得到最终的预测结果。对于分类问题,通常采用投票的方式,即选择出现次数最多的类别作为最终的预测结果;对于回归问题,则采用平均的方式,即将所有基学习器的预测值取平均得到最终的预测值。

2. 随机森林的构造

  随机森林在Bagging的基础上进行了扩展,通过在构建决策树时引入额外的随机性来增加模型的多样性。具体来说,随机森林在构建每棵决策树时,不仅使用自助法采样生成不同的训练子集,还会在每个节点分裂时随机选择一部分特征进行考虑。

  这种随机选择特征子集的方式使得每棵决策树在构建过程中都只能看到部分特征的信息,从而增加了基学习器之间的差异性。由于每棵决策树都是基于不同的特征子集进行构建的,因此它们对于相同的输入数据可能会产生不同的预测结果。这种差异性使得随机森林能够在集成过程中捕捉到更多的信息,进一步提高预测的准确性。

3. 随机森林的工作机制

  随机森林的工作机制相对简单直观。首先,通过对原始训练集进行自助法采样生成多个不同的子数据集。然后,在每个子数据集上构建一棵决策树,并在构建过程中随机选择特征子集进行分裂。这样,我们就得到了一个由多棵决策树组成的随机森林。

  在预测阶段,对于一个新的输入样本,我们将其输入到随机森林中的每一棵决策树中,得到每棵树的预测结果。然后,根据具体的任务类型(分类或回归),通过投票或平均的方式将所有树的预测结果组合起来,得到最终的预测结果。

  由于随机森林结合了多个基学习器的预测结果,并且基学习器之间具有较大的差异性,因此它能够有效地降低模型的方差和偏差,提高预测的准确性和稳定性。同时,随机森林还具有良好的可解释性和可视化能力,使得用户可以更好地理解和分析模型的预测结果。

三、随机森林的伪代码

  随机森林(Random Forest,简称RF)是一种基于集成学习的算法,它通过构建并结合多个决策树来提高预测的准确性和稳定性。下面我们将通过伪代码的形式详细描述随机森林的算法流程。

输入:D:原始训练数据集m:每次分裂时考虑的特征数(m < 总特征数)n_trees:随机森林中决策树的数量输出:RF:随机森林模型算法流程:
1. 初始化随机森林模型RF为空2. 对于i从1到n_trees:a. 使用自助法(Bootstrap)从D中有放回地随机抽取样本,形成训练子集D_ib. 在D_i上构建一棵决策树T_i:i. 初始化根节点,包含D_i中的所有样本ii. 对于当前节点N,如果它包含的样本都属于同一类别C,或者样本数少于预设阈值,或者没有更多特征可用进行分裂,则将该节点标记为叶节点,其类别为C(对于分类问题)或该节点样本的平均值(对于回归问题)iii. 否则,从D_i中的m个特征中随机选择一个特征子集iv. 使用最佳划分准则(如信息增益、基尼指数等)在选定的特征子集中选择一个特征进行分裂,将当前节点N分裂为多个子节点v. 对每个子节点递归执行步骤ii-iv,直到满足停止条件c. 将构建好的决策树T_i添加到随机森林模型RF中3. 返回随机森林模型RF

  在上面的伪代码中,我们描述了随机森林算法的主要步骤。首先,我们初始化一个空的随机森林模型。然后,对于每一棵树,我们使用自助法从原始训练数据集中随机抽取样本以形成训练子集。在构建每棵决策树时,我们采用了随机选择特征子集的策略来增加基学习器之间的差异性。具体来说,在每次分裂时,我们并不是考虑所有的特征,而是从特征集中随机选择一个子集来进行分裂。这样,每棵树都是在不同的特征和样本子集上构建的,从而增加了模型的多样性。最后,我们将所有构建好的决策树添加到随机森林模型中,并返回这个模型以供后续的预测使用。

  需要注意的是,随机森林中的每棵树都是独立构建的,并且它们的预测结果是通过投票(对于分类问题)或平均(对于回归问题)的方式来进行集成的。这种集成策略使得随机森林能够充分利用各个基学习器的优势,提高整体的预测性能。

  此外,随机森林还有一些超参数可以调整,如每棵树的最大深度、分裂时考虑的最小样本数等,这些参数的选择会影响到模型的复杂度和性能。在实际应用中,我们可以通过交叉验证等方法来选择合适的超参数,以优化模型的预测效果。

四、随机森林的优点

  随机森林作为一种集成学习算法,在机器学习领域具有广泛的应用,其优点使得它在处理各种复杂问题时表现出色。下面将详细阐述随机森林的几个主要优点。

1、预测精度高

  随机森林通过集成多个基学习器(通常是决策树)的预测结果,能够有效提升整体的预测精度。由于每棵决策树都是基于不同的样本子集和特征子集构建的,因此它们之间具有较大的差异性。当这些差异性的基学习器进行集成时,可以通过投票或平均的方式将各自的优点融合起来,从而得到更为准确和稳定的预测结果。这使得随机森林在分类和回归问题上都能表现出色,尤其在处理具有复杂结构和非线性关系的数据时更为有效。

2、能够处理高维数据

  在高维数据场景下,许多机器学习算法可能会面临维度灾难的问题,即随着特征数量的增加,模型的复杂度急剧上升,导致过拟合和计算效率下降。然而,随机森林在处理高维数据时具有天然的优势。它通过在每个节点分裂时随机选择特征子集进行考虑,有效地降低了模型的复杂度,并避免了过拟合的发生。同时,由于随机森林是基于树的算法,它能够自动地选择对预测结果有贡献的特征,忽略那些不相关的特征,从而提高了模型的泛化能力。

3、能够评估特征的重要性

  随机森林提供了一种有效的特征重要性评估方法。在构建每棵决策树的过程中,可以计算每个特征在分裂节点时所带来的不纯度减少量(如信息增益或基尼指数减少量)。通过将这些不纯度减少量在随机森林中所有决策树上进行平均,就可以得到每个特征的平均不纯度减少量,从而评估特征的重要性。这种方法不仅能够帮助我们理解哪些特征对预测结果有重要影响,还可以用于特征选择和降维,进一步提高模型的性能和可解释性。

4、对缺失值不敏感

  在实际应用中,数据往往存在缺失值的问题。许多机器学习算法在处理含有缺失值的数据时需要进行数据清洗或填充操作,这可能会引入额外的噪声或偏差。然而,随机森林对缺失值并不敏感。在构建决策树时,随机森林能够自动地处理含有缺失值的样本,通过考虑不同特征值的组合来找到最优的分裂方式。这使得随机森林能够在不进行数据清洗的情况下直接应用于实际数据集,提高了算法的灵活性和实用性。

5、易于并行化

  由于随机森林中的每棵决策树都是独立构建的,因此该算法可以很容易地进行并行化。这意味着我们可以利用多核处理器或分布式计算平台来同时构建多棵决策树,从而显著提高计算效率。这种并行化的特性使得随机森林能够处理大规模数据集和实时预测任务,满足实际应用中的性能需求。

  综上所述,随机森林具有预测精度高、能够处理高维数据、能够评估特征的重要性、对缺失值不敏感以及易于并行化等优点。这些优点使得随机森林在机器学习领域具有广泛的应用前景,并为解决各种实际问题提供了有效的工具。

五、案例分析

  在本节中,我们将通过一个具体的案例来展示随机森林(RF)在实际问题中的应用。我们将选择一个具有代表性的数据集,执行数据预处理,构建随机森林模型,并评估其性能。最后,我们将分析特征的重要性,并讨论随机森林在该案例中的优势和局限性。

1、案例选择

  我们选择使用经典的Iris数据集进行分类任务。Iris数据集包含了150个样本,每个样本有四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),以及一个目标变量(鸢尾花的种类)。

2、数据预处理

  首先,我们需要加载数据。在Python中,我们可以使用sklearn库中的load_iris函数来加载Iris数据集。然后,我们可以查看数据的形状和特征描述。由于Iris数据集是完整且标准化的,我们不需要进行缺失值处理或特征缩放。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
import numpy as np# 加载数据
iris = load_iris()
X = iris.data
y = iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

3、模型构建与评估

  接下来,我们构建随机森林分类器,并设置合适的参数。然后,我们使用交叉验证来评估模型的性能。

# 构建随机森林模型
rf = RandomForestClassifier(n_estimators=100, max_depth=3, random_state=42)# 交叉验证评估模型性能
scores = cross_val_score(rf, X_train, y_train, cv=5)
print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))# 训练模型
rf.fit(X_train, y_train)# 预测测试集
y_pred = rf.predict(X_test)# 评估模型性能
print("Accuracy:", accuracy_score(y_test, y_pred));
print(classification_report(y_test, y_pred))

  模型识别的结果的如下:
在这里插入图片描述

  为了分析模型的过拟合和欠拟合情况,我们可以绘制学习曲线和验证曲线。这需要更多的代码,并涉及到对模型性能的详细分析。

4、特征重要性分析

  随机森林提供了评估特征重要性的功能,我们可以利用这一功能来分析哪些特征对预测结果贡献最大。

# 获取特征重要性
importances = rf.feature_importances_
indices = np.argsort(importances)[::-1]# 打印特征排名
for f in range(X.shape[1]):print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]]))# 绘制特征重要性图
plt.figure(figsize=(12, 6))
plt.title("Feature importances")
plt.bar(range(X.shape[1]), importances[indices], color="r", align="center")
plt.xticks(range(X.shape[1]), iris.feature_names, rotation=90)
plt.xlim([-1, X.shape[1]])
plt.show()

在这里插入图片描述

5、结果讨论

  通过与其他机器学习算法(如决策树、逻辑回归、支持向量机等)进行比较,我们可以发现随机森林在分类任务中通常表现出较高的性能。随机森林的优势在于它能够自动处理特征选择,对噪声和异常值具有较好的鲁棒性,并且不易过拟合。然而,随机森林也可能存在计算成本较高和解释性相对较差的局限性。在本案例中,随机森林成功地识别了鸢尾花分类的关键特征,并实现了较高的分类准确率。

  通过以上案例分析,我们详细展示了随机森林在实际问题中的应用过程,并通过代码实现了模型的构建、评估以及特征重要性分析。这些步骤不仅帮助我们理解随机森林的工作原理,还为我们在实际项目中应用随机森林提供了有益的参考。

六、总结与展望

  在本文中,我们深入探讨了集成学习中的一种重要方法——随机森林(Random Forest, RF)。随机森林以其出色的预测性能和稳定性,在机器学习领域占据了重要的地位。通过构建多个基学习器(决策树)的集成,随机森林能够显著提升预测的精度,并降低过拟合的风险。同时,随机森林在处理高维数据、评估特征重要性以及处理缺失值等方面也展现出独特的优势。

  在案例分析部分,我们以Iris数据集为例,展示了随机森林在实际分类任务中的应用。通过数据预处理、模型构建与评估以及特征重要性分析,我们验证了随机森林在分类任务中的高效性和准确性。此外,我们还通过与其他机器学习算法的性能对比,进一步凸显了随机森林在该案例中的优势。

  然而,随机森林并非万能之药。尽管它在许多问题上表现出色,但在某些特定情况下可能仍存在局限性。例如,当数据集的样本量较小时,随机森林的性能可能受到影响。此外,由于随机森林基于树的算法,其解释性相对较差,有时难以直观地理解模型的决策过程。

  展望未来,随机森林仍有广阔的发展前景。随着大数据和云计算技术的不断进步,随机森林在处理大规模数据集和实时预测任务方面的能力将得到进一步提升。同时,随着研究的深入,我们有望开发出更高效的算法和更精细的参数调优方法,以进一步提高随机森林的性能和稳定性。

  此外,随机森林在多个应用领域也具有广阔的应用前景。例如,在生物信息学领域,随机森林可以用于基因表达数据的分析和疾病预测;在金融领域,随机森林可以用于风险评估和信用评分;在医疗领域,随机森林可以用于辅助诊断和制定治疗方案。

  总之,随机森林作为一种强大的机器学习算法,已经在许多领域取得了显著的应用成果。未来,随着技术的不断进步和应用领域的不断扩展,随机森林将继续发挥其在机器学习领域的重要作用,并为解决实际问题提供有力的支持。

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

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

相关文章

ClickHouse 如何实现数据一致性

文章目录 ReplacingMegreTree 引擎数据一致性实现方式1.ReplacingMegreTree 引擎2.ReplacingMegreTree 引擎 手动合并3.ReplacingMegreTree 引擎 FINAL 查询4.ReplacingMegreTree 引擎 标记 GroupBy5.允许偏差 前言&#xff1a;在大数据中&#xff0c;基本上所有组件都要求…

Docker创建镜像之--------------基于Dockerfile创建

目录 一、在编写 Dockerfile 时&#xff0c;有严格的格式需要遵循 二、Dockerfile 操作常用的指令 2.1ENTRYPOINT和CMD共存的情形 2.2ENTRYPOINT和CMD的区别 2.3ADD 与COPY的区别 三、Dockerfile案例 3.1构建apache镜像 3.1.1 创建镜像目录方便管理 3.1.2创建编写dock…

函数递归与迭代

目录 1.递归 1.1递归的思想 1.2递归的限制条件 2.递归与迭代 1.递归 函数递归是什么&#xff1f; 递归是学习C语⾔函数绕不开的⼀个话题&#xff0c;那什么是递归呢? 递归其实是⼀种解决问题的⽅法&#xff0c;在C语⾔中&#xff0c;递归就是函数⾃⼰调⽤⾃⼰。 写⼀个史…

大模型对数字营销的驱动赋能

一、大模型驱动的营销数智化个信未来发展趋势 1.模型算法能力全面升级 大模型凭借智能化的用户洞察&#xff0c;个性化的需求预测、系统化的数据分析、效率化的营销决策以及实实化的全域检测支持&#xff0c;为营销行业更加准确地把握市场动态和消费者需求提供了强大支持。可以…

Spring Boot 如何实现缓存预热

Spring Boot 实现缓存预热 1、使用启动监听事件实现缓存预热。2、使用 PostConstruct 注解实现缓存预热。3、使用 CommandLineRunner 或 ApplicationRunner 实现缓存预热。4、通过实现 InitializingBean 接口&#xff0c;并重写 afterPropertiesSet 方法实现缓存预热。 1、使用…

数据结构和算法:贪心

贪心算法 贪心算法是一种常见的解决优化问题的算法&#xff0c;其基本思想是在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部最优的决策&#xff0c;以期获得全局最优解。 贪心算法和动态规划都常用于解决优化问题。它们之间存在一…

TCP/IP协议族中的TCP(二):解析其关键特性与机制

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统 滑动窗口 在前面我们讨论了确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段.这样…

力扣HOT100 - 98. 验证二叉搜索树

解题思路&#xff1a; class Solution {public boolean isValidBST(TreeNode root) {return recur(root,Long.MIN_VALUE,Long.MAX_VALUE);}public boolean recur(TreeNode root,long lower,long upper){if(rootnull) return true;if(root.val<lower||root.val>upper) re…

Ubuntu上的screenfetch

2024年4月28日&#xff0c;周日下午 这些文本是由一个叫做 “screenfetch” 的命令生成的&#xff0c;它会显示一些系统和用户信息&#xff0c;包括操作系统、内核版本、系统运行时间、安装的软件包数量、使用的Shell、分辨率、桌面环境、窗口管理器、主题、图标主题、字体、CP…

Matlab进阶绘图第51期—带填充等高线的三维特征渲染散点图

带填充等高线的三维特征渲染散点图是填充等高线图与特征渲染三维散点图的组合。 其中&#xff0c;填充等高线图与特征渲染的三维散点图的颜色用于表示同一个特征。 由于填充等高线图无遮挡但不直观&#xff0c;特征渲染的三维散点图直观但有遮挡&#xff0c;而将二者组合&…

MySQL数据库进阶篇二(优化、视图/存储过程/存储函数/触发器)

目录 一、SQL优化1.1、插入数据1.2、主键优化1.3、order by优化1.4、group by优化1.5、limit优化1.6、count优化1.7、update优化 二、视图/存储过程/存储函数/触发器2.1、视图2.2、存储过程2.3、存储函数2.4、触发器 一、SQL优化 分为&#xff1a;插入数据优化&#xff0c;主键…

一文了解——企业网站为什么需要安装SSL证书 !

企业网站安装SSL证书主要是出于以下几个关键原因&#xff1a; 1. 数据加密&#xff1a;SSL证书能确保网站与用户浏览器之间的数据传输是加密的&#xff0c;保护敏感信息&#xff08;如登录凭据、个人信息、交易数据&#xff09;不被第三方截取或篡改&#xff0c;维护用户隐私安…

968.监控二叉树 树上最小支配集

法一: 动态规划 一个被支配的节点只会有三种状态 1.它本身有摄像头 2.他没有摄像头, 但是它的父节点有摄像头 3.他没有摄像头, 但是它的子节点有摄像头 我们 dfs(node,state) 记录在node节点时(以node为根的子树),状态为state下的所有最小摄像头 // 本身有摄像头就看左右孩子…

蓦然回首,追忆那些备战OCM的日子

蓦然回首 前段时间偶然在墨天轮群看到一位在墨天轮轮社区非常活跃的老兄发的《那些年&#xff0c;我们一起追过的OCP》的文章&#xff0c;获悉墨天轮在举办【我的备考经验】的有奖征文活动&#xff0c;打开那篇文章&#xff0c;一下子又把我的思绪拉回到了好几年前&#xff0c;…

数据结构之顺顺顺——顺序表

1.浅谈数据结构 相信我们对数据结构都不陌生&#xff0c;我们之前学过的数组就是最基础的数据结构&#xff0c;它大概就长这样&#xff1a; 数组 而作为最简单的数据结构&#xff0c;数组只能帮助我们实现储存数据这一个功能&#xff0c;随着学习的深入&#xff0c;和问题的日渐…

React | React.cloneElement 的使用

我看到同事的代码里有 cloneElement&#xff0c;于是去了解了一下这个函数。 就跟它的名字一样&#xff0c;克隆元素&#xff0c;可以基于一个元素创建一个新的元素&#xff0c;并且为新元素添加新的属性或者覆盖已有的属性。 下面是一个简单例子&#xff1a; .node1 {backg…

Java集合框架-Collection-queue

目录 一、Deque二、ArrayDequeArrayDeque层次结构图ArrayDeque概述ArrayDeque底层数据结构ArrayDeque常用方法(简略) 三、PriorityQueuePriorityQueue层次结构图PriorityQueue概述PriorityQueue 底层数据结构PriorityQueue常用方法(详细) Java里有一个叫做Stack的类&#xff0c…

【Linux】进程的控制①之进程创建与进程退出

一 、进程的创建 1、fork函数 fork函数功能&#xff1a;从已经存在的进程中创建一个新进程。新进程为子进程&#xff0c;原进程为父进程。 fork函数创建进程过后&#xff0c;父子进程代码和数据是共享的。在前面也讲过。 2.函数的返回值 如果进程创建成功&#xff0c;给父进…

Linux中的vi与vim:编辑器的王者之争与深度探索

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 2、vi与vim的历史与发展 …

flutter笔记-webrtc使用1:依赖本地包socket.io-client

文章目录 1. 示例工程2. yaml 修改3. 使用4. socketio 关于自定义服务器自定义签名的问题封装成async和await方式 本文开始介绍webrtc的使用&#xff0c;阅读本文的前提是假设你已经使用过webrtc&#xff0c;了解webrtc的交互机制&#xff0c;不了解的可以看之前的文章&#xf…