什么是决策树?
决策树是一种常用的机器学习算法,用于解决分类和回归问题。它是一种树状结构,通过对数据集进行递归划分,基于特征的条件来进行决策和预测。
以下都是一些决策树。
学习过程:
如何创建一个决策树呢?我们需要去给他们一些特征并判断他们是不是符合这些特征,再进行分类。
决定一就是,我们要去判断去选择什么特征作为我们分类的关键。我们需要选择最大区分度也叫最大纯度的特征,比如DNA可以去完全的分辨是非是猫。
当我们并没有完全把猫分辨出来的办法时,我们要选择仅可能大的纯度去设计我们的特征。
图中,很明显根据耳朵的特征可以最大程度的分辨猫。
决定二就是何时停止我们的分裂:
1.当我们已经100%分类完,2.再次分裂会超过被允许的最大深度,3.再分裂我们得到的纯度小于阈值,4.在这个点的样品数量小于阈值。
3和4主要考虑的是继续分裂可能会导致过度拟合的情况的出现。
测量纯度:
熵(entropy):熵是信息论中的一个概念,用于衡量信息的不确定性或混乱程度。在机器学习和数据挖掘中,熵被广泛应用于决策树和信息增益等算法中。
在这里p1指的是我们为猫的概率,可以看到我们这里应该是3/6的概率为猫,所以我们画出了左边的图,在p1等于0.5时,我们的熵是最大的,为1。
当我们有更多的数据时,他们就会对应着不同的熵值。
它的函数就是由右边的公式而来。
信息激增(information gain):
学习熵的减小就是信息激增。
我们要去计算我们的熵的减少,当我们的减少到最大时,我们的特征选择就是最好的。当我们的分裂减少的熵值并不是很明显,为了防止过拟合的情况的发生我们就会停止分裂。
我们就可以得到我们的信息激增的公式,在这里H指的是我们的熵,而w指的是我们的加权数。
创建一个决策树的过程:
1.在决策树的根节点开始显示所有的数据。
2.计算我们的分裂的各个特征的最大信息激增值,并选择特征。
3.根据我们的特征分为左右两个分支。
4继续以上的分裂直到分裂的结束。
在这个例子里,决策树下面分成了两个子决策树,这种表示方法,被称为是递归算法(recursive algorithm)。
在这里的最大深度的选取,可以从可用库中找到。
独热编码(one hot encoding):
当我们在分类时,有不止两种的类别时,我们就要用到我们的独热编码来对他们进行分类。
我们把他们的三种耳朵的形状,分别用1和0的方式,分成三个特征 。
在这三个特征中,只有一个的属性是1这也就是为什么叫one hot 因为只有一个属性是热门的选项。
我们也可以把另外两个属性也用0和1来表示与分类。
这种编码不止可以用在决策树上,在神经网络,线性回归,逻辑回归里都可以使用。
连续属性的特征:
我们的特征不仅仅可以只用于我们的离散型的数据,对于连续型的特征也可以使用。
我们还是使用信息增强的方法,通过计算不同的分界点,得到数据增强最大的点。
回归树(regression tree):
回归树顾名思义就是把线性回归与决策树相结合的产物
这里我们的重量就变成了我们的回归预测的值了,前面的则是我们的输入值。我们通过这个方法就可以得到各个类别下面的猫的的个数,这时我们同一类别下的猫的体重进行去平均数,这时我们就可以得到他们的体重,在这里不再是去得到是否是猫。
我们现在要做的是去找到一个合适的特征区别值。 还是要算出它们的熵值下降值,我们先要算出我们的方差(variance),还是要得出我们的权重W。
然后我们再用全部值的方差减去加权方差,得到的最大的熵减的值,就是最好的特征分辨的值。
使用多个决策树:
树集成:也就是一个算法结构中有多个决策树。
一个决策树会出现对于一个数据就显示出巨大的变化,会导致预测的准确率的下降,而我们有多个决策树,我们的准确率就会上升,因为可以把几个会因为个别决策树的影响会减小。比如上图,我们的预测猫,只有第二个不是猫,就可以通过更多的决策树避免误差。
样品回收(替换取样):
我们的取样方式就是从四个中取四遍,我们每次取完都要把原来的放回,这样就可以防止我们拿出的每次都是同样的四个。
我们也可以把她用于我们的决策树中。
我们在这里用到的就是从10个训练集数据中,任意的取我们的训练数据,它是可以重复的,这样我们就可以得到一个全新的数据集。
随机森林算法(Random forest algorithm):
我们会得到m个数据集,我们通过替换取样的方法得到不同的数据组,然后我们把每一组数据生成了不同的决策树。它们的集合也就是产生了我们的树集合。在这里我们叫它袋装决策树。我们在这里的根节点我们的区分特征值会相似甚至相同。
我们让我们在根节点的区分特征值变的更加的随机
我们先要从n个数据中选取k个数据,载用这个k个数据用袋装决策树的方法得到多个不同的决策树,集成变树集成,这就是随机森林算法。
XGBoost:
它的优点是以上的几个,包括了正则化,和自动选择最好的分裂特征。它是一种比较好用的算法。
导入我们的包,我们就可以进行预测了。
何时使用我们的决策树呢?
这上面的几点就是如何去选择合适的模型,神经网络or决策树。