背景介绍:根据患者眼部状况的观察条件,利用决策树来向患者推荐隐形眼镜的类型。
1. 收集数据
数据集来自于UCI数据库的隐形眼镜数据集。
数据格式
2. 准备数据
解析tab键分割的数据行。def read2DataSet(filename):
fr= open(filename,'r')
dataSet= [example.strip().split('\t') for example in fr.readlines()]
lenseLabels= ['age','prescript','astigmatric','tearRate']#特征名称
return dataSet, lenseLabels
3. 分析数据
快速检查数据,确保正确地解析数据内容,绘制最后的决策树型图。
4. 训练算法-生成决策树
思想(伪代码):
检测数据集中的每个子项是否属于同一分类:
If so return 类标签
Else
寻找划分数据集的最好特征(--基于信息增益)
划分数据集
创建分支结点
for 每个划分的子集
调用自己,并增加返回结果到分支结点中
return 分支结点
4.1 划分数据def splitDataSet(dataSet, axis, value):
"""
对数据集进行划分
:param dataSet:数据集
:param axis: 选择的特征,在该特征上对数据集进行划分;
:param value: 特征的取值;划分依据(这种划分是多分支划分,依赖于每个标称属性的取值个数)
:return: 划分后的子集(删除特征axis后的数据集);;方便进行下一次划分;;递归执行"""
retDataSet= []
for featVecin dataSet:
if featVec[axis] == value