目录
分类树
仅仅分类
信息熵
信息熵是用来衡量信息不确定性的指标,不确定性是一个事件
出现不同结果的可能性。计算方法如下所示:
条件熵:y是条件 计算x的不确定性
实例:
基尼指数
定义:
基尼指数(Gii不纯度)表示在样本集合中一个随机选中的样本被分错的概率。
注意:Gii指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。当集合中所有样本为一个类时,基尼指数为0
基尼指数的计算方法:
确定最佳分割点,基尼指数越小越好
回归树
与分类树区别:
包括打分,比如判断苹果的成色
回归树(regression tree),就是用树模型做回归问题,每片叶子都输出一个预测值。预测值一般是叶子节点所含训练集元素输出的均值。
回归树的分支标准:
标准方差(Standard Deviation)。回归树使用某一特征将原集合分为多个子集,用标准方差衡量子集中的元素是否相近,越小表示越相近。首先计算根节点的标准方差:
变化系数=标志方差/平均方差
当变化系数小于10%,停止分支,生成叶节点
集成学习
Bagging:基学习器之间无强依赖关系,可同时生成的并行化方法
Boosting:基学习器之间存在强烈的依赖关系,必须串行生成基分类器的方法
加法模型
加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如
其中,h(x;am)是弱分类器,am是弱分类器学习到的最优参数,Pm是弱学习在强分类器中所占比重,P是所有am和βm的组合。这些弱分类器线性相加组成强分类器。
前向分步算法
前向分步是在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。即:
2.1.bagging:
随机森林
定义:
同时训练多个决策树,预测时综合考虑多个结果进行预测,例如取多个节点的均值(回归),或者是众数(分类)。
优势:
1.消除了决策树容易过拟合的缺点
2.减小了预测的方差,预测值不会因训练数据的小变化而剧烈变
随机性体现在两点:
1.从原来的训练数据集随机(带放回bootstrap)取一个子集作为森林中某一个决策树的训练数据集
2.每一次选择分叉的特征时,限定为在随机选择的特征的子集中寻找一个特征
ROC曲线和AUC曲线和RC曲线(精确率召回率曲线)
TPR=TP/(TP+FN) 也叫召回率
所有真实类别为1的样本中,预测类别为1的比例
FPR=FP/(FP+TN)
所有真实类别为0的样本中,预测类别为1的比例
ROC曲线和AUC曲线
AUC指标(在上面图中就是黑色线以下的面积)
AUC的概率意义是随机取一对正负样本,正样本得分大于负样本的概率,AUC的最小值为0.5,最大值为1,取值越高越好
AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。0.5<AUC<1,优于随机猜测。
这个分类器(模型)妥善设定阈值的话,能有预测价值。最终AUC的范围在[0.5,1]之间,并且越接近1越好
PR曲线
名词解释
一条PR曲线要对应一个阈值(统计学的概率)。通过选择合适的阈值(比如K%)对样本进行合理的划分,概率大于K%的样本为正例,小于K%的样本为负例,样本分类完成后计算相应的精准率和召回率,最后我们会得到对应关系,如下图所示。
PR和ROC曲线对比
https://zhuanlan.zhihu.com/p/34655990
1.ROC曲线由于兼顾正例与负例,所以适用于评估分类器的整体性能,相比而言PR曲线完全聚焦于正例。
2.如果有多份数据且存在不同的类别分布,比如信用卡欺诈问题中每个月正例和负例的比例可能都不相同,这时候如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则ROC曲线比较适合,因为类别分布改变可能使得PR曲线发生变化时好时坏,这种时候难以进行模型比较:反之,如果想测试不同类别分布下对分类器的性能的影响,则PR曲线比较适合。
3.如果想要评估在相同的类别分布下正例的预测情况,则宜选PR曲线。
4.类别不平衡问题中,ROC曲线通常会给出一个乐观的效果估计,所以大部分时候还是PR曲线更好。
5.最后可以根据具体的应用,在曲线上找到最优的点,得到相对应的precision,recall,f1 score等指标,去调整模型的阈值,从而得到一个符合具体应用的模型。
2.2.boosting:
adaboost
·Adaboost的思想是将关注点放在被错误分类的样本上,减小上一轮被正确分类的样本权值,提高被错误分类的样本权值
·Adaboost采用加权投票的方法,分类误差小的弱分类器的权重大,而分类误差大的弱分类器的权重小。
Adaboost可以看作是加法模型、损失函数为指数损失函数、学习算法为前向分布算法时的二分类学习方法。接下来我们使用sklearn中AdaBoost的接口进行实践:
https://github.com/BackyardofAbela/EnsembleLearning
GBDT
BDT(提升树)
提升树为什么分类用指数损失,而回归用平方误差损失?
表格:
GBDT(梯度提升树)
因为残差是负梯度的公式,所以可以用负梯度来表示
分类问题
XGBoost
XGBoost是GBDT的一种,也是加法模型和前向优化算法。
在监督学习中,可以分为:模型,参数,目标函数和学习方法
模型:给定输入x后预测输出y的方法,比如说回归,分类,排序等。
参数:模型中的参数,比如线性回归中的权重和偏置
目标函数:即损失函数,包含正则化项
定义目标函数,包含正则项:
如何优化这个目标函数呢?因为是决策树,而不是数值型的向量,我们不能使用梯度下降的算法进行优化!
又因为XGBoost是前向分布算法,我们通过贪心算法寻找局部最优解:
复杂度
树的复杂度可以用如树的深度,内部节点个数,叶节点个数等来衡量。
XGBoost中正则项用来衡量树的复杂度:树的叶子节点个数T和每棵树的叶子节点输出分数W的平方和(相当于L2正则化):
XGBoost的目标函数改写为:
学习方法:给定目标函数后求解模型和参数的方法,比如:
梯度下降法,数学推导等
采用贪心算法,每次尝试分裂一个叶节点
计算分裂后的增益选择增益最大的。类似于在ID3中的信息增益,和CART树中的基尼指数,那XGBoost中怎么计算增益呢?损失函数是:
其中红色部分衡量了叶子节点对总体损失的贡献,目标函数越小越好,则红色部分就越大越好
在XGBoost中增益计算方法是:
Gain值越大,说明分裂后能使目标函数减小的越多,也就是越好
实现:https://www.bilibili.com/video/BV1Ca4y1t7DS?p=13&spm_id_from=pageDriver