决策树
算法:ID3,C4.5,CART
优点:
1、易于理解和解释,可以可视化分析,容易提取出规则
2、可以同时处理标称型和数值型数据
3、测试数据集时,运行速度比较快
4、决策树可以很好的扩展到大型数据库中,同时其大小独立于数据库大小
缺点:
1、处理缺失数据,连续变量比较困难
2、易出现过拟合问题
3、忽略数据集中属性的相互关联
4、不能处理大量数据
改进:
1、对决策树进行剪枝。可以使用交叉验证法和加入正则化的方法
2、使用基于决策树的集成算法,如bagging或RF,可以解决过拟合问题
应用:
企业管理实践、企业投资决策,由于决策树有很好的分析能力,在决策过程应用较多。
KNN算法
优点:
1、在线技术,新数据可以直接加入数据集而不必进行重新训练
2、理论简单,容易实现
缺点:
1、对于样本容量大的数据集计算量大
2、样本不平衡时,预测偏差比较大
3、KNN每一次分类都会进行一次全局运算
4、K值大小的选择
应用:
文本分类、模式识别、聚类分析、多分类领域
支持向量机SVM
优点:
1、解决小样本下的机器学习问题
2、解决非线性问题
3、无局部最小值问题(相较于神经网络等算法)
4、可以很好的处理高维数据集
5、泛化能力强
缺点:
1、对核函数的高维映射解释力不强,尤其是径向基函数
2、对缺失数据敏感
应用:
文本分类、图像识别、主要二分类领域
AdaBoost算法
优点:
1、很好的利用了弱分类器进行级联
2、可以将不同的分类算法作为弱分类器
3、AdaBoost具有很高的精度
4、相对于bagging和RF算法,AdaBoost充分考虑到每个分类器的权重
缺点:
1、AdaBoost迭代次数也就是弱分类器的数目不太好设定,可以使用交叉验证来进行确定。
2、数据不平衡导致分类精度下降
3、训练比较耗时,每次重新选择当前分类器最好切分点
应用:
模式识别、计算机视觉领域、用于二分类和多分类场景
逻辑回归
优点:
1、计算代价不高,易于理解和实现
缺点:
1、容易产生欠拟合
2、分类精度不高
应用:
用于二分类领域,可以得出概率值,适用于根据分类概率排名的领域,如搜索排名等
其扩展softmax可以应用于多分类领域,如手写字识别等
信用评估、测量市场营销的成功度、预测某个产品的收益、特定的某天是否会发生地震
朴素贝叶斯算法
优点:
1、对大量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是的特征概率的数学运算而已
2、支持增量式运算。即可以实时的对新增的样本进行训练
3、朴素贝叶斯对结果解释容易理解
缺点:
1、由于使用了样本属性独立性的假设,所以若样本属性有关联时其效果不好
应用:
欺诈检测、垃圾邮件判断、文章分类、人脸识别
对比LR与朴素贝叶斯
相同点:
1、两者都是对特征的线性表达
2、两者建模的都是条件概率,对最终求得的分类结果有很好的解释性
不同点:
1、朴素贝叶斯是一个生成模型,在计算P(Y|X)前,先要计算P(X|Y)和P(Y);逻辑回归是一个判别模型,它通过在训练数据集上最大化判别函数P(Y|X)学习得到,不需前趋计算
2、朴素贝叶斯是建立在条件独立假设基础上的;逻辑回归的限制要更为宽松,能条件独立更好,不满足时,仍能通过调参让模型最大化的符合数据的分布
3、数据集小时,应选朴素贝叶斯,O(log n);数据集大时,应选用逻辑回归,O(n)
神经网络
优点:
1、分类准确度高,学习能力极强
2、对噪声的鲁棒性和容错性较强
3、有联想能力,能逼近任意非线性关系
缺点:
1、参数较多、权值和阈值
2、黑盒过程,不能观察中间结果
3、学习过程比较长,有可能陷入局部最小值
应用:
计算机视觉、自然语言处理、语音识别等
K_MEANS
优点:
1、原理简单,实现容易,收敛速度快
2、球形边界效果较好
缺点:
1、k取值不好把握
2、非球形边界效果较差
3、对噪音和异常点叫敏感
应用:
被大多数搜索引擎用于通过相似性对网页进行聚类,并识别搜索结果的相关率,有助于搜索引擎减少用户的计算时间
用户画像、数据集内部探索、数据离散压缩、处理数据不平衡问题
GBDT
基于迭代累加的决策树算法,其中树为回归树,不是分类树
优点:
1、精度高
2、能处理非线性数据
3、能处理多特征类型
4、适合低维稠密数据
5、模型可解释性好
6、不需要做特征的归一化,可以自动选择特征
7、能适应多种损失函数,包括均方误差和LogLoss等
缺点:
1、boosting是个串行的过程,所以并行麻烦,需要考虑上下树之间的联系
2、计算复杂度大
3、不使用高维稀疏特征
调参:
1、树的个数 100~10000
2、叶子的深度 3~8
3、学习速率 0.01~1
4、叶子上最大节点树 20
5、训练采样比例 0.5~1
6、训练特征采样比例
应用:
CTR预估、预测分析、用户体验、个人征信
随机森林
优点:
1、在数据集上表现良好,在当前的很多数据集上,相对其他算法有着很大的优势
2、它能够处理很高维度(特征很多)的数据,并且不用做特征选择
3、可以评估特征的重要性
4、在创建随机森林的时候,对 generlization error 使用的是无偏估计
5、训练速度快,容易做成并行化方法
6、在训练过程中,能够检测到特征间的互相影响
7、实现比较简单
8、对于不平衡的数据集来说,它可以平衡误差
9、可以应用在特征缺失的数据集上,并仍然有不错的性能
缺点:
1、随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟
2、对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
随机森林(Random Forest,RF) 与 GBDT 对比
1、RF 中树的棵树是并行生成的;GBDT 中树是顺序生成的;两者中过多的树都会过拟合,但是GBDT 更容易过拟合
2、RF 中每棵树分裂的特征比较随机;GBDT 中前面的树优先分裂对大部分样本区分的特征,后面的树分裂对小部分样本区分特征
3、RF 中主要参数是树的棵数;GBDT 中主要参数是树的深度,一般为1
XGBoost
优点:
1、显示的把树模型复杂度作为正则项加到优化目标中。
2、公式推导中用到了二阶导数,用了二阶泰勒展开。
3、实现了分裂点寻找近似算法。
4、利用了特征的稀疏性。
5、数据事先排序并且以 block 形式存储,有利于并行计算。
6、基于分布式通信框架 rabit,可以运行在 MPI 和 yarn 上。(最新已经不基于 rabit 了)
7、实现做了面向体系结构的优化,针对 cache 和内存做了性能优化。
8、在项目实测中使用发现,Xgboost 的训练速度要远远快于传统的 GBDT 实现,10 倍量级
LightGBM与XGBoost的不同
1、切分算法(切分点的选取)
2、占用的内存更低,只保存特征离散化后的值,而这个值一般用8位整型存储就足够了,内存消耗可以降低为原来的1/8
3、LightGBM直接支持类别特征
4、决策树生长策略不同
XGBoost采用的是带深度限制的level-wise生长策略。level-wise过一次数据可以能够同时分裂同一层的叶子,容易进行多线程优化,不容易过拟合;但不加区分的对待同一层叶子,带来了很多没必要的开销(实际上很多叶子的分裂增益较低,没必要进行搜索和分裂)
LightGBM采用leaf-wise生长策略,每次从当前所有叶子中找到分裂增益最大(数据量最大)的一个叶子,进行分裂,如此循环;但会生长出比较深的决策树,产生过拟合(因此LightGBM在leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合)
GBDT与XGBoost的不同
首先介绍一下boosting思想,每次训练单个弱分类器时,都将上一次分错的数据权重提高一点再进行当前单个弱分类器的学习,这样往后执行,训练出来的单个弱分类器就会越在意那些容易分错的点,最终通过加权求和的方式组合成一个最终的学习器
gradent boosting 是boosting的一种,每一次构建单个学习器时,是在之前建立的模型的损失函数的梯度下降方向, GB与Adaboost的区别在于:
AdaBoost是通过提升错分数据点的权重来定位模型的不足
Gradient Boosting是通过算梯度(gradient)来定位模型的不足
主要思想是,每一次建立单个学习器时,是在之前建立的模型的损失函数的梯度下降方向,损失函数越大,说明模型越容易出错,如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度方向上下降
GBDT=GB+DT(decision tree),即基分类器为决策树时,这里的决策树是回归树
Xgboost 是GB算法的高效实现,其中基分类器除了可以使CART也可以是线性分类器
几大区别:
1、传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯帝回归或者线性回归
2、传统GBDT在优化时只用到了一阶导数,而xgboost对代价函数进行了二阶泰勒展开,用到了一阶和二阶导数
3、xgboost加入了正则项,防止过拟合
4、shrinkage,相当于学习率,在每完成一次迭代后,会乘上这个系数,削减每棵树的影响
5、列抽样,借鉴随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算