决策树系列(一)决策树基础

  机器学习按数据的使用方式来说可以分为有监督学习、无监督学习、半监督学习、强化学习等,机器学习中的算法还有另外一种划分方式:分类、聚类、回归。但我更喜欢分为两种:广义的分类(分类+聚类)和回归,这里是按照预测的结果是离散数据还是连续数据来划分的。今天要介绍的决策树就是分类算法中的一种。

  在介绍机器学习和深度学习方法时,笔者将按照以下顺序来介绍相关理论:1.主要概念的定义 2.模型工作原理 3.最优化策略 4.模型训练方法 5.优缺点评估 6.应用(在第二篇介绍)

  1主要概念

  决策树:决策树是一种树形结构,其中每个内部节点表示一个实例在一个属性上的测试,每个分支代表一个实例测试输出的结果,每个叶节点代表一种类别。

  剪枝:将决策树的一颗树的子节点全部删掉,根节点作为叶子结点,其目的在于避免过拟合。

  信息熵:由信息论之父香浓提出,表示信息的不确定性,计算公式为

在这里,P指的是实例属于某种类别的概率,n是类别的总数。这个公式所蕴含的意思就是分类越多,信息熵越大,这里信息熵的值本身是没有任何意义的,其存在的意义在于有一个可以比较的尺度,当需要比较两个信息谁更混乱时,这里信息熵才有了用武之地!

  2决策树的工作原理

  对于一个训练好的决策树来说,当有一个新数据需要预测其分类时,首先以根节点的属性查找实例对应的值,然后决策应该选择哪个分支,在选定分支后按照下一个节点对应的属性继续查找实例对应属性的值,然后决策此节点应该选的分支,依次类推,得到叶子结点,叶子结点所对应的类别就是决策树预测的实例所属分类。

3决策树的最优化策略

  在构建决策树的过程中,当我们需要选取某个属性作为分支的判断条件时,我们需要知道在众多的属性中应该选择哪一个最好。这时,我们需要有一个可以衡量的指标,根据这个指标来选择属性。决策树模型有比较多的指标可供我们选择,这里介绍3种。

3.1信息增益(ID3算法)

  信息增益是ID3算法所使用的最优化策略,在这里就用到了信息熵的概念。 当我们为某个节点选择属性时,首先衡量选择属性之前的信息熵H,然后遍历所有属性,分别求选择对应属性后的信息熵Hi,这时,信息增益可以表示为Gain(A)=H-Hi,A表示所选的属性。

3.2信息增益率(C4.5算法)

  使用信息增益选择属性时,这种方法往往倾向于选择属性值较多的属性。举个极端的例子,所有实例在属性A上的属性值都不重复,那么在使用这个属性决策时如果将每个数据自成一个分支,那么直接得到分类结果,此时信息熵为直接变为0,信息增益最大,但显然这种方法是不合理的,至少会发生过拟合。这里可以引入一个惩罚因子,那么可以认为信息增益率=惩罚参数*信息增益,这里

其中D代表数据集,Di代表数据集按照值的划分,相同的值的数据在同一个划分中,否则不在。信息增益率的缺点与信息增益恰恰相反,这种方法倾向于选择取值较少的特征。。。

基于以上缺点,并不是直接选择信息增益率最大的特征,而是现在候选特征中找出信息增益高于平均水平的特征,然后在这些特征中再选择信息增益率最高的特征。

3.3基尼指数(CART算法)

  定义:基尼指数(基尼不纯度):表示在样本集合中一个随机选中的样本被分错的概率。

Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。

 基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率。用公式表示:

4决策树的训练

决策树构建的基本步骤如下:

1. 开始,所有记录看作一个节点

2. 遍历每个变量(属性)的每一种分割方式,找到最好的分割点

3. 分割成两个节点N1和N2

4. 对N1和N2分别继续执行2-3步,直到每个节点足够“纯”或者没有变量(属性)可以划分节点为止

5决策树的优缺点

优点:

  1速度快,计算量相对较小,比较容易转化成规则

  2便于理解,可以很清晰的显示出哪些属性比较重要

缺点:

  1缺乏伸缩性,由于进行深度优先搜索,所以非常吃内存,难于处理大数据集

  2连续型字段难于处理

  3当类别太多时,错误可能会增加的比较快

时间: 2024-10-06 00:38:58

决策树系列(一)决策树基础的相关文章

重新认识决策树系列算法和逻辑斯特回归(一)

一.决策树通俗到深入理解 我们知道决策树可以用来分类,同样可以用来回归,我们主要其应用于分类的情况,回归其实是相似的. 举一个例子,一家银行要确定是否给用户发信用卡,那么它要根据用户的基本信息来确定是否要发给这个用户,假设我们知道用户的信息如下: 年龄 是否有工作 是否有自己的房子 信贷情况 性别 青年.中年.老年 是.否 是.否 差.非常差.一般.好.非常好 男.女 分类的结果当然是:发信用卡,不发信用卡 如果学过逻辑回归算法的话,我们知道,它是把这些特征进行加权之后的和然后带入sigmod函

大白话5分钟带你走进人工智能-第二十五节决策树系列之信息增益和信息增益率(4)

                                                       第二十五节决策树系列之信息增益和信息增益率(4) 上一节我们讲解了决策树的分裂条件以及评估纯度的其中一个方式,基尼系数.本节的话,我们再讲解一个评估纯度的方式,基于信息增益的方式,即ID3树使用的评估方式.它办的事跟Gini系数一样,也是评价纯度,但是它更客观一点,但它算起来比Gini系数稍慢一点,它办的事跟Gini系数一样,也是评价纯度,但是它更客观一点,算起来比Gini系数稍慢一点,

决策树学习基决策树学习基本算法

决策树学习基本算法 输入:训练集; ???? 属性集. 过程:函数 1: 生成结点node; 2: if 中样本全属于同一类别 then 3: ????将node标记为类叶结点; return 4: end if 5: if 中样本在上取值相同 then 6: 将node标记为叶结点,其类别标记为中样本数最多的类; return 7: end if 8: 从中选择最优化分属性 9: for 的每一个值 do 10: 为node生成一个分支; 令表示中在上取值为的样本子集; 11:???? if

GL_GL系列 - 总账系统基础(概念)

1. 分类账 分类账是公司财务记录的核心,任何事物处理都必须经过这个环节 主要分类账: 按4C定义的用于保存记录的主要分类账 科目表 日历 币种 子分类续航会计方法 辅助分类续航: 用于辅助目的, 跨国公司可借助其遵守多种法律要求 可不主要分类账不同: 科目表 日历 币种 会计方法 分类续航处理选项 分类账的基本要素 帐套 会计科目结构 - 会计期间 - 本为币币种 - 定义子分类账会计方法 总账中可与分类账共享的元素 账户结构 值集 段值 安全性规则 交叉验证规则 会计日历 期间 期间类型 币

IOS开发系列—Objective-C之基础概览

概览 前面我们已经用了几章内容进行C语言介绍,当然要通过几篇文章完整的介绍C语言的知识是不太现实的,例如C语言的文件操作.内存申请等我们都没有重点介绍,当然核心知识点基本都已经提到了,后面有时间我们会继续扩充.今天我们正式开始学习Objective-C,以后简称"ObjC",ObjC是在C语言的基础上加上了一层面向对象的特性,它完全兼容C语言,甚至可以混写C++.它是Mac OS X和IOS的主要开发语言,从IOS发布之后可以说ObjC的地位呈直线上升趋势,当前ObjC已经是仅次于C语

LNMP系列网站零基础开发记录(三)

[目录] 扯淡吹逼之开发前奏 Django 开发环境搭建及配置 web 页面开发 Django app开发 Django 站点管理 Python 简易爬虫开发 Nginx&uWSGI 服务器配置 ... 三.web页面开发 好吧,本来想单独写一章bootstrap的,但是前端确实没什么好写的,这里我们直接结合实际直接开搞吧.做WEB我习惯先把想要的页面模板做完,然后再根据razar或者这里要用到的django template修改.美工确实不太好,P得一手烂图,所以一般都用现成的开源框架,这里我

多线程系列(1)多线程基础和Thread

因为现项目中有用到多线程和并发的知识,所以打算近期补习一下多线程相关的内容.第一篇文章从最基础的开始,就是如何开启一个线程,如何启动线程和阻塞线程等,这篇文章分以下几点进行总结. 多线程初印象 多线程的使用场景 线程的启动,挂起和终止 一个简单的多线程实例 多线程初印象 首先通过一张图来了解一下进程Process,应用程序域AppDomain和线程Thread之间的关系. 从图中可以总结出以下几点: 一个进程Process可能包含多个应用程序域,也包含多个线程,线程也可以穿梭于多个应用程序域当中

SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC)的GIS专业理论知识. 5.其他相关知识. SQL Server 2

【小白的java成长系列】——Java基础知识

今天来说说java的基础知识,个人感觉都不知道要说啥的,还是为后面的内容做一些铺垫吧~ 今天主要说的都是java面向对象之前的基础知识,比如数据类型呀,表达式运算符呀~等等一系列的知识,下节来说说面向对象.今天这节我就不用程序来说明,直接用文字说明.因为个人感觉真木有啥好说的,这些程序后续都会说到的,比较简单,写写就会了的..好吧~开始了... 1. Java数据类型划分: 基本数据类型:都是一个个具体的值 数值型:表示具体的数字,所有的整数默认情况下都是int,所有的小数都是double型的