决策树

作者: L李卓 | 来源:发表于2020-09-11 21:57 被阅读0次

    有监督学习算法,同时可用于分类问题和回归问题。

    贪心算法:从包含全部训练数据的根开始,每一步都选择最佳划分。依赖于所选择的属性是数值属性还是离散属性,每次将数据划分为两个或n个子集,然后使用对应的子集递归地进行划分,直到所有训练数据子集被基本正确分类,或没有合适的特征为止

    · 先解决存在:数据间有关系,有模型)

    · 再解决唯一:最优模型,泛化能力(期望)最高的

    经验:对历史数据的学习能力判断(训练集预测精度),影响期望

    希望决策树以最快的方法到达叶子节点,就需要有个特征选择的度量方式——信息熵

    特征选择

    选择标准:信息熵减小最快的方向(包含信息较少的特征)

    1. 信息熵:是表示随机变量不确定性的度量

    信息量:就是指数据的混杂程度

    两个事件概率应该相乘,但是累乘计算难度高,取对数可以把累乘变成累加;去负号是因为log对0-1之间的数是负数,所以加个负号变成正数为了计算方便。信息熵的取值范围是[0,1]的

    2. 基尼指数

    3. 误分类误差

    决策树的生成

    1. ID3算法:多叉树。只能处理分类型变量,连续型变量处理要分箱。用信息增益来度量的决策树算法

    对某结点(数据集)进行切分的时候,尽可能选取使得该结点对应的子节点信息熵最小的特征进行切分。就是要求父节点信息熵和子节点总信息熵之差(信息增益)要最大

    算法迭代的结束条件:满足之一会停下来

    →当特征用完了,并且特征不能够重复使用

    →样本用完了

    →每个叶子节点都达到了最纯的状态

    局限性:

    ID3算法局限主要源于局部最优化条件,即信息增益的计算方法,其局限性主要有以下几点:

    (1)分支度越高(分类水平越多)的离散变量量往往⼦子结点的总信息熵更更小,ID3是按照某一列进行切分,有一些列的分类可能不会对结果有足够好的指示。极端情况下取ID作为切分字段,每个分类的纯度都是100%,因此这样的分类方式是没有效益的。

    (2)不能直接处理连续型变量,若要使用ID3处理连续型变量,则首先需要对连续变量进行离散化。

    (3)对缺失值较为敏感,使用ID3之前需要提前对缺失值进行行处理。

    (4)没有剪枝的设置,容易导致过拟合,即在训练集上表现很好,测试集上表现很差

    2. C4.5算法(针对ID3缺点的提升):基于信息增益比选择特征进行分发,多叉树,可能处理连续型变量

    计算过程:先排序,再选中位数,基于中位数划分,得到当前节点的信息熵,再和父节点做信息增益比的对比

    由于连续型变量会基于某个阈值被划分为二分类,所以连续型变量是可以重复使用的特征,但是分类型特征仍然不能被重复使用

    C4.5对ID3的缺点进行了怎样的改变?

    3. CART分类回归树(目前最常用):二叉树递归划分,左子树为真,右子树为假

    有监督的最优分箱法,x类型既可以是连续型变量也可以是分类型变量,一般不做分箱,数据是什么样就是什么样

    分类树:基于基尼系数选择特征进行分支

    回归树:基于均方误差MSE选择特征进行分支

    可以自动进行连续型变量的二值化

    树的剪枝

    处理过拟合问题:sklearn使用后剪枝

    方法一:基于父节点和子节点的预测误差大小进行判断,当父节点的误差小于子节点的总加权平均误差时,那么我们就会进行剪枝(适用C4.5多叉树)

    方法二:限制树的结构来防止过拟合(仅适用于CART树,多叉树无法确定结构)

    子节点总加权平均错误率并和父节点进行比较,子节点错误率更高,考虑剪枝

    sklearn重要参数

    from sklearn.tree import DecisionTreeClassifier

    Criterion:一般默认选择gini基尼系数,如果数据模型的学习能力不太好选择entropy信息熵,entropy更容易发生过拟合。可以通过学习曲线和网格搜索进行调参,以结果为导向

    splitter:是否基于重要性程度最高的特征优先分支,默认best;如果是random,就可以用到random_state来随机

    剪枝参数:

    max_depth 最大深度

    min_samples_leaf  子节点最少包含的样本集

    min_samples_split  节点最少包含多少个才样本集可以分支

    为了提高运算速度,用网格搜索调参可以两两运行

    重要接口

    feature_importances_   #特征重要性,数值越大,重要性越高,可以做特征筛选的依据,选择大于0.02的。数值最大的基本就是根节点

    feature_names  #看特征名称

    target_names  #看标签名字

    用网格搜索进行调参:

    best_params_  #返回最佳参数的接口

    best_score_  #最佳得分

    混淆矩阵对模型进行评价

    from sklearn.metrics import classification_report

    print(classification_report(Ytest,clf.predict(Xtest)))

    正确率一般是当0和1平衡,且在业务上重要程度相同时,正确率才有效。一般在业务场景中都不能满足,我们会更加看中1,所以正确率一般不关心

    召回率:一个都不能漏,会犯错,人工量会提升。用于事情比较严重时。在银行中预测是否会违约,重点看召回率,模型中召回率要在85%以上这个模型才可以用于评分卡的使用

    精准率:一个都不能错,可以漏点也不是很重要的事情上

    举例,在电商中对会员进行营销时,要看中精准率。因为VIP是绝对不能被打扰的,要精准营销

    f1协波平均数:协调精准率和召回率的综合指标

    计算公式:

    相关文章

      网友评论

          本文标题:决策树

          本文链接:https://www.haomeiwen.com/subject/mocbektx.html