XGBoost:从决策树到极限梯度提升树

前言

XGBoost(eXtreme Gradient Boosting)算法,又叫极限梯度提升树,作为集成学习的代表算法之一,不但在学习效率和可扩展性方面展露头角,更在学习精度与鲁棒性方面做出独特贡献;是横扫各大数据挖掘比赛的首选大杀器。本文将从基础知识决策树作为切入点,以决策树到集成学习的发展脉络为线索,着重介绍XGBoost模型解决了哪些问题,如何解决这些问题。

1)本文重点:本文主要研究XGBoost算法,重点关注算法解决的问题及思路,其他相关内容均为知识补充,不做详细介绍;

2)本文缺陷:本文重思路梳理,轻数学推导;由于笔者才疏学浅,如有错误或疏漏敬请批评指正。

目录

1. 决策树

2. 集成学习

3. 随机森林(Random Forest)

4. 自适应提升算法(Adaboost)

5. 梯度提升树算法(GBDT)

6. 极限梯度提升树算法(XGBoost)

7. 总结

8. 基础概念

9. 参考文献

一 决策树

决策树是一种树形结构的机器学习算法,它利用一系列的条件判断,也可以认为是if-then规则的组合,来对数据进行分类或回归预测的过程。这些条件判断通过递归地选择最优特征来构建,形成了一棵由根节点、内部节点和叶节点组成的树状结构。

(一)树结构

1.根节点:是决策树的起始节点,代表整个样本数据集;

2.内部节:点则代表对某个属性特征的一次判断,这些节点根据属性的不同取值将数据集分割成子集;

3.叶节点:则代表分类或回归预测的结果,对于分类问题,叶节点通常是样本所属类别的众数;对于回归问题,叶节点通常是样本值的平均值。

(二)基本思想

由决策树的根节点到叶节点的每一条路径构建一条规则,路径上的内部结点对应决策条件,叶节点的类别或数值对应着规则的结论;下图为西瓜好坏判别的一个简单决策树示例,其中全部西瓜对应整个数据集,是树的根节点,通过内部节点先后判断一个西瓜样本的纹理,根蒂和色泽是否符合相应条件,最终将西瓜样本划分的'好瓜'的叶节点或'坏瓜'的叶节点中,完成西瓜的分类:

在上述示例图中,判断一个西瓜是好瓜还是坏瓜,我们首先判断了纹理,再判断根蒂,最后判断色泽;可以看出当决策树内部节点的特征分裂顺序变换之后,我那将得到一颗完全不同的决策树;当一个新样本进入模型,进行预测,模型的判断结果也会产生差异;因此在多种特征分裂顺序的排列组合中,什么样的分裂顺序是好的,什么样的分裂顺序是不好的,就成为决策树学习的一个关键问题。

(三)分裂算法

一般来说,随着划分过程的不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即节点的'纯度'越来越高;根据这一准则,决策树发展出三种不同的特征选则算法,分别是ID3算法,C4.5算法和CART算法。

1.ID3算法: 通过引入信息熵的概念来度量特征包含的信息量,即'纯度',通常信息熵越大,代表特征所包含的信息量越大,即纯度较低;反之信息熵越小时表示纯度越高;ID3算法使用信息增益作为特征选择的方法,信息增益是整个数据集熵与根据某特征划分节点后的子数据集信息熵之差,即表示通过该特征的分裂,数据集能够提升多少'纯度'; 但ID3算法倾向于选择具有最高信息增益的属性作为决策树的节点,这也导致其更倾向于选择类别更多的属性优选作为分裂点,这可能导致过度拟合;为了弥补ID3的倾向性,C4.5算法对属性分裂方法进行了改进。

2.C4.5算法:不再单纯使用信息增益进行属性选择,而是使用信息增益率;信息增益率是信息增益除以划分属性的固有信息,即划分属性的类别数;其在信息增益的基础上,使用特征的取值数进行了归一化,这在一定程度上解决了ID3对更多类别属性的倾向性,但也会带来新的问题,C4.5会更倾向于选择更少类别的属性;也会在一定程度上导致过拟合。

3.CART算法:C4.5虽然在ID3的基础上进行了改进,但仍然是基于信息熵对属性进行选择;而CART算法使用基尼系数来衡量属性的不纯度,其值越小表示数据越纯,使用Gini系数可以减少大量的对数运算,从而简化计算过程的同时,也减小了对特征取值的偏好,它更关注于数据集的整体不纯度,从而减少了对取值较多或少的偏好,这有助于构建出更平衡、更泛化的决策树模型。同时与ID3算法和C4.5是多叉树,只适用于分类场景;CART算法则是一种二叉树算法,在分裂过程中,每个节点最多生成两个子节点,这不仅简化了决策树的复杂度,也提升了建树的效率;该算法既可以用于分类,又可以用于回归;

4.三种分裂算法对比:

算法 分枝策略 任务类型 特点 连续值处理 分裂准则
ID3 多叉树 二分类 无剪枝策略,易过拟合 无法处理 信息增益
C4.5 多叉树 分类 计算复杂度高 能够处理 信息增益率
CART 二叉树 分类\回归 适用范围更广 能够处理 基尼系数

尽管决策树算法相较于其他传统机器学习算法具有显著优势,例如其高度的可解释性、清晰的分枝规则、处理非线性关系的能力、自动特征选择的功能以及无需数据标准化的便利性,但它同时也面临一些局限性。首先,决策树对异常值较为敏感,这可能导致模型在含有异常值的数据集上表现不佳。其次,当数据集不平衡时,决策树可能会偏向于预测多数类别,从而影响模型的准确性。此外,如果决策树模型设计得过于简单,可能会引发较大的偏差,即模型无法充分拟合训练数据,导致在训练集和测试集上的性能均不理想,出现欠拟合现象。相反,如果模型过于复杂,由于决策树算法通常采用贪婪策略进行特征选择和分裂,容易在训练数据上产生过拟合,特别是在数据集较小或特征较多的情况下,模型可能会捕捉到噪声信息,从而在测试集上的性能下降,导致预测结果的方差增大。为解决上述问题,集成学习提供了完善的方案。

二 集成学习

集成学习最大的特点,就是使用多个模型解决单个问题,根据集成的逻辑不同,可以大致分为以下三类:

(一)Stacking(堆叠法)

区别于后两种集成方法,其特点是集成强学习器,且为不同类型学习器;其认为不同类型学习器可以学到任务的不同侧重点,我们将不同学习器学到的结果融合,就可以得到比单个学习器更全面的预测结果;其实现过程分为两步,第一步分别训练n个强学习器,得到n个预测结果,这步通常采用K-Fold交叉验证的方法为不同学习器划分数据集;第二步将第一步中的n个模型的输出作为n维特征,用一个新模型预测最终输出预测结果;通过结合多个基模型的预测结果,Stacking能够显著降低单一模型带来的偏差和方差,从而提高整体的预测准确性;同时也具有较高的稳定性,由于其结合了多个模型的预测结果,因此即使某个基模型在特定数据集上表现不佳,也不会对整个集成模型的性能产生太大影响;但由于涉及多个模型的选择和调参过程,需要耗费大量时间和精力,也比较依赖工程师的经验,且如果基模型过于复杂或二级模型未能正确训练,仍然可能导致整个集成模型出现过拟合现象;

​​​​​​​

(二) Bagging(装袋法)

Bagging是一种高效的集成学习技术,旨在通过结合多个弱学习器(多数情况下为决策树)来显著增强整体模型的稳定性和准确性。其核心原则遵循"少数服从多数"的民主决策机制。具体而言,Bagging首先利用有放回的随机抽样技术,从原始训练数据集中生成多个差异化的训练子集。随后,基于这些子集,我们并行地训练出多个基学习器,这些基学习器之间相互独立,相互之间没有依赖,可以并行建立。在回归任务中,若弱学习器为回归算法,我们则对多个预测结果进行平均化处理,以得出最终的预测值;而在分类任务中,若弱学习器为分类算法,我们则对多个分类结果进行投票,以众数作为最终的分类结果。这种策略不仅思想直观,而且通过统计上的取均值或取众数方法,有效地降低了整个预测任务的方差,从而巧妙地解决了单一弱学习器预测方差偏高的问题。因此,Bagging成为了一种提升模型泛化能力、减少过拟合风险的强大工具,代表算法有随机森林算法(Random Forest);

​​​​​​​

(三)Boosting(提升法)

Boosting与Bagging都是通过组合多个弱学习器来构建一个强学习器,不同于Bagging的并联组合方式,Boosting对于多个弱学习器采用串联的组合方式;即每建立一个新的弱学习器,都要依赖与前一个弱学习器的学习结果;弱学习器之间相互依赖;每个基学习器依据上一个弱学习器,计算损失函数,并使用损失函数自适应的影响下一个弱分类器的构建,最终输出结果是所有弱评估器的加权平均。其特点是能降低预测任务的偏差,弱学习器逐个建立,弱学习器之间存在强烈的依赖关系,由于每一个新的基学习器都是对上一个基学习器偏差的弥补,因此该方法能够降低整个预测任务的偏差,从而解决单一弱学习器预测偏差较高的问题,因此,Boosting也成为一种弥补或提升模型预测能力的强大工具;Boosting的弱学习器相加组成最终输出结果,因此是一个"加法模型",在求导时有很多优良性质同时由于下一轮迭代产生的分类器是在上一轮的基础上训练得来的,因此Boosting也是"前向分布算法";这两个特点也是Boosting方法的通用特性;代表算法有Adaboost/GBDT/XGBOOST等;

(四)三种集成方法对比

| | Stacking | Bagging | Boosting |
| 基学习器 | 强学习器 | 弱学习器 | 弱学习器 |
| 抽样方式 | K-Fold | 有放回抽样 | 有放回抽样 |
| 集成方式 | 模型嵌套 | 均值、众数/并行 | 加权求和/串行 |
| 优化方向 | 降低方差/偏差 | 降低方差 | 降低偏差 |

基学习器精确度要求

三 随机森林(Random Forest)

(一)基本思路

随机森林是典型的Bagging法;其弱学习器是决策树,顾名思义"森林"就是多颗树,这也是集成思想的重要体现;"随机"则体现在,随机森林会分别在"样本"和"特征"两个维度进行随机抽样;对于样本,每棵树会从样本全集中进行有放回的随机采样,作为当前树的训练集;对于特征,每次节点分裂时,都会从特征全集里做无放回的特征采样,再在采样集中通过某些分裂评价指标选择最优分裂特征;双重的随机性使得随机森林中的每个决策树都相互独立,可以使用并行化的生成方式,也不容易过拟合;其多个弱学习器的集成方式遵从Bagging的集成思路,对于分类任务,取弱学习器的众数作为最终输出结果,对于回归任务,取弱学习器的均值作为最终输出结果。

随机森林集成的效果,受到弱学习器个体的精确性与弱学习器之间的独立性两方面的影响;也就是当弱学习器独立而优秀时,随时森林的效果最好;

(二)结构示意图

(三)优势与劣势

优势:

1 能处理高纬特性并能给出特征重要性;

2 容易并行处理,速度快;

3 消除了决策树容易过拟合的缺点;

4 减小了预测的方差;

劣势:

1.对于较小数据集,随机森林很容易出现过拟合现象,导致性能下降;

四 自适应提升算法(Adaboost)

(一)基本思路

Adaboost是Boosting方法的奠基之作,其奠定了Boosting方法的"加法模型"和"前向分步算法"两大基调;作为集成学习算法,其基本出发点仍然是将多个弱学习器进行集成,得到更加强大的预测能力;与随机森林不同的是,提升法的多个弱学习器不是并行建立的,而是串联建立的,即要一个一个的建立,在一个的基础上,建立另一个。首先在全样本上建立一颗决策树,根据该决策树预测的结果和损失函数值,增加被预测错误的样本在数据集中的样本权重,并让加权后的数据集被用于训练下一颗决策树,使后续模型更专注于学习之前未能正确预测的样本,逐步优化预测性能最终输出结果为所有弱评估器的加权平均;但过度追求对预测错误样本的关注,却使其对异常样本过于敏感;与随机森林相同的是,当完成分类任务时,弱评估器是分类模型,当完成回归任务时,弱评估器是回归模型;在分类任务中,AdaBoost需要一种能够衡量分类错误程度的损失函数,因此使用指数损失函数替代0/1损失函数,使对分类错误较为敏感,同时优化目标是连续可微的,从而在迭代中生成能最小化错误率的基学习器。

(二)结构示意图

​​​​​​​

(三)优势与劣势

优势:

1. 高精度:Adaboost作为分类器时,分类精度很高。

2. 灵活性:在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器。

3. 易理解性:当Adaboost作为简单的二元分类器时,构造简单,结果可理解。

4. 特征自动选择:Adaboost分类器能够通过不断调整权重来识别数据中的重要特征。

劣势:

1.对异常敏感:异常样本在迭代中可能会获得较高的权重。

2. 复杂度高:计算复杂度比较高,在处理大数据集时可能需要较长的时间。

3. 受弱分类器选择影响:执行效果在很大程度依赖于所选择的弱分类器。

五 梯度提升树(GBDT)

(一)基本思路

GBDT梯度提升树遵循Boosting的基本流程,依据上一个弱评估器结果,计算损失函数,并依据损失函数自适应的影响下一个弱评估器,然后将所有弱分类器结果加权求和得到最终预测结果。

GBDT特点( 与Adaboost差异):

  1. 弱评估器:GBDT不管执行什么任务,弱评估器都是"回归器"(通常为CART树);其通过sigmoid和softmax函数输出具体的分类结果;而Adaboost执行回归任务时用"回归器";执行分类任务时用"分类器"。
  2. 损失函数: 由于GBDT的弱学习器始终是'回归器',因此在损失函数的选择上只要求损失函数可导;
  3. 拟合残差:不像Adaboost通过调整数据分布来间接影响后续弱评估器;其通过修改后续弱评估器的拟合目标来直接的影响后续弱评估器结构;因此,GBDT不修改样本权重,而是通过拟合残差来影响后续弱评估器。
  4. 抽样思想:GBDT加入了随机森林中的抽样思想,在每次建树之前,对样本和特征进行抽样;

(二)结构示意图

(三)优势与劣势

优势:

1.**准确率高:**每一轮迭代都尽可能地减少残差的损失,从而提升整体的预测准确率;

2.**鲁棒性强:**当使用Huber损失函数和Quantile损失函数,对异常值和缺失值具有较强的鲁棒性;

3.**可解释性:**基于决策树构建,因此模型具有较好的解释性;

4.缺失值处理:使用其他值对缺失值进行预估;

劣势:

1.复杂度高:多棵树串行复杂度高,且计算不能并行,每棵树的训练都需依赖于前一棵树的残差;

2.**调参复杂:**优化模型性能,需要对多个参数进行精细调整;

3.过拟合风险:在处理高维稀疏数据或复杂特征时,GBDT可能面临过拟合的问题;

六 极度梯度提升树(XGBoost):

(一)基本思路

XGBoost是一个基于GBDT梯度提升树改进的一个算法系统;因此XGBoost是与GBDT有很多相似之处,除了具有Boosting的两大基本特点'加法模型'和'前向分布算法',也同时具有GBDT的四个特点'弱学习器为回归器','损失函数要求可导','拟合残差','抽样思想';并在此基础上,对模型的精度/模型的泛化能力/学习效率三方面进行了优化,并取得了长足的进步;

XGBoost改进点(t 与GBDT的区别):

1.泛化能力改进:

1)正则化学习目标:

在GBDT中**,**目标是找到损失函数L的最小值,即预测值与真实值差值的最小值,也就是让预测结果与真实结果差异最小,这一流程只关心精确性,即经验风险,不关心复杂度,即结构风险,容易导致过拟合问题,为了在保证经验风险的同时,尽量降低结构风险,XGBoost在目标函数中除了包含损失函数L还加入了控制过拟合的结构风险项,则XGBoost的目标函数如下:

这里 L 是一个可微的凸损失函数,它测量预测 ˆyi 和目标 yi 之间的差异。第二项 Ω 惩罚模型的复杂性。其中T表示叶节点是数量,而w表示叶节点的权重(即叶节点的预测值),则是正则项的系数;可以看出正则化项由叶节点数量的一次项与叶权重值的二次项之和组成,该项值越大则模型越复杂,损失函数越大;将y正则化项有助于避免过度拟合。带有正则项的目标函数将倾向于选择结构更简单的模型。

2)树权重收缩技术:

除正则化目标外,XGBoost还使用了树权重收缩技术(shrinkage)防止过拟合,其主要思想是在树提升的每个步骤,按一定的系数缩放新添加的树的权重,收缩了每棵树的影响,并为未来的树留下改进空间;

3)特征子采用:

特征子采用(column subsampling)即是按比例对特征进行采样,以上三种技术共同提升模型的泛化能力;

2.模型精度改进:

1) 目标函数二阶泰勒展开近似

在GBDT中损失函数的近似方法,使用一阶泰勒展开来近似。在每次迭代中,它基于前一个模型的残差来训练新的模型,通过不断地拟合负梯度来最小化损失函数。XGBoost则采用二阶泰勒展开来近似损失函数。这种方法不仅利用了一阶梯度信息,还利用了二阶梯度信息来选择最优分割点。使XGBoost在每次迭代中能够更准确地逼近真实损失函数,从而提高了模型的预测精度和收敛速度。设是第 t 次迭代时第 i 个实例的预测值,我们需要在目标函数中添加,并最小化以下目标函数。

将目标函数进行二阶泰勒展开,得到如下目标函数的近似:

则对于第t次迭代时的第i个样本,目标函数通过二阶泰勒展开后,损失函数(即前一轮迭代的预测值)处的一阶泰勒展开项,表示为,其中gi 是损失函数L对的偏导数;损失函数处的二阶泰勒展开项,表示为,其中hi 是损失函数L对的二阶偏导数;

2) 稀疏感知拆分查找

在实际构建算法模型时,出现缺失值是很常见的,XGB允许模型在训练过程中直接处理缺失数据,减少了数据预处理的工作量;为了解决缺失的问题,XGB在寻找分裂点时,不会遍历缺失值的样本,而只针对非缺失值的样本进行遍历;同时,为了保证缺失值处理的有效性,XGB会分别处理将该缺失的样本分配到左叶子结点和右叶子结点的两种情形。再通过计算增益,选择增益较大的方向进行分裂。

3.学习效率改进:

1)加权分位数草图机制:

在XGBoost中,为了找到最优的分裂点,需要对数据进行排序并计算每个可能的分裂点的增益。但是在数据量很大时,这种贪婪算法会很耗时。而大多数已有的近似算法虽然可以大大节省学习时间,但没有理论保证和精度保证;加权分位数草图是一种加入权重的近似算法,XGB为每个样本计算一个权重,权重反映了样本对损失函数的影响程度。加权分位数草图通过考虑这些权重,将数据分箱,每个箱内的样本权重之和大小类似。加权分位数草图算法会首先确定一个候选分割点的数量,然后基于数据的分布和权重,选择这些候选分割点。

2)用于并行学习的列块

树学习最耗时的部分,是在特征寻找最优进行分裂前,对数据进行排序;为降低排序成本,XGB论文中提出建议,将数据存在内存单元中,成为block;每个块中的数据以压缩列格式存储,每列按相应特征值排序,这种输入布局只需要在训练前计算一次,并可以在后续迭代中重复使用;在此基础上能够构建拆分查找的并行算法;

3)缓存感知访问

虽然block结构有助于优化列间计算,但算法学习需要频繁访问基于行信息计算的梯度统计值;这也会导致特征分裂时,频繁地访问不连续的内存地址,缓存命中率降低,从而影响算法的执行速度;缓存感知访问策略在贪婪算法中,为每个线程中分配一个内存缓冲区,保存梯度数据,再以小批量形式进行累加,这样就把不连续的数据变成了连续数据,从而提高了缓存的命中率。对于近似算法,则通过选择合适的block大小来解决问题,将block大小定义为区域中包含的最大样本数,因为这反映了梯度统计的缓存存储成本。过小的block大小会导致每个线程的工作负载较小,并导致并行化效率低下。过大的block则会导致缓存未命中,因为梯度统计信息不适合 CPU 缓存;因此合适的block大小也会对学习的效率产生积极影响;

4)用于核外计算的模块

顾名思义,核外计算指在核心处理器之外进行的计算;在处理大规模数据集时,充分利用机器的内存,处理器和磁盘来保障学习的效率和性能;核外计算将数据划分为多个block,并将每个block存储在磁盘上,计算过程中使用独立线程将block预取到主内存缓冲区中,这样计算可以和磁盘读取同时进行;在磁盘读取上,核外计算同时用两种技术改进读取的开销:第一种是block压缩,将block按列压缩,并在加载到主内存时由独立线程动态解压缩,这有利于将解压缩中的一些计算与读取进行权衡;第二种是block分片,将数据分布到多个磁盘上,为每个磁盘分配一个预取线程,并将数据提取到内存缓冲区中,然后训练线程交替从每个缓冲区读取数据,有利于在磁盘资源丰富时提高读取的吞吐量;

(二)结构示意图

(三)优势与劣势

优势:

1.高学习效率:支持并行计算,能高效处理大规模数据集;

2.高精确度:引入二阶导数优化目标函数近似,显著提高了模型精确度;

3.泛化能力强:通过在目标函数引入正则化项,权衡结构风险与经验风险;

4.灵活性可扩展性强:支持自定义损失函数和评估指标,适应各自问题的解决;同时也支持多种接口和平台;

劣势:

**1.调参复杂:**XGB拥有众多参数,参数变化可能导致模型性能的大幅波动;

2 .**过拟合风险:**在处理小样本数据时,可能出现过拟合的问题;

七 总结

XGBoost在集成学习Boosting系列中占据非常重要的地位,它是目前应用最广泛的集成学习算法之一。以其高效性、准确性、正则化能力、灵活性以及广泛的应用领域和显著的影响力,成为了当前机器学习领域中最受欢迎的集成学习算法之一;

XGBoost是基于GBDT改进而来的集成学习算法,因此XGBoost具有GBDT的主要特点:拟合残差,使用CART回归树作为基学习器,抽样思想,以及损失函数仅要求可导;XGBoost也在GBDT的基础上进行了很多优化,包括损失函数,正则化,并行处理等,使其性能远超GBDT;

同时,XGBoost与GBDT又同属于Boosting集成学习,均是在Boosting框架下的改进算法,因此也具有Boosting集成学习的两大特征:"前向分布算法"与"加法模型";

八 基础概念

1.前向分布算法:前向分布算法是大多Boosting算法的一个基础,其基本思想是:从前向后,每一步只学习一个基函数,逐步逼近优化目标函数,用于求解加法模型优化问题的算法;

2.加法模型:加法模型是一种通过组合多个基函数及其对应的系数来构建复杂预测模型的机器学习方法,其输出是这些基函数输出的加权和。

3.经验风险与结构风险:经验风险是指模型在训练数据集上的损失或误差,反映了模型对训练数据的拟合程度;而结构风险则是在经验风险的基础上,加上了对模型复杂度的惩罚项,旨在防止模型过拟合,提高模型的泛化能力。

4.泰勒公式展开 :函数f(x)在处展开的带有拉格朗日余项的n次泰勒展开公式如下:

其中为拉格朗日余项;

一阶泰勒展开为:

二阶泰勒展开为:

5.正则化:正则化是一种在机器学习模型训练过程中,通过引入额外的约束或惩罚项来限制模型复杂度,从而防止模型过拟合,提高模型泛化能力的方法。

九 参考文献

《XGBoost: A Scalable Tree Boosting System》Tianqi Chen,Carlos Guestrin

XGBoost的原理、公式推导、Python实现和应用 - 知乎

相关推荐
Thanks_ks7 分钟前
深入探索现代 IT 技术:从云计算到人工智能的全面解析
大数据·人工智能·物联网·云计算·区块链·数字化转型·it 技术
东方佑1 小时前
给图像去除水印攻
人工智能·python
知来者逆1 小时前
Layer-Condensed KV——利用跨层注意(CLA)减少 KV 缓存中的内存保持 Transformer 1B 和 3B 参数模型的准确性
人工智能·深度学习·机器学习·transformer
tangjunjun-owen1 小时前
异常安全重启运行机制:健壮的Ai模型训练自动化
人工智能·python·安全·异常重运行或重启
爱研究的小牛1 小时前
Rerender A Video 技术浅析(二):视频增强
人工智能·深度学习·aigc
Bdawn2 小时前
【通义实验室】开源【文本生成图片】大模型
人工智能·python·llm
黑马王子132 小时前
谷歌史上最强大模型-Gemini2.0震撼发布!以后世界都属于智能体?
人工智能·google
电报号dapp1192 小时前
当前热门 DApp 模式解析:六大方向的趋势与创新
人工智能·去中心化·区块链·智能合约
宸码2 小时前
【机器学习】手写数字识别的最优解:CNN+Softmax、Sigmoid与SVM的对比实战
人工智能·python·神经网络·算法·机器学习·支持向量机·cnn
睡觉狂魔er2 小时前
自动驾驶控制与规划——Project 1: 车辆纵向控制
人工智能·机器学习·自动驾驶