科研信息学人工智能与机器学习

Decision Tree

2019-05-28  本文已影响156人  快乐自由拉菲犬

决策树非常之robust!

决策边界很有趣!


1.可线性分割吗?


2. 构建决策树(分割)


3. sklearn decision tree


4. 决策树的准确性


5. 决策树的参数

最小样本分割

决策树的准确性


6. 熵Entropy

下图中,哪个更纯点?
==>右

熵公式

Pi是第i类中的样本占总样本数的比例


7.熵的手工计算

总共有多少node:

slow的Pi是多少:

fast也不例外:

那么这个node的熵是多少呢?

计算出来等于1.
python计算过程:

熵=1
这是最坏的状况,entrophy=1。在这个节点,2个不同类的样本们被均分在这个节点。


8.信息增益Information Gain

练习1:信息增益计算

计算右侧这里这个节点的熵值:

===>为0,因为这个节点中的所有样本均属于同一类别。(在这个节点上,所有样本都是快速行驶)

练习2:计算Pi

练习3:计算最终的information gain

练习4:计算下一个特征变量bumpiness的信息增益

练习5:如果我们根据颠簸程度来进行拆分,那我们会得到什么样的信息增益?

练习6:当我们根据速度限制进行拆分时,会获得什么样的信息增益?

在speed拆分下,slow和fast的纯度达到最纯,所以entropy=0


9.mini project about DT

同样是邮件分类问题,之前用过了NB 和SVM,现在用DT:


10. 控制算法复杂度的第2种方法

你从 SVM 迷你项目中了解到,参数调整可以显著加快机器学习算法的训练时间。一般情况下,参数可以调整算法的复杂度,越复杂的算法通常运行起来越慢。

控制算法复杂度的另一种方法是通过你在训练/测试时用到的特征数量。算法可用的特征数越多,越有可能发生复杂拟合。我们将在“特征选择”这节课中详细探讨,但你现在可以提前有所了解。

你数据中的特征数是多少?

(提示:数据被整理成一个 numpy 数组后,行数是数据点数,列数是特征数;要提取这个数字,只需运行代码 len(features_train[0])。)

简单来说,2种方法:调参 or 控制特征数量

来看看如果把percentile = 10 修改为percentile = 1之后的模型的准确率会怎样,运行速度又如何:


11. 中文版决策树(唐宇迪版)

11.1 决策树算法原理概述

叶子节点:最终到达的那个不会再分割的结果。
非叶子节点:还能分的节点。比如图中的 "is male",还没分完,最后的性别为Y 、N才是叶子节点

难点:怎么把决策树构造出来呢?


11.2 衡量标准-熵

比如还有个集合c=(1,1,1,1,1)
里面全是1,非常纯。那么它的Log值为0,熵值也为0.最纯状态的熵值为0就是这么计算出来的。

信息增益: 也就是说熵减少了多少。


11.3决策树构造实例

拿到手的数据:


11.4 信息增益率

ID3的问题就是,它把ID作为分割特征,每一个类都是熵值为0,但是有意义吗?---没有。所以不能再用这个了。

渐渐地又渐进。。。到了GINI系数,跟熵值差不多。


11.5决策树剪枝策略

现阶段,一般都会选择预剪枝。


12.sklearn实现决策树

12.1 决策树涉及参数

树模型参数:


交叉验证:


13. 重要知识点

scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归。分类决策树的类对应的是DecisionTreeClassifier,而回归决策树的类对应的是DecisionTreeRegressor。两者的参数定义几乎完全相同,但是意义不全相同。下面就对DecisionTreeClassifier和DecisionTreeRegressor的重要参数做一个总结,重点比较两者参数使用的不同点和调参的注意点。

DecisionTreeClassifier和DecisionTreeClassifier 重要参数调参注意点
为了便于比较,这里我们用表格的形式对DecisionTreeClassifier和DecisionTreeRegressor重要参数要点做一个比较。

除了这些参数要注意以外,其他在调参时的注意点有:

1)当样本少数量但是样本特征非常多的时候,决策树很容易过拟合,一般来说,样本数比特征数多一些会比较容易建立健壮的模型

2)如果样本数量少但是样本特征非常多,在拟合决策树模型前,推荐先做维度规约,比如主成分分析(PCA),特征选择(Losso)或者独立成分分析(ICA)。这样特征的维度会大大减小。再来拟合决策树模型效果会好。

3)推荐多用决策树的可视化(下节会讲),同时先限制决策树的深度(比如最多3层),这样可以先观察下生成的决策树里数据的初步拟合情况,然后再决定是否要增加深度。

4)在训练模型先,注意观察样本的类别情况(主要指分类树),如果类别分布非常不均匀,就要考虑用class_weight来限制模型过于偏向样本多的类别。

5)决策树的数组使用的是numpy的float32类型,如果训练数据不是这样的格式,算法会先做copy再运行。

6)如果输入的样本矩阵是稀疏的,推荐在拟合前调用csc_matrix稀疏化,在预测前调用csr_matrix稀疏化。

(摘自:https://www.cnblogs.com/pinard/p/6056319.html


** code **

上一篇 下一篇

猜你喜欢

热点阅读