IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 决策树的认识和应用 -> 正文阅读

[数据结构与算法]决策树的认识和应用

一、决策树的基本认识

决策树是一种需要监督学习分类方法:在已知样本属性和分类结果的情况下,通过利用if-then结构(画出分类节点),对样本的属性增加条件以进行样本分类。
画决策树,关键点就是在于如何找出能够使分类错误率最小的分类节点?具体来说,有以下几个问题。问题①:如何确定属性的先后顺序?问题②:如何不要过拟合?

二、信息论基础

(一)信息熵

  • 定义:熵是不确定性的量度,信息熵可以理解为信息混乱的程度

  • 如何计算信息熵:
    在完全不知道属性的情况下,猜测32支球队,哪一支将会是冠军?
    使用二分法进行猜测,最多猜5次一定能猜中冠军球队。log2(32)=5,我们说信息熵等于5比特。
    如果开放一些属性,比如获胜球队有十年以上的经验。那么根据信息论,只需要小于5的次数,就能猜中冠军球队。这是因为获取的信息帮助我们减少了分类的不确定性,系统混乱程度降低,信息熵减小,猜测的次数随之变少。

由此我们可以解答问题①:如果得知某些属性可以更多地减少不确定性,那么就应该先把这些属性放在前面。

(二)信息增益

信息增益:得知某些特征后,信息熵减少的程度。
信息增益是选择属性的关键指标

(三)常见使用的算法

  • ID3:信息增益最大的准则
  • C4.5:信息增益比最大的原则。信息增益比=信息增益x(1/惩罚参数)。如果特征少,惩罚参数就小,信息增益比就大。可以防止过拟合。
  • CART分类树:使用了基尼系数

(四)决策树的API

决策树有很多API,这里介绍的是DecisionTreeClassifier
class sklearn.tree.DecisionTreeClassifier(criterion=‘gini’,max_depth=None,random_state=None)

  • criterion默认是gini系数,也可以选择信息增益的熵entropy
  • max_depth:树的深度大小
  • random_state:随机数种子

(五)决策树的结构、本地保存

1.sklearn.tree.export_graphviz()该函数能够导出DOT格式
tree.export_graphviz(estimator,out_file=‘tree.dot’,features_names=[","])
2.在网页上下载graphviz.exe:(能够将dot文件转换为pdf、png)
3.在cmd中运行命令:$dot-Tpng tree.dot -o tree.png

三、决策树的生成

例子:根据泰坦尼克号上乘客年龄、房间、票价、性别等信息,预测他们是否存活。其中age数据存在缺失。
数据:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt

from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier,export_graphviz
import pandas as pd

def decision():
    """
    用决策树对泰坦尼克号进行生死预测
    :return:None
    """
    #获取数据
    titan=pd.read_csv() #Dataframe类型(二维数据结构)

    #找出特征值和目标值
    x=titan[['pclass','age','sex']] #取出列中名为'pclass','age','sex'的值
    y=titan[['survived']]

    #缺失值处理
    x['age'].fillna(x['age'].mean(),inplace=True)#inplace指的是直接在原对象的基础上修改
    
    #分割数据集:测试集和训练集
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
    
    #特征工程1:将类别数据pclass进行one-hot编码
    dict=DictVectorizer(sparse=False)#实例化
    x_train=dict.fit_transform(x_train.to_dict(orient='records'))#to_dict可以将dataframe类型转换为字典类型
    x_test=dict.fit_transform(x_test.to_dict(orient='records'))

    #用决策树进行预测
    dec=DecisionTreeClassifier() #实例化,这里可以规定树的最大和或最小深度
    dec.fit(x_train,y_train)

	#预测的准确率
    print("预测的准确率:",dec.score(x_test,y_test))   
    
    #导出决策树的结构
export_graphviz(dec,out_file='./tree.dot',feature_names=['年龄','Pclass=1st', 'Pclass=2nd', 'Pclass=3rd', 'female', 'male']) #传入预测器dec

    return None

if __name__=='__main__':
    decision()

四、决策树的优缺点

优点:

  • 理解简单,数目可视化
  • 需要很少的数据准备,其他技术通常需要归一化
    缺点:
  • 可能过拟合,也就是树过于复杂
    改进:
  • 减枝cart算法(决策树API中已经实现,随机森林有介绍)
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章           查看所有文章
加:2021-08-11 12:40:50  更:2021-08-11 12:44:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 17:21:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计