决策树

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

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

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

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

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

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

特征选择

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

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

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

决策树_第1张图片

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

决策树_第2张图片

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树,多叉树无法确定结构)

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

决策树_第3张图片

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)))

决策树_第4张图片

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

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

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

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

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

计算公式:

决策树_第5张图片
决策树_第6张图片

你可能感兴趣的:(决策树)