一、回顾决策树(分类)
ID3算法构建树模型:每次选取当前最佳的特征类分割数据,并按照该特征的所有可能取值来切分。也就是说,如果一个特征值有4中取值,那么数据将被切分成4份。一旦按某特征切分后,该特征在之后的算法执行过程中将不会再起作用,所以有观点认为这种切分方式过于迅速。
除了切分过于迅速外,ID3算法还存在另一个问题,它不能直接处理连续型特征。只有事先将连续型特征离散化,才能在ID3算法中使用。但这种转换过程会破坏连续型变量的内在特性,也会损失一部分信息。
总结ID3算法缺点:
二、CART算法
1. 什么是CATR?
CART是英文Classification And Regression Tree的简写,又称为分类回归树。从它的名字我们就可以看出,它是一个很强大的算法,既可以用于分类还可以用于回归,所以非常值得我们来学习。
CART算法使用的是二元切分法,这种方法可以通过调整数的构建过程,使其能够处理连续型变量。具体的处理方法是:如果特征值大于给定值就走左子树,否则就走右子树。
CART算法有两步:
决策树生成:递归地构建二叉决策树的过程,基于训练数据集生成决策树,生成的决策树要尽量大;自上而下从根开始建立节点,在每个节点处要选择一个最好的属性来分裂,使得子节点中的训练集尽量的纯;
决策树剪枝:用验证数据集对生成的树进行剪枝并选择最优子树,这时损失函数最下作为剪枝的标准。
不同的算法使用不同的指标来定义“最好”:
2. 衡量指标
先构建一个DataFrame数据集,最后一列为标签。方便后续测试函数。
#导入相关包
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
#构造数据集
def createDataSet():
group = np.array([[1, 2],
[1, 0],
[2, 1],
[0, 1],
[0, 0]])
labels = np.array([0, 1, 0, 1, 0])
dataSet = pd.concat([pd.DataFrame(group), pd.DataFrame(labels)],axis=1,
ignore_index=True)
return dataSet
查看数据集: