机器学习:决策树——ID3算法、C4.5算法、CART算法

news2024/11/14 0:55:04

        决策树是一种常用于分类和回归问题的机器学习模型。它通过一系列的“决策”来对数据进行分类或预测。在决策树中,每个内部节点表示一个特征的测试,每个分支代表特征测试的结果,而每个叶节点则表示分类结果或回归值。

决策树工作原理

  • 根节点:从根节点开始,决策树将数据集分割为多个子集。

  • 选择特征:在每个节点处,选择一个特征进行划分。选择标准通常是信息增益(ID3算法)、增益率或基尼指数(CART算法)。

  • 分割数据:根据选定的特征,将数据分割成不同的子集。

  • 递归构建树:对每个子集递归执行相同的过程,直到满足停止条件(例如,节点纯度达到最大、树的深度达到限制或节点数过少)。

  • 叶节点:最终的叶节点给出预测值,对于分类问题,通常是该节点中样本最多的类别;对于回归问题,通常是该节点中样本的平均值。

决策树的优化

1. 剪枝

  • 预剪枝:在树构建过程中提前停止分裂,以避免生成过于复杂的树。例如,通过设定最小样本数、最大树深度或者最大叶节点数等参数来控制树的生长。

  • 后剪枝:树生成后,检查每个节点的分裂是否真的能提高模型的预测性能。如果没有,可以通过剪枝去除不重要的分支。剪枝的目标是减少模型的复杂度,防止过拟合。

2. 最大化信息增益或基尼指数

  • 在构建决策树时,可以选择不同的标准来选择最佳分裂节点。最常见的标准是信息增益(率)和基尼指数。优化这些指标的计算,能够帮助树做出更加有效的分裂。

3. 调整超参数

  • 最大深度:限制树的最大深度,避免树的过度生长,降低过拟合风险。

  • 最小样本分裂数:控制每个内部节点最少需要的样本数,如果样本数小于该值,就不再分裂。

  • 最小样本叶节点数:控制每个叶子节点最少需要的样本数,保证树不会过度拟合。

  • 最大特征数:控制每个节点分裂时使用的特征数。通过随机选择部分特征,有助于避免过拟合,并增加模型的泛化能力。

4. 集成学习

  • 随机森林:通过生成多个决策树,并对每棵树的预测结果进行投票,减少单一决策树的偏差和方差。

  • 梯度提升决策树 (GBDT):通过逐步修正之前树的错误,构建多个弱决策树,将它们组合成一个强大的模型,能够有效提高预测性能。

5. 特征选择和工程

  • 选择合适的特征,有助于减少噪声和提高决策树的效率。特征选择方法如L1正则化可以帮助筛选出重要特征,减少不必要的计算。

  • 通过合适的特征工程,例如对数转换、标准化等,确保数据的尺度一致,提升模型的稳定性和准确性。

6. 处理类别不平衡问题

  • 在处理类别不平衡的数据时,决策树可能偏向于多数类。可以通过调整类别权重、过采样或欠采样等方法来处理类别不平衡问题。

7. 样本权重调整

  • 对于某些重要样本,给它们更大的权重,有助于提高模型对这些样本的关注度,尤其在类别不平衡的情况下特别有用。

ID3决策树 

        ID3是一种经典的决策树算法,它用于分类任务。ID3的核心思想是通过选择信息增益最大的特征来递归地构建决策树。是信息论中的一个概念,用来衡量一个数据集的不确定性或混乱程度。熵越大,意味着数据集中各类别的分布越不均匀,系统的混乱程度越高。反之,熵越小,表示数据集中各类别的分布更加集中,不确定性较小。

基本原理

1、熵的计算公式:假设有一个数据集D,它包含n个类别的样本,各类别的概率为 p1,p2,...,pn,则熵的计算公式为:

注:H(D)为正数,因为概率pi的对数为负数,再加一个负号就变为正。

 2、信息增益的计算公式:信息增益是通过某个特征A来划分数据集D后,信息不确定性减少量。设D的熵为 H(D),而根据特征A划分后得到的子集的熵分别为 H(D1),H(D2),...,H(Dk),则根据特征A划分的信息增益的计算公式为:

即,信息增益 = 总熵 -  sum ( Di在D的占比 * 子集的熵 )

其中,∣Di∣是子集Di的样本数,∣D∣ 是数据集D的样本数。

3、计算所有特征的信息增益

4、选择信息增益最大的特征:信息增益越大,表示选择该特征进行划分会使得数据集更加“纯净”,即减少了更多的不确定性,适合作为当前树节点的划分特征。

ID3决策树的局限性:

优点:

  • 简单易理解:ID3算法简单直观,容易实现。

  • 分类效率高:适用于特征数较小的数据集。

缺点:

  • 容易过拟合:由于ID3倾向于选择信息增益最大的特征,有时会造成过拟合,特别是当数据中有很多噪声时。

  • 倾向于选择取值多的特征:ID3在选择特征时,倾向于选择取值多的特征,这可能导致不合理的划分。举个例子:在 ID3 算法中,如果我们选择“身份证号”特征进行划分,数据集几乎可以被划分到纯净(即每个子集中只有一个样本),使得信息增益很高。然而,这种划分并没有真正的分类效果,因为“身份证号码”实际上不具有区分类别的意义,而只是过度划分了数据集。为了解决这一问题,C4.5算法提出了使用增益率来代替信息增益。

  • 不能处理连续特征:ID3算法只能处理离散的特征,对于连续特征需要离散化处理。

C4.5算法

        C4.5在ID3基础上改进,使用信息增益率进行分裂,能够处理连续特征和缺失值,还增加了后剪枝机制。C4.5和CART都是决策树算法,但CART可以用于分类和回归问题,而C4.5只能用于分类。 C4.5算法的特点:

1、以增益率作为特征选择标准

  • 信息增益率:信息增益和固有值的比值,用于减少对多取值特征的偏向。

  • 固有值: 衡量特征 A 的取值数量和分布。

  • 优先选择增益率最大的特征作为划分点。

2、能处理缺失值

        C4.5 在处理缺失值时,采取样本加权的方法,即在计算信息增益增益率时,赋予缺失值样本一个权重。这个权重表示缺失值样本属于每个分支的可能性,权重的大小依赖于该特征在其他样本中的(概率)分布。

举个例子:

假设有数据集D,A有两种取值(a1和a2),样本4为缺失值样本:

1、计算特征 A 的概率分布(计算概率时不考虑缺失值样本),并加权分配:

  • a1出现 2 次(样本 1 和 3),所以 P(a1)=2/4=0.5,则样本 4 的分配权重0.5到 a1 分支

  • a2出现 2 次(样本 2 和 5),所以 P(a2)=2/4=0.5,则样本 4 的分配权重0.5到 a1 分支

2、计算分支的样本数和熵

  • 对于 a1 分支:

    • 原始样本中有 2 个样本(样本 1 和 3),加上样本 4 的权重(0.5),所以总样本数|Da1|为: 2+0.5=2.5。

    • 计算该分支的熵 H(Da1)。(根据类别标签 "Yes" 和 "No"),

  • 对于 a2 分支:

    • 原始样本中有 2 个样本(样本 2 和 5),加上样本 4 的权重(0.5),所以总样本数|Da2|为: 2+0.5=2.5。

    • 计算该分支的熵 H(Da2)。(根据类别标签 "Yes" 和 "No")

注:根据分配到a1的0.5权重,分子∣Da1,Yes|也要加0.5,但是∣Da1,No|不用加0.5,因为缺失样本4的类别为Yes,而不是No。这里只以a1分支为例,其他分支同理。

3、计算信息增益和增益率:

其中,Di为Dai。

4、总的来说,这些公式都变为带权公式而已。(过程不过多赘述)

3、能处理连续特征

  • 排序:对于某个连续特征,将所有样本的特征值按升序排列

  • 确定候选分裂点:计算相邻样本之间的均值作为候选分裂点。例如,对于排序后的连续特征值序列 x1,x2,...,xn​,候选分裂点为(x1+x2)/2,... 。一共n-1个候选分裂点。

  • 计算信息增益率:对于每个候选分裂点,C4.5 将候选分裂点作为划分依据(分为小于或等于分裂点的子集、大于分裂点的子集),并计算此划分下的信息增益率。

  • 选择最佳分裂点:选择信息增益率最大的候选分裂点,作为该连续特征的最优分裂点。信息增益率越大,分裂效果越好。

  • 生成决策节点:根据该分裂点将数据划分为左右两个子集,并继续对子集递归应用 C4.5 算法,直至满足停止条件(如纯度较高或数据量不足)。

  • 生成树结构:以递归方式将分裂节点连接起来,最终形成一棵决策树。

 4、剪枝操作

        C4.5 使用 后剪枝 方法,即先生成一个完全的决策树,然后评估每个节点的剪枝效果。如果剪枝后的树在验证集(或测试集)上的误差率更低或相当,剪枝就被认为是有效的。如果剪枝后误差率增加,那么不进行剪枝。这样,C4.5 通过对比剪枝前后的误差率来判断剪枝操作的有效性。

后剪枝的过程:

  • N为节点的样本总数, e 为节点样本被错误分类,则误差率 E 计算公式为:

其中,0.5 是一种平滑参数,用于在数据样本量较小时防止误差率过小。

  • 叶节点误差率:直接使用上述公式计算叶节点的误差率

  • 子树误差率:对子树中的所有叶节点误差进行加权平均,得到子树误差率,也是剪枝前的误差率。

  • 剪枝后的误差率:即当前特征节点(非叶节点)的误差率,也是根据误差率 E 公式计算。

  • 比较剪枝前、后的误差率:若 剪枝后的误差率 <  剪枝前的误差率,则认为剪枝是有效果的,执行剪枝操作。否者不执行剪枝操作。

  • 重复剪枝:直到剪枝后不能再有效降低误差率。

C4.5算法的优缺点

C4.5 的优点:

  1. 处理连续值:与 ID3 不同,C4.5 能够处理连续属性。

  2. 处理缺失值:C4.5 可以处理缺失的数据,它使用了概率估计方法来分配缺失值的权重,避免了丢弃包含缺失值的数据。

  3. 剪枝功能避免过拟合:C4.5 采用了后剪枝技术,通过修剪已经生成的决策树来避免过拟合,提高了模型的泛化能力。

  4. 支持多类别分类:与 ID3 类似,C4.5 能够处理多类别的分类问题。

  5. 决策树生成效果好:C4.5 相对于 ID3,在生成树的过程中考虑了信息增益比,可以减少过拟合的风险。

  6. 模型易解释

C4.5 的缺点:

  1. 计算开销较大:C4.5 需要遍历所有属性的所有可能划分点,计算每个属性的增益比,特别是在数据量较大时,这会导致较高的计算成本。

  2. 对噪声敏感:尽管 C4.5 在一定程度上能减少过拟合,但它仍然可能对数据中的噪声敏感,尤其在数据非常复杂或存在许多异常值的情况下,决策树可能会变得过于复杂。

  3. 生成的树可能过大:尽管采用了剪枝技术,生成的决策树有时仍然可能较大,影响模型的可解释性。

  4. 处理不平衡数据的能力有限:C4.5 在面对类别不平衡时可能表现不佳,因为它的划分标准侧重于信息增益比,对于类别较少的类别可能无法进行有效划分。

  5. 只能用于分类

CART算法

        CART(Classification and Regression Trees)算法是一个基于树形结构的监督学习算法,用于解决分类和回归问题。其核心思想是通过递归地将数据集划分为更小的子集,从而构建一个二叉树,树的每个叶子节点代表最终的分类标签或回归预测值。

总体流程 

  • 选择特征和分割点:每个节点选择一个特征及其最优分割点,将数据划分为两个子集。

  • 递归分裂:对每个子集继续执行步骤1,直到满足停止条件(如最大树深度或最小样本数)。

  • 决策节点与叶子节点:节点的分裂基于特征和分裂点(阈值),最终将数据划分为叶子节点,叶子节点提供预测结果。

  • 剪枝(可选):通过后剪枝或预剪枝来避免过拟合。

CART算法的关键部分

(一)分类问题中的分割标准:基尼指数。假设某个节点包含 m 个类别,类别 i 的样本比例为 pi,那么该节点的基尼指数 Gini(t)为:

基尼指数的特点:

  • 当节点完全纯净时(所有样本属于同一类别),基尼指数为0。

  • 当节点的类别均匀分布时,基尼指数最大,表示该节点的“杂乱”程度最高。

1.1  选择一个特征及其分裂点

        对于每个特征 X(如年龄、收入等),CART会尝试所有可能的分裂点。然后,基于每个分裂点,我们将数据集D分为两个子集:左子集 D_left 和右子集 D_right。

注:对于数值型特征,分裂点选择参考上文C4.5算法——处理连续特征部分。

1.2  计算加权基尼指数(表示分裂后两个子集的纯度)

1.3  选择最小加权基尼指数,作为特征X的最优分裂点,也作为特征X的分裂效果

1.4  计算其他特征的最小加权基尼指数,并选择所有特征中加权基尼指数最小的特征作为当前节点的分裂点。

1.5  同理,继续这样分裂下去,直到分裂出一颗完整的决策树。

(二)回归问题中的分割标准:均方误差(MSE)。MSE衡量的是数据的目标值(通常是一个连续变量)在当前节点的均匀性。MSE越小,表示数据点的目标值分布越集中,节点的纯度越高。

选择当前节点的分裂特征的当方法与使用基尼指数类似。

(三)关于“最佳分割点”的总结

CART选择最佳分割点的过程本质上是一个贪心算法,在每个节点选择最优的特征和分割点,但不考虑未来可能的分割。这个过程的关键步骤可以总结为:

  • 对于每个特征,遍历所有可能的分割点。
  • 对于每个分割点,根据该分割点将数据划分为两部分,并计算子集的纯度。
  • 选择使得纯度最小的分割点(基于基尼指数或均方误差)。

通过这种方式,CART算法能够在每个节点做出最优的分割,逐步构建决策树,直到满足停止条件(如树的深度、节点样本数、纯度等)

(四)举个简单的CART回归例子。

假设有这样一个数据集:

4.1  根节点分裂

假设选择面积作为根节点的分裂特征,并使用一个分裂点(阈值)进行分裂,比如“面积 ≤ 70”:

  • 左子树:面积 ≤ 70(A, B, C)
  • 右子树:面积 > 70(D, E)

4.2  左子树分裂

选择使用另一个特征“房龄”进行分裂。假设选择“房龄 ≤ 7”作为分裂条件:

  • 左子树(继续分裂):房龄 ≤ 7(A, B)
  • 右子树:房龄 > 7(C)

4.3  右子树分裂

假设选择“房龄 ≤ 5”作为分裂条件,数据集会被再次分裂:

  • 左子树:房龄 ≤ 5(D)
  • 右子树:房龄 > 5(E)

4.4  生成决策树

4.5  预测

假设有一个测试样本:面积为40,房龄为6。根据决策树,最终会到达叶子节点(A,B)。。因为例子是一个回归任务,该叶子节点的预测值就是A和B的目标值的平均,即(100+120)/2 = 110 万。所以测试样本的预测值为110万。

CART的剪枝操作

        CART算法包括两种剪枝方式:预剪枝和后剪枝。预剪枝在树构建过程中进行,而后剪枝在树构建完毕后对其进行优化。CART主要使用后剪枝,通过代价复杂度剪枝方法,生成一个平衡复杂度和误差的、更简洁、泛化能力更强的树。

剪枝过程:

  • 从底部向上剪枝:从树的叶节点开始逐层向上,每次合并最小化代价复杂度的分支。

  • 计算剪枝后的代价复杂度:对每个非叶节点,将该节点的子树替换为叶节点,计算替换后整棵树的代价复杂度。若剪枝后的代价复杂度小于剪枝前,则执行剪枝操作;否则保留原分支。

  • 选择最优子树:逐步合并分支,直到找到使代价复杂度最小的子树为止。

  • 选择最优 α 值:通过调整 α,可以找到一个能平衡复杂度和误差的最佳树,可以通过交叉验证独立验证集来确定最优的 α 值。

CART算法的优缺点

优点

  1. 模型易解释

  2. 能处理分类和回归任务

  3. 无需大量数据预处理:相比于一些其他机器学习算法,CART对数据的预处理要求较低。它不要求特征标准化或归一化,并且能够处理缺失数据(通过缺失值处理机制,如分配默认值或插补)。

  4. 能够处理数值型和类别型特征:CART能够处理数值型特征(通过划分数值区间)和类别型特征(通过类别的组合划分)。这种灵活性使得它能够处理多种类型的数据。

  5. 能够自动处理特征选择:在每个节点分裂时,CART自动选择最能有效分割数据的特征。因此,用户不需要进行显式的特征选择或特征工程,这减少了模型开发的工作量。

  6. 能处理非线性关系:决策树通过一系列简单的条件判断进行决策,因此它能够捕捉数据中的非线性关系,而不像线性模型那样仅能处理线性关系。

  7. 不易受到异常值影响:由于CART算法是基于划分数据的,它通常对异常值具有一定的鲁棒性。异常值不会对树的构建产生过大的影响,除非异常值非常突出。

缺点

  1. 容易过拟合:CART算法容易发生过拟合,特别是在数据集较小或者树的深度过大时。决策树可能会过分复杂地拟合训练数据中的噪声,从而在测试数据上表现差。

  2. 对数据噪声敏感:尽管决策树对单个异常值具有一定的鲁棒性,但在存在大量噪声数据时,决策树可能会构建非常复杂的模型来拟合这些噪声,从而降低模型的泛化能力。

  3. 可能产生不稳定的模型

    • 对于相似的数据集,CART算法可能会生成不同的树结构,导致模型的稳定性较差。这种不稳定性可以通过集成方法(如随机森林)来缓解。
  4. 无法捕捉复杂的关系:虽然CART可以捕捉非线性关系,但它只能通过简单的划分来表示数据的关系。因此,对于一些非常复杂的非线性关系,单棵决策树可能不足以拟合得非常好。

  5. 决策边界较为硬性:CART通过逐步划分特征空间来生成决策边界,这种边界通常是直线的(即通过一系列轴对齐的平面划分数据)。这意味着对于一些数据分布较为复杂的问题(如多维曲线的分布),决策边界可能无法很好地适应数据的结构。

  6. 对不平衡数据敏感:如果数据集中的类别不平衡,CART可能会偏向于多数类。例如,在二分类任务中,如果一类样本占大多数,CART可能会倾向于预测该类,从而影响模型的性能。可以通过使用类别权重调整分裂标准来缓解这一问题。

  7. 计算复杂度较高:尽管CART在构建决策树时通常表现出较好的计算效率,但在大数据集或高维数据集上,遍历所有特征和可能的分割点会导致计算复杂度较高,尤其是在特征较多的情况下。

  8. 不适合高维数据:当数据的维度非常高时,CART可能会遇到维度灾难。在高维数据中,决策树的分裂点选择变得更加困难,可能导致模型无法有效捕捉数据的结构。

  9. 处理缺失值能力有限:CART算法的缺失值处理较为简单,一般是通过删除缺失值的样本或用统计方法(如均值、众数)进行填充。它在分裂过程中会通过概率分配来处理缺失值,但整体处理策略相对较为简单。C4.5的缺失值处理方法比CART更加精细和复杂,因此在面对缺失值较多的数据时,C4.5可能会表现得更为稳定和鲁棒。

# 文章整理的内容来自多方渠道。如有错误,欢迎大噶指正! 

# 制作不易,如果文章对大噶有帮助,点个小赞 鼓励一下叭!

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

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

相关文章

Angular 和 Vue2.0 对比

前言 &#xff1a;“业精于勤&#xff0c;荒于嬉&#xff1b;行成于思&#xff0c;毁于随” 很久没写博客了&#xff0c;大多记录少进一步探查。 Angular 和 Vue2.0 对比&#xff1a; 一.概念 1.1 Angular 框架&#xff1a; 是一款由谷歌开发的开源web前端框架&#xff08;核…

Python酷库之旅-第三方库Pandas(208)

目录 一、用法精讲 971、pandas.MultiIndex.set_levels方法 971-1、语法 971-2、参数 971-3、功能 971-4、返回值 971-5、说明 971-6、用法 971-6-1、数据准备 971-6-2、代码示例 971-6-3、结果输出 972、pandas.MultiIndex.from_arrays类方法 972-1、语法 972-2…

[Linux]:IO多路转接之epoll

1. IO 多路转接之epoll 1.1 epoll概述 epoll是Linux内核为处理大规模并发网络连接而设计的高效I/O多路转接技术。它基于事件驱动模型&#xff0c;通过在内核中维护一个事件表&#xff0c;能够快速响应多个文件描述符上的I/O事件&#xff0c;如可读、可写、异常等&#xff0c;…

Spring Security 认证流程,长话简说

一、代码先行 1、设计模式 SpringSecurity 采用的是 责任链 的设计模式&#xff0c;是一堆过滤器链的组合&#xff0c;它有一条很长的过滤器链。 不过我们不需要去仔细了解每一个过滤器的含义和用法,只需要搞定以下几个问题即可&#xff1a;怎么登录、怎么校验账户、认证失败…

API 接口进行多分支管理的方法

原文链接&#xff1a;API 接口进行多分支管理的方法

链表类算法【leetcode】

链表的定义 面试时&#xff0c;需要自己手写... // 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 }; 【构造函数可以省略&#xff0c;C默认生成一个构造函数…

重构开发之道,Blackbox.AI为技术注入智能新动力

本文目录 一、引言二、Blackbox.AI实战体验2.1 基于网页界面生成前端代码进行应用开发2.2 与AI助手实现实时智能对话2.3 重塑大型文件交互方式2.4 链接Github仓库进行对话编程 三、总结 一、引言 在生产力工具加速进化的浪潮中&#xff0c;Blackbox.AI开始崭露头角&#xff0c…

【STM32F1】——9轴姿态传感器JY901与IIC通信

【STM32F1】——9轴姿态传感器JY901与IIC通信 一、简介 本篇主要对9轴姿态传感器JY901的调试过程进行总结,实现了以下功能。 IIC通信采集+串口收发:使用STM32F103C8T6的GPIO口模拟IIC,从JY901读取数据,并通过USART1串口发送到PC。二、JY901介绍 电压:3.3-5V量程:X/Z轴 …

Linux网络——自定义协议与序列化

一、协议 协议是一种 " 约定 ". socket api 的接口 , 在读写数据时 , 都是按 " 字符串 " 的方式来发送接收的。如 果我们要传输一些 " 结构化的数据 "&#xff0c;依然可以通过协议。 其实&#xff0c;协议就是双方约定好的结构化的数据。…

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建 &#xff08;1&#xff09;虚拟机 ubuntu 要使用桥接模式&#xff0c;不能使用其他模式 &#xff08;2&#xff09;通过网线将PC和开发板网口直连:这样的连接&#xff0c;开发板是无法连接外网的 &#xff08;3&#xff…

更改Ubuntu22.04锁屏壁纸

更改Ubuntu22.04锁屏壁纸 sudo apt install gnome-shell-extensions gnome-shell-extension-manager安装Gnome Shell 扩展管理器后&#xff0c;打开“扩展管理器”并使用搜索栏找到“锁屏背景”扩展

大模型推理优化技术-KV Cache

近两年大模型火出天际&#xff1b;同时&#xff0c;也诞生了大量针对大模型的优化技术。本系列将针对一些常见大模型优化技术进行讲解。 大模型推理优化技术-KV Cache大模型推理服务调度优化技术-Continuous batching大模型底显存推理优化-Offload技术大模型推理优化技术-KV C…

力扣 LeetCode 24. 两两交换链表中的节点(Day2:链表)

解题思路&#xff1a; 暂存节点tmp和tmp1 注意&#xff1a;while (cur.next ! null && cur.next.next ! null)表示为偶数和奇数时的循环停止条件&#xff0c;并且while语句中的顺序不可交换&#xff0c;交换会报空指针异常 class Solution {public ListNode swapPai…

动态规划-背包问题——494.目标和

1.状态表示 题目来源 494.目标和——力扣 测试用例 2.算法原理 1.状态表示 首先我们需要将问题简化&#xff0c;这里需要找到能将数组组合计算成为指定数字target的添加方式&#xff0c;那么我们就可以将数字分为两类&#xff0c;一类是前面添加""的&#xff0c;另…

哪些因素会导致充电器的充电速度变慢?-纳米软件

充电器的充电速度变慢可能由多种原因引起。以下是一些常见的因素&#xff1a; 一、充电器本身的问题 充电头功率不足&#xff1a;不同的充电头有不同的输出功率&#xff0c;如果使用的充电头功率较低&#xff0c;那么充电速度就会变慢。例如&#xff0c;一些老旧的充电头可能…

刷题强训(day06) -- 大数加法、链表相加、大数乘法

目录 1、大数加法 1.1 题目 1.2 思路 1.3 代码实现 2、链表相加&#xff08;二&#xff09; 2.1 题目 2.2 思路 2.3 代码实现 3、大数乘法 3.1 题目 3.2 思路 3.3 代码实现 1、大数加法 1.1 题目 1.2 思路 这道题可以模拟列竖式相加解答&#xff0c; 将每一位都转…

数字后端教程之Innovus report_property和get_property使用方法及应用案例

数字IC后端实现Innovus中使用report_property可以报告出各种各样object的属性&#xff0c;主要有cell&#xff0c;net&#xff0c;PG Net&#xff0c;Pin&#xff0c;时钟clock&#xff0c;时序库lib属性&#xff0c;Design属性&#xff0c;timing path&#xff0c;timin arc等…

网络基础 - 网段划分篇

我们知道&#xff0c;IP 地址(IPv4 地址)由 “网络标识(网络地址)” 和 “主机标识(主机地址)” 两部分组成&#xff0c;例如 192.168.128.10/24&#xff0c;其中的 “/24” 表示从第 1 位开始到多少位属于网络标识&#xff0c;那么&#xff0c;剩余位就属于主机标识了&#xf…

python实战(八)——情感识别(多分类)

一、任务目标 本文使用的是来自Kaggle的一个情感识别数据集&#xff0c;这个数据集的总数据量是5934条&#xff0c;标签为anger、fear、joy三种情感的其中一种&#xff0c;很明显是一个多分类任务。这里&#xff0c;我们将使用微调技巧进行深度学习建模&#xff0c;同时我们会比…

23423234

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…