机器学习——决策树学习

  • 一、什么是决策树
  • 二、决策树的学习过程
    • 特征选择:
    • 决策树生成:
    • 剪枝:
  • 三、决策树的一个具体的实例
    • 导入数据
      • python strip() 函数和 split() 函数的详解及实例
    • 数据处理
      • 提取到训练集中的标签
      • 给数据的每一列添加上标签,并且转化为字典来存储每一列
      • 需要将数据转化为使用数值来代表的数据(字符串)——序列化
    • 调用库函数
    • 绘制决策树
    • 进行预测

决策树:在机器学习中,决策树是一个预测模型,它代表的是对象属性和对象值之间的一种映射关系
决策树的构建步骤:
1特征的选择
2决策树的生成
3决策树的修剪

参考文档:决策树算法内容讲解

一、什么是决策树

所谓决策树,就是一个类似于流程图的树形结构,树内部的每一个节点代表的是对一个特征的测试,树的分支代表该特征的每一个测试结果,而树的每一个叶子节点代表一个类别。树的最高层是就是根节点。下图即为一个决策树的示意描述,内部节点用矩形表示,叶子节点用椭圆表示。

二、决策树的学习过程

一棵决策树的生成过程主要分为以下3个部分:

特征选择:

特征选择是指从训练数据中众多的特征中选择一个特征作为当前节点的分裂标准,如何选择特征有着很多不同量化评估标准标准,从而衍生出不同的决策树算法。

  1. 特征的选择
    方法一:信息增益
    方法二:信息熵
    方法三:基尼指数

决策树生成:

根据选择的特征评估标准,从上至下递归地生成子节点,直到数据集不可分则停止决策树停止生长。 树结构来说,递归结构是最容易理解的方式。
2. 决策树的生成(树的构建是个递归的过程)

剪枝:

决策树容易过拟合,一般来需要剪枝,缩小树结构规模、缓解过拟合。剪枝技术有预剪枝和后剪枝两种。
3. 决策树的修剪
方法一:预剪枝,及时停止树增长
方法二:后剪枝

三、决策树的一个具体的实例

所用到的资料:(完整的代码和处理文件)
链接:https://pan.baidu.com/s/1fIAUdCDTpR7TiqLHZtx1yg
提取码:0929

导入数据

python strip() 函数和 split() 函数的详解及实例

一直以来都分不清楚strip和split的功能,实际上strip是删除的意思而split则是分割的意思。因此也表示了这两个功能是完全不一样的,strip可以删除字符串的某些字符,而split则是根据规定的字符将字符串进行分割。
split()函数
split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)

#导入数据with open('lenses.txt', 'r') as fr:                                        #加载文件lenses = [inst.strip().split('\t') for inst in fr.readlines()]        #处理文件print("输出读取到的数据:")print(lenses)
   inst=[]data=[]with open('lenses.txt', 'r') as fr:for inst in fr.readlines():#一行一行的读取print(inst.strip().split('\t'))data.append(inst.strip().split('\t'))print('输出读取到的全部数据:')print(data)

数据处理

在使用回归模型和机器学习模型时,所有考察数据都是数值更容易得到更好的结果。因为都是基于数学函数方法的,所以当数据集中出现类别数据时,此时数据是不理想的,不能用数学方法处理它们。例如处理性别属性时,将男和女两个性别数据用0和1进行代替。

提取到训练集中的标签

data_target=[]for each in data:data_target.append(each[-1])#因为在原有数据集中在最后一列print("输出提取到训练集中的标签:")print(data_target)

给数据的每一列添加上标签,并且转化为字典来存储每一列

 dataLabels = ['age', 'prescript', 'astigmatic', 'tearRate']  # 特征标签data_list=[]#临时存储全部数据data_dict={} #保存data数据的字典,用于生成pandasfor each_label in dataLabels:for each_data in data:data_list.append(each_data[dataLabels.index(each_label)])print("输出每一列的数据:")print(data_list)data_dict[each_label]=data_listdata_list=[]print("打印字典信息:")print(data_dict )

需要将数据转化为使用数值来代表的数据(字符串)——序列化

在使用回归模型和机器学习模型时,所有考察数据都是数值更容易得到更好的结果。因为都是基于数学函数方法的,所以当数据集中出现类别数据时,此时数据是不理想的,不能用数学方法处理它们。例如处理性别属性时,将男和女两个性别数据用0和1进行代替。

使用:LabelEncoder()将object类型转化为数值

data_pd=pd.DataFrame(data_dict)print("转化为pd.DataFrame类型方便序列化")print(data_pd)le=LabelEncoder()for col in data_pd.columns:data_pd[col]=le.fit_transform(data_pd[col])print("序列化处理:")print(data_pd)

#数据处理阶段lenses_target = []                                                        #提取每组数据的类别,保存在列表里for each in lenses:lenses_target.append(each[-1])                                      #从最后一列提取标签print("提取每组数据的类别标签,保存在列表里:")print(lenses_target)lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate']            #特征标签lenses_list = []                                                        #保存lenses数据的临时列表lenses_dict = {}                                                        #保存lenses数据的字典,用于生成pandasfor each_label in lensesLabels:                                            #提取信息,生成字典for each in lenses:lenses_list.append(each[lensesLabels.index(each_label)])lenses_dict[each_label] = lenses_list#print(lenses_dict)lenses_list = []print("打印字典信息:")print(lenses_dict)                                                        #打印字典信息lenses_pd = pd.DataFrame(lenses_dict)                                    #生成pandas.DataFrameprint("打印pandas.DataFrame:")print(lenses_pd)                                                        #打印pandas.DataFrameprint("数据序列化:")le = LabelEncoder()                                                        #创建LabelEncoder()对象,用于序列化for col in lenses_pd.columns:                                            #序列化lenses_pd[col] = le.fit_transform(lenses_pd[col])print("打印编码信息:")print(lenses_pd)

调用库函数

  #调用库函数clf = tree.DecisionTreeClassifier(max_depth = 4)     #最多一共四层                   #创建DecisionTreeClassifier()类clf = clf.fit(lenses_pd.values.tolist(), lenses_target)                    #使用数据,构建决策树

绘制决策树

  # 绘制决策树dot_data = StringIO()tree.export_graphviz(clf, out_file=dot_data,feature_names=lenses_pd.keys(),class_names=clf.classes_,filled=True, rounded=True,special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_jpg('decision_tree预测决策树.jpg')

进行预测

 #进行预测print("预测:[[presbyopic,myope,yes,normal],[presbyopic,hyper,yes,normal]]")print(clf.predict([[1, 1, 1, 0], [1, 0, 1, 0]]))

机器学习——决策树学习相关推荐

  1. 机器学习 - [源码实现决策树小专题]决策树学习中如何进行分类预测

    机器学习 - 决策树学习中如何进行分类预测 李俊才 的 CSDN 博客 邮箱 :291148484@163.com CSDN 主页:https://blog.csdn.net/qq_28550263? ...

  2. 机器学习知识点(七)决策树学习算法Java实现

    为理解机器学习第四章节决策树学习算法,通过网上找到的一份现成代码,主要实现了最优划分属性选择和决策树构造,其中最优划分属性选择采用信息增益准则.决策树构造采用递归实现,代码如下: package sk ...

  3. 机器学习入门学习笔记:(3.2)ID3决策树程序实现

    前言 之前的博客中介绍了决策树算法的原理并进行了数学推导(机器学习入门学习笔记:(3.1)决策树算法).决策树的原理相对简单,决策树算法有:ID3,C4.5,CART等算法.接下来将对ID3决策树算法 ...

  4. [机器学习-Sklearn]决策树学习与总结 (ID3, C4.5, C5.0, CART)

    决策树学习与总结 (ID3, C4.5, C5.0, CART) 1. 什么是决策树 2. 决策树介绍 3. ID3 算法 信息熵 信息增益 缺点 4. C4.5算法 5. C5.0算法 6. CAR ...

  5. 利用计算机语言实现ID3算法,机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf...

    机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保 ...

  6. 视觉机器学习20讲-MATLAB源码示例(4)-决策树学习算法

    视觉机器学习20讲-MATLAB源码示例(4)-决策树学习算法 1. 决策树学习算法 2. Matlab仿真 3. 仿真结果 4. 小结 1. 决策树学习算法 统计学,数据挖掘和机器学习中的决策树训练 ...

  7. 机器学习之决策树学习笔记

    决策树 1.决策树的概念 决策树是什么? 决策树(decision tree)是一种基本的分类与回归方法,通俗的讲也就是一颗用于决策的树. 决策树长什么样呢? 举个通俗易懂的例子,如下图所示的流程图就 ...

  8. 机器学习入门学习笔记(三)决策树

    一.基本流程 决策树(decision tree)是一类常见的机器学习方法.它是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制. 决策树学习的目的是为了产生一棵泛化能力强,即处 ...

  9. 从决策树学习谈到贝叶斯分类算法

    从决策树学习谈到贝叶斯分类算法 从决策树学习谈到贝叶斯分类算法 引言 最近在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法,而 ...

最新文章

  1. Web充斥着存在漏洞的过期JavaScript库
  2. R语言ggplot2可视化:ggplot2可视化水平堆叠条形图、并且在每个堆叠条形图的内部居中添加百分比文本标签信息
  3. ​数据分析最重要的 3 种特征编码,你真的能分清楚?
  4. android之多媒体篇(一)
  5. python文件操作实验报告_20193120 实验三《Python程序设计》实验报告
  6. Spring5 新增的两大功能,吹一波这个框架!
  7. [Matlab] 传入 dsolve 的方程组必须是行向量才能求解
  8. Linux 命令(60)—— strip 命令
  9. LabView学习笔记(九):数组与簇
  10. 删除数据库中的所有表
  11. 我的世界android制作教程,《我的世界手机版》怎么制作mod制作JS教程图文攻略
  12. 前方高能!java并发编程实战百度网盘
  13. IO编程 之 缓冲篇
  14. 万字讲解WiFi为何物
  15. 2022年基站查询、WiFi查询、GPS/经纬度查询的网站与API接口
  16. php培训班学多久,学php最快要多久? 学习路线?要不要报培训班?
  17. 通达信macd接口指标
  18. 计算机加密解除,pdf文件加密怎么解除?解除加密pdf文件的教程
  19. zcmu1684 求余数
  20. 经典排序算法动图图解

热门文章

  1. 理想的互联网服务后台框架的九个要点
  2. 针对Linux ASP.NET MVC网站中 httpHandlers配置无效的解决方案
  3. thinkphp出现Call to undefined function Think\C() in ... online 313
  4. 巴川数据科学炼成记_智橡树智能英语好不好有哪些功能?提出的科学学习思想是什么?...
  5. React-引领未来的用户界面开发框架-读书笔记(八)
  6. 《零基础看得懂的C语言入门教程 》——(七)C语言的循环分分钟上手
  7. sql 之as(Aliases)别名(mysql)
  8. Android封装快捷键,android打包一个没有快捷键的apk,并且通过另一个应用启动
  9. 钢厂冒的白烟到底有没有污染?东北大学教授的试验结果让你大吃一惊
  10. 史上最难逻辑题!据说99.9%的人都做不出来……