没有那么难的算法,竟然也看了两个晚上,果然上了年纪。。
其实我是把这个算法到底是为了干什么没抓住。
这个算法就是为了分类!!!
目标
举例来说,我想知道我应该佩戴哪种眼镜,那么树脂的,玻璃的,这个就是最终想得到的目标结果。那么如何判断呢?需要依据我的度数,价位来进行判断,这两个就是对结果进行分类时需要的特征向量。所以最终,我输入我的度数,和价位,系统就能告诉我我应该佩戴树脂还是玻璃的眼镜啦!
步骤
- 为了能够进行判断,我们首先需要准备数据样本集。这个样本集包括了以前的人根据不同的度数和价位得出的分类结果。
degree | price | category |
---|---|---|
low | low | glass |
high | medium | resin |
high | low | glass |
2. 依据以上数据,构建决策树。也就是是按照degree来划分数据,还是依据price来划分数据以使得我们能够更好的得到决策树呢?这个时候需要引入信息论的两个概念。信息增益和香农熵。他们是衡量划分结果的变量。香农熵用来求信息增益,信息增益越大说明数据分类分的越好。
3. 在每个特征上划分数据,求出能实现最大增益的时候的特征,以此进行划分。递归调用,构建决策树。如果到最后一个特征了还是没能保证叶子结点内的数据都属于同一分类的话,就选取最多的作为该叶子结点的分类。
4. 得出决策树就可以使用啦!
缺点
这个是DI3的算法,可能会有overfitting过度匹配的问题,利用更加流行的CART和C4.5可以对叶子节点进行剪枝,解决此问题。
对于数据集基本要求标称型数据集或能够离散化成标称型的数据集