Python3:《机器学习实战》之决策树算法(3)预测隐形眼镜类型


  • 转载请注明作者和出处:http://blog.csdn.net/u011475210
  • 代码地址:https://github.com/WordZzzz/ML/tree/master/Ch03
  • 操作系统:WINDOWS 10
  • 软件版本:python-3.6.2-amd64
  • 编  者:WordZzzz

  • Python3机器学习实战之决策树算法3预测隐形眼镜类型

    • 前言
    • 测试和存储算法
      • 测试算法使用决策树执行分类
      • 使用算法决策树的存储
    • 使用决策树预测隐形眼镜类型

前言:

  本博文先介绍在实际应用中如何存储分类器,然后在实际数据上使用决策树分类算法,验证它是否可以正确预测出患者应该使用的隐形眼镜类型。

测试和存储算法

测试算法:使用决策树执行分类

  在执行数据分类时,需要使用决策树以及用于构造决策树的标签向量。然后,程序比较测试数据与决策树上的数值,递归执行该过程知道进入叶子结点;最后将测试数据定义为叶子节点所属的类型。

代码实现:

def classify(inputTree, featLabels, testVec):"""Function:   使用决策树的分类函数Args:       inputTree:树信息featLabels:标签列表testVec:测试数据Returns:    classLabel:分类标签""" #第一个关键字为第一次划分数据集的类别标签,附带的取值表示子节点的取值firstStr = list(inputTree.keys())[0]#新的树,相当于脱了一层皮secondDict = inputTree[firstStr]#将标签字符串转为索引featIndex = featLabels.index(firstStr)#遍历整棵树for key in secondDict.keys():#比较testVec变量中的值与树节点的值if testVec[featIndex] == key:#判断子节点是否为字典类型,进而得知是否到达叶子结点if type(secondDict[key]).__name__=='dict':#没到达叶子结点,则递归调用classify()classLabel = classify(secondDict[key], featLabels, testVec)else:#到达叶子结点,则分类结果为当前节点的分类标签classLabel = secondDict[key]#返回分类标签return classLabel
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

输出结果:

>>> reload(trees)
<module 'trees' from 'E:\\机器学习实战\\mycode\\Ch03\\trees.py'>
>>> myDat, labels = trees.createDataSet()
>>> labels
['no surfacing', 'flippers']
>>> myTree = treePlotter.retrieveTree(0)
>>> myTree
{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}
>>> trees.classify(myTree, labels, [1,0])
'no'
>>> trees.classify(myTree, labels, [1,1])
'yes'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

使用算法:决策树的存储

  构造决策树是很耗时的任务,及时处理很小的数据集。如果使用创建好的决策树解决分类问题,则可以很快完成。因此,为了节省计算时间,我们使用Python模块pickle序列化对象,以便在硬盘上保存和读取字典。

代码实现::

def  storeTree(inputTree, filename):"""Function:   存储决策树Args:       inputTree:树信息filename:文件名称Returns:    无""" #导入模块import pickle#新建文件,一定要加b属性,否则可能报错:#TypeError: write() argument must be str, not bytesfw = open(filename, 'wb')#写入数据pickle.dump(inputTree, fw)#关闭文件fw.close()def grabTree(filename):"""Function:   读取决策树Args:       filename:文件名称Returns:    pickle.load(fr):树信息""" #导入模块import pickle#打开文件,写入属性一致,否则可能报错:#UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequencefr = open(filename, 'rb')#导出数据return pickle.load(fr)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

输出结果:

>>> reload(trees)>>> trees.storeTree(myTree, 'classifierStorage.txt')
>>> trees.grabTree('classifierStorage.txt')
{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}
  • 1
  • 2
  • 3
  • 4
  • 5

  通过上面的代码,我们可以将分类器存储在硬盘上,而不用每次对数据分类时重新学习一遍,这也是决策树的优点之一,而k-近邻算法却无法持久化分类器。

使用决策树预测隐形眼镜类型:

示例:使用决策树预测隐形眼镜类型:

  • 收集数据:提供的文本文件。
  • 准备数据:解析tab键分割的数据行。
  • 分析数据:快速检查数据,确保正确地解析数据内容,使用createPlot()函数绘制最终的树形图。
  • 训练算法:使用前面编写好的createTree()函数。
  • 测试算法:编写测试函数验证决策树科一正确分类给定的数据实例。
  • 使用算法:存储树的数据结构,以便下次使用时无需重新构造树。

  隐形眼镜数据集是非常著名的数据集,它包含很多患者眼部状况的观察条件以及医生推荐的隐形眼镜类型,数据来源于UCI数据库,为了更容易显示数据,书中对数据做了简单的更改,即lenses.txt文件。

>>> fr = open('lenses.txt')
>>> lenses = [inst.strip().split('\t') for inst in fr.readlines()]
>>> lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate']
>>> import trees
>>> lensesTree = trees.createTree(lenses, lensesLabels)
>>> lensesTree
{'tearRate': {'reduced': 'no lenses', 'normal': {'astigmatic': {'yes': {'prescript': {'myope': 'hard', 'hyper': {'age': {'pre': 'no lenses', 'young': 'hard', 'presbyopic': 'no lenses'}}}}, 'no': {'age': {'pre': 'soft', 'young': 'soft', 'presbyopic': {'prescript': {'myope': 'no lenses', 'hyper': 'soft'}}}}}}}}
>>> import treePlotter
>>> treePlotter.createPlot(lensesTree)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

  本渣渣将上述代码包装成函数,方便大家直接调用。

代码实现:

# -*- coding: UTF-8 -*-
"""
Created on Aug 31, 2017
Test on the modules
@author: wordzzzz
"""
import trees
import treePlotterdef main():"""Function:   主函数Args:       无Returns:    无"""#打开文件fr = open('lenses.txt')#读取文件信息lenses = [inst.strip().split('\t') for inst in fr.readlines()]#定义标签lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate']#创建树lensesTree = trees.createTree(lenses, lensesLabels)#打印树信息print(lensesTree)#绘制树信息treePlotter.createPlot(lensesTree)if __name__ == "__main__":main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

输出结果:

E:\机器学习实战\mycode\Ch03>python3 test.py
{'tearRate': {'reduced': 'no lenses', 'normal': {'astigmatic': {'no': {'age': {'presbyopic': {'prescript': {'myope': 'no lenses', 'hyper': 'soft'}}, 'young': 'soft', 'pre': 'soft'}}, 'yes': {'prescript': {'myope': 'hard', 'hyper': {'age': {'presbyopic': 'no lenses', 'young': 'hard', 'pre': 'no lenses'}}}}}}}}
  • 1
  • 2

  隐形眼睛的例子表明决策树可能会产生过多的数据集划分,从而产生过度匹配数据集的问题。我们可以通过裁剪决策树,合并相邻的无法产生大量信息增益的叶节点,消除过度匹配问题。淡然还有很多决策树构造算法,最流行的是C4.5和CART。

系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~

完的汪(∪。∪)。。。zzz

Python3:《机器学习实战》之决策算法(3)预测隐形眼镜类型相关推荐

  1. Educoder 机器学习 决策树使用之使用决策树预测隐形眼镜类型

    任务描述 相关知识 如何处理隐形眼镜数据集 编程要求 测试说明 任务描述 本关任务:编写一个例子讲解决策树如何预测患者需要佩戴的隐形眼镜类型.使用小数据集,我们就可以利用决策树学到很多知识:眼科医生是 ...

  2. Python3:《机器学习实战》之决策树算法(3)预测隐形眼镜类型

    Python3:<机器学习实战>之决策树算法(3)预测隐形眼镜类型 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://gith ...

  3. python3.5《机器学习实战》学习笔记(五):决策树算法实战之预测隐形眼镜类型

    转载请注明作者和出处:http://blog.csdn.net/u013829973 系统版本:window 7 (64bit) 文章出现的所有代码在我的GitHub:https://github.c ...

  4. 徒手写代码之《机器学习实战》-----决策树算法(2)(使用决策树预测隐形眼镜类型)

    使用决策树预测隐形眼镜类型 说明: 将数据集文件 'lenses.txt' 放在当前文件夹 from math import log import operator 熵的定义 "" ...

  5. 机器学习实战--决策树ID3的构建、画图与实例:预测隐形眼镜类型

    声明 本文参考了<机器学习实战>书中代码,结合该书讲解,并加之自己的理解和阐述 机器学习实战系列博文 机器学习实战--k近邻算法改进约会网站的配对效果 机器学习实战--决策树的构建.画图与 ...

  6. 机器学习实战——密度聚类算法

    机器学习实战--密度聚类算法 1 密度聚类 2 sklearn中的实现 1 密度聚类 密度聚类假设聚类结构能够通过样本分布的密集程度确定,通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接 ...

  7. 机器学习实战——层次聚类算法

    机器学习实战--层次聚类算法 1 层次聚类概述 2 sklearn中的实现 1 层次聚类概述 层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构. 数据集的划分可采用"自底向上& ...

  8. 机器学习实战之决策树(四)示例:预测隐形眼镜类型(含数据集)

    决策树(四)示例:预测隐形眼镜类型 流程 代码 决策树小结 转载请注明作者和出处:https://blog.csdn.net/weixin_45814668 微信公众号:qiongjian0427 知 ...

  9. 《机器学习实战》学习笔记:绘制树形图使用决策树预测隐形眼镜类型

    上一节实现了决策树,但只是使用包含树结构信息的嵌套字典来实现,其表示形式较难理解,显然,绘制直观的二叉树图是十分必要的.Python没有提供自带的绘制树工具,需要自己编写函数,结合Matplotlib ...

最新文章

  1. 查看Entity Framework生成的SQL语句
  2. python 文件 IO 操作
  3. 某班学生有50人会c语言的有40人,《离散数学》期末考试题目及评分标准
  4. javabean简述
  5. 2021的第一封拒信来自2021年年度青年活动家本科生奖!
  6. 第十八天:规划风险管理和识别风险
  7. ffplay分析(视频解码线程的操作)
  8. react 文本框_React自动完成文本框
  9. 多个div中的label标签对齐
  10. codeigniter mysql 存储过程_Codeigniter框架使用Mysql存储过程的例子
  11. POJ:3126-Prime Path
  12. thinkphp5.x之数据库操作相关解析 Db类
  13. robbin界面 java_使用JAVA和C#开发Ribbon界面
  14. Redis中五中数据类型的实例
  15. 计算机操作系统学习笔记
  16. java实现极简单的 TXT小说阅读器(第四版)
  17. Maven-仓库概念,下载与配置
  18. 教程篇:《基础模块2》金蝶K3WISE15.0-注册套打教程
  19. 小巧精美原厂轴 Cherry发布全新MX Board 1.0
  20. AIO600 IPPBX电话交换机对接联通移动IMS服务器

热门文章

  1. 企业BI智能大屏,除了页面炫酷,还能带来什么?
  2. 影迷藏宝盒--电影预告片
  3. TinyOS之串口通信TestSerial数据包分析
  4. 备忘录形成html乱码,【关于备忘录“乱码”现象】的解决方案~~~~~
  5. 磁性元器件的分布参数,电源工程师一定用得上
  6. BT爱好者必看:P2P下载伤硬盘吗?
  7. 产业跨界桓仁融合功能性-农业大健康·万祥军:实现致富增收
  8. 技术分享 | 做到这几点,你也能成为 BAT 的抢手人!
  9. Blind XXE漏洞详解
  10. 黑帽SEO与黑帽技术