【机器学习】决策树 No.3

2023-11-18

1、决策树之信息论基础

决策树思想来源非常朴素,程序设计中的条件分支结构(if-else),最早的决策树就是利用这类结构分割数据的一种分类学习方法。

例:

银行贷款例子(使用决策树划分是否贷款),此处特征为两个:房子,工作:

香农,信息论创始人,1948年发表论文-通信的数学原理,奠定了现代信息论的基础。

信息的单位:比特

信息熵和消除不确定性相关联。

2、决策树的划分及案例

(1)决策树划分依据

信息增益:

示例:贷款申请如下表:

(2)常见决策树使用的算法

ID3:信息在增益最大的准则

C4.5:信息增益比 最大的准则

CART:

       回归树:平方误差最小

       分类树:基尼系数最小的准则,在sklearn中可以选择划分的默认原则

(3)sklearn决策树API:

sklearn.tree.DecisionTreeClassifier

示例:

数据: http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt

处理流程:

实现代码:

from sklearn.tree import DecisionTreeClassifier , export_graphviz
from sklearn.feature_extraction import DictVectorizer
# from sklearn.cross_validation import train_test_split  # 已经更新为下边api
from sklearn.model_selection import train_test_split
import pandas as pd

def dicision():
    '''
    对泰坦尼克号预测生死
    数据地址:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
    :return None
    '''

    # 读取数据
    titan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")

    # 处理数据,找出特征值和目标值
    x = titan[["pclass", 'age', 'sex']]    #特征值
    y = titan[['survived']]                # 目标值

    # print(x)
    # 缺失值处理
    x['age'].fillna(x['age'].mean(), inplace=True)

    # 分割数据集到训练集合,测试集合.数据随机切分
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

    # 进行处理(特征工程)特征->类别-> one-hot编码
    dict = DictVectorizer(sparse=False)
    x_train = dict.fit_transform(x_train.to_dict(orient='records'))

    print(dict.get_feature_names())

    x_test = dict.fit_transform(x_test.to_dict(orient='records'))

    # print (x_train)

    # 使用决策树进行预测
    dec = DecisionTreeClassifier(max_depth=8)  # 树深度影响预测结果

    dec.fit(x_train, y_train)

    # 预测准确率
    print("预测的准确率: ", dec.score(x_test, y_test))

    # 导出决策树的结构
    export_graphviz(dec, out_file="C:\\Users\\Administrator\\Desktop\\机器学习\\tree.dot", feature_names=['年龄', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=女性', 'sex=男性'])

    return None



if __name__== "__main__":
    dicision()

执行结果:

['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=female', 'sex=male']

预测的准确率:  0.7963525835866262

安装:graphviz 观察树的结构

下载地址:https://graphviz.gitlab.io/_pages/Download/Download_windows.html

Windows下安装参考:https://www.cnblogs.com/onemorepoint/p/8310996.html

进入windows命令行界面,cd 切换到tree.dot所在的路径,执行

dot -Tpng tree.dot -o tree.png

 

C:\Users\Administrator\Desktop\机器学习>F:\Graphviz\bin\dot.exe -Tpng tree.dot -o tree.png

 

C:\Users\Administrator\Desktop\机器学习>

转化后树的结构如图:

 

(4)决策树的优缺点及改进

优点:简单的理解和解释,树木可视化;需要很少的数据准备,其他技术通常需要数据归一化。

缺点:决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合

改进:减枝cart算法(决策树API中已经实现);随机森林。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【机器学习】决策树 No.3 的相关文章

随机推荐

  • 力扣(LeetCode)2488. 统计中位数为 K 的子数组(C++)

    哈希表 找不到 O n O n O n 思路 试一下等价代换 数组所有数字大小不同 说明数组中最多有一个 k 数组的 k 要包含在 子数组 里 为了便于思考 分析奇数长度的子数组 在子数组里 大于 k 的数 和小于 k 的数 二者数量相等时
  • 深度学习用什么显卡?3060显卡适合深度学习吗?

    都知道深度学习很吃显卡 显存越大 可以缓存的内容就越多 对于非常吃显存的图像类深度学习程序来说 显存太小的显卡批处理就不能调太大 否则会程序会报错 深度学习用什么显卡 3060显卡适合深度学习吗 本文来解答一下这个问题 3060显卡适合深度
  • Spring动态代理用JDK还是用CGLIB?

    切面编程是Spring中非常重要的一个模块 切面编程的实现原理是动态代理 那么动态代理又有两种实现方式 一种方法是直接实现JDK中的InvocationHandler接口 另一种方法是继承CGLIB 那么问题来了 这两种方法有啥区别呢 分别
  • 数据结构——图的DFS(深度优先遍历)- C语言代码实现

    图的深度优先遍历的基本思想 从图中某顶点v出发 1 访问顶点v 2 依次从v的未被访问的邻接点出发 对图进行深度优先遍历 直至图中和v有路径相通的顶点都被访问 3 若此时图中尚有顶点未被访问 则从一个未被访问的顶点出发 重新进行深度优先遍历
  • Javescribt Library Javescript 库 总结

    Yahoo User Interface Library YUI Library YUI is a free open source JavaScript and CSS library for building richly intera
  • JavaScript 刷新或关闭网页时弹窗确认

    beforeunload事件在当页面关闭或刷新时调用 事件触发的时候弹出一个有确定和取消的对话框 确定则离开页面 取消则继续待在本页 有两种方法绑定事件 三种方法实现弹窗 通过 window addEventListener 对 retur
  • 轻量级前端MVVM框架avalon:整体架构

    单看这个图呢 还木有说明 感觉有点蛋疼 作者的将夜 www jiangyea com抽象度太高了 还好在前面已经大概分析过了执行流程 如图 左边是View视图 我们就理解html结构 换句话就是说用户能看到的界面 渲染页面 绑定事件 切换类
  • 【UE4 像素流 WEBUI插件】部署像素流

    目录 一 单实例本地像素流送 步骤 1 勾选插件 2 打包工程并启动信令服务器 3 创建快捷方式并启动游戏 二 单实例局域网像素流送 步骤 1 编辑cirrus js 2 编辑快捷方式属性 3 启动 三 集成WEBUI插件 一 单实例本地像
  • c++深度搜索详解

    1 什么是深度搜索 从计算机科学专业上讲 深度优先搜索算法是最常用图的搜索算法之一 这一算法也是很多重要的图的算法的原型 深度优先搜索其英文全称是Depth First Search 简称DFS 深度搜索的特点是先看 一个方向 例如 骑士在
  • STL deque 源码——deque特点、实现框架、源码分段剖析、常用函数总结(上)

    一 deque的一些特点 支持随机访问 即支持 以及at 但是性能没有vector好 可以在内部进行插入和删除操作 但性能不及list deque 两端 都能够快速插入和删除元素 而vector只能在尾端进行 deque的元素存取和迭代器操
  • 查新报告怎么写?

    一 查新报告怎么写 二 查新报告怎么查 查新报告一般是在查新机构里查 这里给大家推荐一个权威的专业查新机构 掌桥科研 掌桥科研是一家中国的科技信息服务公司 总部位于北京市 公司的主营业务是为中国的科学研究机构 大学 企业等提供科研数据和技术
  • 个人银行管理系统6(C改Java)

    C语言版本 date h ifndef DATE H define DATE H class Date 日期类 private int year 年 int month 月 int day 日 int totalDays 该日期是从公元元年
  • vue项目中跳转到外部链接方法

    div 点我 div goPage url window location href url 直接跳转去外部的a链接
  • 关于Keil中Memory中观察不到数据变化的问题以及启动文件栈的初始化

    关于Keil中Memory中观察不到数据变化的问题 在KEIL中观察Memory数据变化 一定要记得只能在RAM地址或ROM之内观察 如下图所示 RAM的地址设置在地址为0x20000000开始的地方 大小为0x20000 因此只有在这个范
  • gorm+docker+mysql

    简介 ORM Object Relational Mapping 框架采用元数据来描述对象与关系映射的细节 元数据一般采用XML格式 并且存放在专门的对象一映射文件中 简单理解为一种框架的格式 gorm是Golang中一个非常出色的 旨在对
  • 38个MySQL数据库的小技巧

    1 如何快速掌握MySQL 培养兴趣 兴趣是最好的老师 不论学习什么知识 兴趣都可以极大地提高学习效率 当然学习MySQL 5 6也不例外 夯实基础 计算机领域的技术非常强调基础 刚开始学习可能还认识不到这一点 随着技术应用的深 入 只有有
  • java之MySQL数据库

    MySQL数据库 1 什么是数据库 答 数据库是以一定方式存储在一起 能予多个用户共享 具有尽可能小的冗余度 与应用程序彼此独立的数据集合 2 数据库的分类 具体含义 常见的数据库 答 关系型数据库和非关系型数据库 关系数据库 是建立在关系
  • springCloud - 第10篇 - 服务间调用追踪 (zipkin 的使用)

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到教程 一 在微服务系统中 不同应用服务可能会有各种不同的相互调用 springcloud 集成了 zipkin 来实现对于不同服务调用的追踪和统计
  • LIBSVM 使用

    预备 NTU TW Chih Chung Chang and Chih Jen Lin LIBSVM LIBSVM Data Classification Regression and Multi label 正文 a 编译libsvm u
  • 【机器学习】决策树 No.3

    1 决策树之信息论基础 决策树思想来源非常朴素 程序设计中的条件分支结构 if else 最早的决策树就是利用这类结构分割数据的一种分类学习方法 例 银行贷款例子 使用决策树划分是否贷款 此处特征为两个 房子 工作 香农 信息论创始人 19