判别模型和生成模型:
Discriminative Model:线性回归模型、线性判别分析、支持向量机SVM、神经网络、boosting、条件随机场等。先验概率
Generative Model: 隐马尔可夫模型HMM、朴素贝叶斯模型、高斯混合模型GMM、LDA、高斯、混合多项式、专家的混合物、马尔可夫的随机场。后验推先验
集成思想
分为两大流派:
Boosting: 通过将弱学习器提升为强学习器的集成方法来提高预测精度。 如,AdaBoost, GBDT
Bagging: 通过自助采样的方法生成众多并行式的分类器,采用少数服从多数的原则来确定最终的结果。如,随机森林。
CART(Classification and Regression Tree)
Boosting (提升)
样本加权
将分错样本的分类器权值升高
boosting每一步产生一个弱预测模型(如决策树),并加权累加到总模型中;如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升(Gradient boosting)。
首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合;如有T1,T2,…Tm棵决策树 ,则损失函数为L(T)
提升算法通过迭代,选择一个负梯度方向上的基函数来逐渐逼近局部极小值。
梯度提升决策树GBDT
GBDT是回归树,不是分类树,因为它是要算具体的值的。
核心在于累加所有树的结果作为最终结果
关键点是利用损失函数的负梯度去模拟(替代)残差,这样对于一般的损失函数,只要其一阶可导就行。
如图左,先导入数据,对于每个节点,分别用数据去求一个平均值。然后得到的残差作为第二次迭代的数据导入,如图右。
随机森林是有放回的抽取原始数据集去构建决策树,GBDT是用残差去构建决策树。
XGBoost
GBDT是机器学习算法,XGBoost是该算法的工程实现。
在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模 型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代 价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类 器,比如线性分类器。
传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机 森林相似的策略,支持对数据进行采样。
传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺 失值的处理策略
读取数据
xgb.DMatrix()
设置参数
param={}
训练模型
bst=xgb.train(param)
预测结果
bst.predict()
XGBoost本身的核心是基于梯度提升树实现的集成算法,整体可以说有三个部分:集成算法本身,用于集成的弱评估器(如一棵决策树),以及应用中的其它过程(如多少线程,是否告诉模型y的先验概率等)
param:
n_estimators:数值越大,代表模型中的树越多,模型的学习能力越强,越容易过拟合,剪枝越痛快。但如果数值太大,模型计算会非常缓慢。
树模型的优势之一:能够查看模型的重要性分数(feature_importances),例如每棵树的重要性,可以使用嵌入法(SelectFromModel) 进行特征选择。
xgboost会自动进行特征选择,当特征较多的时候,可以使用嵌入法来进行特征选择,