Boosting
是一种框架算法,主要是通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器。他可以用来提高其他弱分类算法的识别率,也就是将其他的弱分类算法作为基分类算法放于Boosting 框架中,通过Boosting框架对训练样本集的操作,得到不同的训练样本子集,用该样本子集去训练生成基分类器;每得到一个样本集就用该基分类算法在该样本集上产生一个基分类器,这样在给定训练轮数 n 后,就可产生 n 个基分类器,然后Boosting框架算法将这 n个基分类器进行加权融合,产生一个最后的结果分类器,在这 n个基分类器中,每个单个的分类器的识别率不一定很高,但他们联合后的结果有很高的识别率,这样便提高了该弱分类算法的
XGBoost
GBDT是一种基于集成思想下的Boosting学习器,并采用梯度提升的方法进行每一轮的迭代最终组建出强学习器,这样的话算法的运行往往要生成一定数量的树才能达到令我们满意的准确率。当数据集大且较为复杂时,运行一次极有可能需要几千次的迭代运算,这将对我们使用算法造成巨大的计算瓶颈。
虽然GBDT无论在理论推导还是在应用场景实践都是相当完美的,但有一个问题:第n颗树训练时,需要用到第n-1颗树的(近似)残差。从这个角度来看,GBDT比较难以实现分布式,XGBoost正是解决了这个难题。XGBoost是GBDT的高效实现,XGBoost中的基学习器除了可以是CART(GBTree)也可以是线性分类器(GBLinear)。
XGBoost最大的特点在于它能够自动利用CPU的多线程进行并行计算,同时在算法上加以改进提高了精度。在Kaggle的希格斯子信号识别竞赛中,XGBoost因为出众的效率与较高的预测准确度在比赛论坛中引起了参赛选手的广泛关注,在1700多支队伍的激烈竞争中占有一席之地。随着它在Kaggle社区知名度的提高,在其他的比赛中也有队伍借助XGBoost夺得第一。
Catboost案例
- 数据的认识:
初看训练集发现有些数据存在空值,对于这样的数据我们认为可能不影响训练的结果,对于这样的特征可进行忽略或写0,使用data.info()查看数据中有字符型数据和浮点型数据还有汉字,catboost可以完美预处理类似数据。
- 使用机器学习库:catboost,优点:
(1)它自动采用特殊的方式处理类别型特征。
(2)使用了组合类别特征,可以利用到特征之间的联系,这极大的丰富了特征维度。
(3)基模型采用的是对称树,能防止模型过拟合。
三.数据预处理:
(1)使用pandas模块导入训练集train.csv。
(2)将训练集中为空值的变为0,将训练集中的标签“label”设定为每个数据对应的标签。
(3)使用 train_test_split模块对训练集进行分割,设置训练集和预测集比值为7:3。
(4)categorical_features_indices是为了识别categorical variables的。我们无需对分类变量进行任何处理。这也是Catboost的优点之一:自动处理categorical variables。
四.训练模型:
设定一个随机种子,使用CatBoostClassifier进行学习。
使用matplotlib模块可视化特征重要程度结构,查看各类特征所占权重。
通过调整参数获得更好的效果
XGBoost中包括但不限于下列对模型影响较大的参数:
- learning_rate: 有时也叫作eta,系统默认值为0.3。每一步迭代的步长,很重要。太大了运行准确率不高,太小了运行速度慢。
- subsample:系统默认为1。这个参数控制对于每棵树,随机采样的比例。减小这个参数的值,算法会更加保守,避免过拟合, 取值范围零到一。
- colsample_bytree:系统默认值为1。我们一般设置成0.8左右。用来控制每棵随机采样的列数的占比(每一列是一个特征)。
- max_depth: 系统默认值为6,我们常用3-10之间的数字。这个值为树的最大深度。这个值是用来控制过拟合的。max_depth越大,模型学习的更加具体。
catboost相同用法