❶ 人工智能比较感兴趣,哪里能深度学习提升呢
人工智能现在确实比较热门,而想要深度学习人工智能也是一些已经工作的朋友的首选,其实,深度学习人工智能最好的方法就是到一些机构了,因为他们的资料更全面,还比较注重实践,毕竟你学会了一些理论知识,并不能让你在工作中遇到的问题迎刃而解,而只有理论结合实践才可以让你应付工作中遇到的各种问题,所以,机构还是比较好的。当然还有另外一种情况,就是你的能力比较强,那如果是这种情况,你可以自学的,现在有很多的课程都是针对自学的,你可以先试试自学,如果学不好,再去机构学也是一样的,毕竟去机构学习都是收费的。
而人工智能编程随着使用范围的增加,还有一些核心技术你需要了解。就拿决策树系列算法来说,共有以下几点:
决策树算法
决策树的算法原理与数学表达、分裂指标Gini系数、信息增益、信息增益率 、前剪枝与后剪枝、决策树ID3、C4.5和CART、决策树算法优略比较、决策树之鸢尾花数据集分类案例、通过graphvis绘制决策树模型
随机森林算法
集成学习算法思想Bagging、Boosting、Stacking 、用户画像集成学习方法案例、 OOB数据集验证随机森林算法、随机森林副产品之特征选择
Adaboost算法
Adaboost算法原理、数据的权重与权重错误率、权重错误率调整到0.5训练下一个弱分类器、计算每个样本的权重Un、 应用Adaboost算法做人脸识别
GBDT算法
函数空间的梯度下降与负梯度、推导GBDT回归是拟合残差、Shrinkage衰减系数的作用、推导GBDT分类亦是拟合残差、GBDT二分类模型训练和使用、GBDT多分类模型训练和使用、GBDT副产品之特征组合用于降维、 实现GBDT+LR架构代码实战
XGBoost算法
XGBoost算法与决策树集成学习关系、XGBoost目标函数与正则项、 XGBoost目标函数用二阶泰勒展开、推导简化XGBoost目标函数引入g h、 XGBoost目标函数加入树的复杂度、推导出XGBoost目标函数最终形式和叶子节点表达式、 详解XGBoost算法参数与交叉验证、XGBoost算法调用GPU显卡资源加速
这只是人工智能编程的一个阶段的内容,其他阶段也都有一些核心,这些都能让你在工作中更轻松自如。
❷ gbdt算法是什么
如下图:
在建立GBDT对象并作fit之后,可以使用如下代码获得要的规则代码:
dot_data = tree。export_graphviz(model_tree, out_file=None,
max_depth=5, feature_names=names_list, filled=True, rounded=True) # 将决策树规则生成dot对象。
模型最终可以描述为:
Fm(x)=∑m=1MT(x;θm)Fm(x)=∑m=1MT(x;θm)
模型一共训练M轮,每轮产生一个弱分类器T(x;θm)T(x;θm)。弱分类器的损失函数
θ^m=argminθm∑i=1NL(yi,Fm−1(xi)+T(xi;θm))θ^m=argminθm∑i=1NL(yi,Fm−1(xi)+T(xi;θm))
Fm−1(x)Fm−1(x)为当前的模型,gbdt通过经验风险极小化来确定下一个弱分类器的参数。具体到损失函数本身的选择也就是L的选择,有平方损失函数,0-1损失函数,对数损失函数等等。如果我们选择平方损失函数,那么这个差值其实就是我们平常所说的残差。
❸ GBDT预测时每一棵树是否能并行
传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)
列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。
xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
❹ 机器学习算法中GBDT和XGBOOST的区别有哪些
尝试回答一下
首先xgboost是Gradient Boosting的一种高效系统实现,并不是一种单一算法。xgboost里面的基学习器除了用tree(gbtree),也可用线性分类器(gblinear)。而GBDT则特指梯度提升决策树算法。
xgboost相对于普通gbm的实现,可能具有以下的一些优势:
显式地将树模型的复杂度作为正则项加在优化目标
公式推导里用到了二阶导数信息,而普通的GBDT只用到一阶
允许使用column(feature) sampling来防止过拟合,借鉴了Random Forest的思想,sklearn里的gbm好像也有类似实现。
4.实现了一种分裂节点寻找的近似算法,用于加速和减小内存消耗。
5.节点分裂算法能自动利用特征的稀疏性。
6.data事先排好序并以block的形式存储,利于并行计算
7.cache-aware, out-of-core computation,这个我不太懂。。
8.支持分布式计算可以运行在MPI,YARN上,得益于底层支持容错的分布式通信框架rabit。
❺ xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度
考虑这个简化的操作:试想把树的深度设为2,那么gbdt里面的基学习器都是二分类决策树,然后自己在二维坐标系上画很多点,然后不停的用boosting的方法用二分类决策树去进行分类,不同的是,我们简化权重的计算方式,初始化权重都为1,每次分错权重不变,分对则权重将为原来的一半,最终能用深度为2的树成功对很多不规则的点进行分类。
然而用深度为2的树,用类似RF的bagging方法也能成功对不规则的点分类。
所以到这里,我们实际操作了,用深度低的树通过ensemble对于不规则的点的分类这种“黑科技”。
那么为什么gbdt在树的深度很小的时候能很快达到很高的预测或分类精度呢?或者说,它比RF明显。
我的理解是,因为gbdt更多的是一种优化算法。具体怎么优化的,期待牛人用公式解答。
❻ 机器学习算法中GBDT和XGBOOST的区别有哪些
GBDT是一种算法,XGBOOST是GBDT的一种实现。
除了XGBOOST,还有LightGBM,也支持GBDT算法,具体可参见:https://github.com/Microsoft/LightGBM
❼ 从原理上来说,GBDT 和 SVM 哪个更强为什么
GBDT 全称为 Gradient Boosting Decision Tree。是一种基于决策树(decision tree)实现的分类回归算法。GBDT 有两部分组成: gradient boosting, decision tree。
支持向量机(support vector machine)是一种分类算法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。
这两个算法关键看应用场景,主要是特征数量、训练过程和可解释性有区别。SVM 能够训练大量特征,不用考虑特征离散化或者分段,非线性映射可以很好的分类。GBDT在特征较少的时候,能够高效bootstrap 抽取样本和特征,训练多颗树,能够自动做特征重要性排序,通过gini系数等指标判断分割点,能够表达非常复杂的规则。
❽ GBDT 如何实现特征组合提取
以Python调用sklearn为例,在你建立GBDT对象并作fit之后,可以使用如下代码获得你要的规则代码:
dot_data = tree.export_graphviz(model_tree, out_file=None,
max_depth=5, feature_names=names_list, filled=True, rounded=True) # 将决策树规则生成dot对象
其中tree就是你的数对象,如果你的out_file后面是一个文件名,那么你的规则会输出到文件中;如果是None(就像上面代码),那么值会保存在dot_data中。
无论哪种方法,你都能获得规则文本。然后剩下的就是普通的文本解析的事情了。
在决策树算法对象的tree_属性中,存储了所有有关决策树规则的信息(示例中的决策树规则存储在model_tree.tree_中)。最主要的几个属性:
children_left:子级左侧分类节点
children_right:子级右侧分类节点
feature:子节点上用来做分裂的特征
threshold:子节点上对应特征的分裂阀值
values:子节点中包含正例和负例的样本数量
上述属性配合节点ID、节点层级便迭代能得到如下的规则信息:
1 [label="rfm_score <= 7.8375
gini = 0.1135
samples =
14581
value = [13700, 881]", fillcolor="#e58139ef"] ;
其中规则开始的1代表节点ID,rfm_score是变量名称,rfm_score
<= 7.8375是分裂阀值,gini = 0.1135是在当前规则下的基尼指数,nsamples是当前节点下的总样本量,nvalue为正例和负例的样本数量。
来源:知乎
❾ 机器学习中GBDT和XGBoosts的区别是
首先来了解一下boosting思想,每次训练单个弱分类器时,都将上一次分错的数据权重提高一点再进行当前单个弱分类器的学习,这样往后执行,训练出来的单个弱分类器就会越在意那些容易分错的点,最终通过加权求和的方式组合成一个最终的学习器,gradent boosting 是boosting的一种,每一次构建单个学习器时,是在之前建立的模型的损失函数的梯度下降方向, GB与Adaboost的区别在于:
AdaBoost是通过提升错分数据点的权重来定位模型的不足。
Gradient Boosting是通过算梯度(gradient)来定位模型的不足。
主要思想是,每一次建立单个学习器时,是在之前建立的模型的损失函数的梯度下降方向,损失函数越大,说明模型越容易出错,如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度方向上下降。
GBDT=GB+DT(decision tree),即基分类器为决策树时,这里的决策树是回归树。
Xgboost 是GB算法的高效实现,其中基分类器除了可以使CART也可以是线性分类器。
几大区别:
传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯帝回归或者线性回归
传统GBDT在优化时只用到了一阶导数,而xgboost对代价函数进行了二阶泰勒展开,用到了一阶和二阶导数
xgboost加入了正则项,防止过拟合
shrinkage,相当于学习率,在每完成一次迭代后,会乘上这个系数,削减每棵树的影响
列抽样,借鉴随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算。