代码地址 Github
题目:
某连锁餐饮企业想了解周末和非周末对销量是否有很大影响,以及天气好坏、是否有促销活动对销量的影响,从而公司的辅助决策。现有单个门店的历史数据。请按要求完成实验。建议使用python 编程实现。
数据集:
文件ex3data.xls 为该实验的数据集,第1-5 列分别表示序号、天气好坏、是否周末、是否有促销和销量高低。
实验要求:
选择ID3、C4.5、CART 三种常见决策树算法中的一种建立决策树模型,并画出决策树。(采用多种算法实现并进行算法的比较分析者,将获得更高分数)
文件的读取:
本次文件不是之前的txt文件,而是excel文件。所以需要重写readfile函数。
def read_xls_file(): #读取excel文件
data = xlrd.open_workbook('./ex3data.xls') #打开文件
sheet1 = data.sheet_by_index(0) #获取sheet
m = sheet1.nrows #获取行大小
n = sheet1.ncols #获取列大小
dataMat = []
label = [] #标签
for i in range(m): #枚举每一行
row_data = sheet1.row_values(i) #获取一行数据
del(row_data[0]) #删除第一列元素
if(i == 0): #标签
label = row_data #获取标签
elif(i > 0 ): #其他数据
dataMat.append(row_data)
return dataMat,label
得到特征:
得到数据:
决策树模型
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部节点和叶节点,内部节点表示一个特征或属性,叶节点表示一个类。分类的时候,从根节点开始,当前节点设为根节点,当前节点必定是一种特征,根据实例的该特征的取值,向下移动,直到到达叶节点,将实例分到叶节点对应的类中。
决策树学习
决策树学习算法包含特征选择、决策树的生成与剪枝过程。决策树的学习算法一般是递归地选择最优特征,并用最优特征对数据集进行分割。开始时,构建根节点,选择最优特征,该特征有几种值就分割为几个子集,每个子集分别递归调用此方法,返回节点,返回的节点就是上一层的子节点。直到数据集为空,或者数据集只有一维特征为止。
信息熵
对于一个可能有n种取值的随机变量:
其熵为:
X的熵与X的值无关,只与分布有关,所以也可以将X的熵记作H(p),即: