写程序学ML:决策树算法原理及实现(四)
来源:互联网 发布:淘宝sony耳机真假 编辑:程序博客网 时间:2024/05/23 15:30
[题外话]近期申请了一个微信公众号:平凡程式人生。有兴趣的朋友可以关注,那里将会涉及更多更新机器学习、OpenCL+OpenCV以及图像处理方面的文章。
2.3 决策树的测试
书中使用隐形眼镜数据集对决策树进行了测试。
创建测试文件contactLenses4DecisionTree.py;
打开存储隐形眼镜数据集的文件lenses.txt,从中读取每一行数据;
定义存储特征的变量;
调用模块DecisionTree的函数createTree(),构建整个决策树;
调用模块DecisionTreePlotter的函数createPlot()绘制整棵决策树;
调用模块DecisionTree的函数classify()对测试样本进行判断;
具体代码如下:fr = open('lenses.txt') #打开样本集文件#strip() 方法用于移除字符串头尾指定的字符(默认为空格)#split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串#str.split(str="", num=string.count(str))#readlines()从文件中一行一行地读数据,返回一个列表;读取的行数据包含换行符#从样本集文件中读取所有的行,用换行符分开,去除每行行首和行末的空格,保存到列表变量lenses中lenses = [inst.strip().split('\t') for inst in fr.readlines()]lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate'] #定义样本集的特征集lensesTree = DecisionTree.createTree(lenses, lensesLabels) #调用模块DecisionTree的函数createTree对样本集产生决策树print lensesTreestoreTree(lensesTree, 'DecisionTreeStorage.txt') #将决策树保存到文件中inTree = grabTree('DecisionTreeStorage.txt') #从文件中加载决策树DecisionTreePlotter.createPlot(inTree) #调用模块DecisionTreePlotter的函数createPlot绘制产生的决策树lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate'] #定义样本集的特征集print DecisionTree.classify0(inTree, lensesLabels, ['young','hyper','no','normal'])print DecisionTree.classify(inTree, lensesLabels, ['young','hyper','no','reduced'])
它们的测试结果如下:
soft
no lenses
模块DecisionTreePlotter的函数createPlot()绘制的整棵决策树如下:
3、小结
决策树分类器就像带有终止块的流程图,终止块表示分类结果。开始处理数据集时,首先需要测量集合中数据的不一致性,也就是熵,然后寻找最优方案划分数据集,直到数据集中的所有数据属于同一分类。
决策树非常好地匹配了实验数据,然而这些匹配选项可能太多了。将这种问题称为过度匹配(overfitting)。
ID3算法可以用于划分标称型数据集。该算法会产生过度匹配数据集的问题。可以通过裁剪决策树,合并相邻的无法产生大量信息增益的叶节点,消除过度匹配问题。
其他决策树构造算法,最流行的是C4.5和CART。
本文中涉及的所有code可以访问如下目录获取:
https://github.com/stevewang0/MLInAction
(完)- 写程序学ML:决策树算法原理及实现(四)
- 写程序学ML:决策树算法原理及实现(一)
- 写程序学ML:决策树算法原理及实现(二)
- 写程序学ML:决策树算法原理及实现(三)
- 写程序学ML:K近邻(KNN)算法原理及实现(一)
- 写程序学ML:K近邻(KNN)算法原理及实现(二)
- 写程序学ML:朴素贝叶斯算法原理及实现(一)
- 写程序学ML:朴素贝叶斯算法原理及实现(二)
- 写程序学ML:朴素贝叶斯算法原理及实现(三)
- 写程序学ML:Logistic回归算法原理及实现(一)
- 写程序学ML:Logistic回归算法原理及实现(二)
- 写程序学ML:Logistic回归算法原理及实现(三)
- 分类决策树原理及实现(四)
- 决策树算法原理及JAVA实现(ID3)
- ID3决策树算法原理及C++实现
- 决策树算法及实现
- 决策树算法原理与实现(一)
- 决策树算法原理及案例
- Android release keystore 找不到?原来它们就是.jks文件!
- 404. Sum of Left Leaves (二叉树)
- mac_命令行下控制Wi-Fi
- 机房开始篇
- JSON.stringify()将 JavaScript 对象转换为字符串。
- 写程序学ML:决策树算法原理及实现(四)
- C++标准库
- tushare更新,get_k_data支持分时k线数据,可替代以前的get_hist_data
- GreenDao3 使用说明
- TCP协议之三次握手四次挥手
- Spring cloud 服务注册(consul)
- 杜教筛模板 莫比乌斯函数之和
- 网页性能优化
- 第二节 几种常用变量和运算符学习。