「数据挖掘入门系列」数据挖掘模型之分类与预测 - 决策树

决策树在分类、预测、规则提取等领域有着广泛的应用。

决策树是一种树状结果,它的每一个叶节点对应一个分类。构造决策树的核心问题是:在每一步如何选择适当的属性对样本做拆分。对于分类问题,从已知类标记的训练样本中学习并构造出决策树是一个自上而下,分而治之的过程。

常见的决策树算法如下:

  1. ID3算法
  2. C4.5算法
  3. CART算法

其中ID3是最经典的决策树分类算法。

ID3算法

ID3算法基于信息熵来选择最佳测试属性。它选择当前样本集中具有最大信息增益值的属性作为测试属性。

总的信息熵计算方式如下:

设S是s个数据样本的集合。假定某个类别有m个不同的取值:Ci(i = 1, 2, …, m)。设Si是某个类别Ci中的样本数。对于一个给定样本,它总的信息熵为:

其中,Pi是任意样本属于Ci的概率,一般可以用Si/s估计。

每个属性的信息熵计算方式如下:

假设一个属性A具有k个不同的值{a1, a2, …, ak},利用属性A将集合S划分为若干个子集 {S1, S2, …, Sk},其中Sj包含了集合S中属性A取aj值的样本。若选择属性A为测试属性,则这些子集就是从集合S的节点生长出来的新的叶子节点。设Sij是子集Sj中类别为Ci的样本数,则根据属性A划分样本的信息熵值为:

其中,是子集Sj中类别为Ci的样本的概率。

最后,用属性A划分样本集S后所得的信息增益(Gain)为:

Gain值越大,说明选择测试属性A对于分类提供的信息越大,选择A之后对于分类的不确定程度越小。

ID3算法具体流程

  1. 对当前样本集合,计算所有属性的信息增益(总的信息熵
  2. 选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划分为同一个样本集
  3. 若子样本集的类别属性只含有单个属性,则分支为叶子节点,判断其属性值并标上相应的符号,然后返回调用出;否则对子样本集递归调用本算法

决策树案例

接下来通过一个案例来了解天气、是否周末、是否有促销对销量的影响。数据集格式如下:

数据集已经上传到百度云盘:https://pan.baidu.com/s/1zX9W0XC3arA0L2HqrjQR7g

计算信息熵值

1、计算总的信息熵值

参考公式:

销量有两种分类为:Ci = {高, 低}, 其中销量为高的为18个,销量为低的是16个。

故总的信息熵为:

通过以下Python代码计算总的信息熵值为:0.997502546369

#-*- coding: utf-8 -*-

import math as m

# 计算总的信息熵
I_18_16 = -18 / 34.0 * m.log(18 / 34.0, 2) - 16 / 34.0 * m.log(16 / 34.0, 2)
print I_18_16

2、计算每个测试属性(天气、是否周末、是否有促销)的信息熵值

2.1 天气

天气好的情况:销量高的有11个,销量低的有6个

天气坏的情况:销量高的有7个,销量低的有10个

分别计算天气好和天气坏的信息熵为:

天气好的信息熵为:0.936667381878

天气坏的信息熵为:0.964078764808

根据公式:

天气属性的信息熵为:0.950373073343

根据公式:

计算属性「天气」属性的增益值为:

Gain(天气) = 0.0471294730262

同理,通过以上方式,我们可以计算得到「是否周末、是否有促销」的增益值,分别为:

天气属性的增益值为:0.047129

是否周末属性的增益值为:0.139394

是否有促销属性的增益值为:0.127268

故增益最大的属性为:是否为周末。

基于以上结论,以是否为周末作为根节点来构建决策树。

计算代码如下:

#-*- coding: utf-8 -*-

import math as m

# 计算二分类信息熵
# s1, s2必须是浮点数
def calc(s1, s2):
    return - s1 / (s1 +s2) * m.log(s1 / (s1 +s2), 2) - s2 / (s1 +s2) * m.log(s2 / (s1 +s2), 2)

# 计算总的信息熵
print u‘总的信息熵为:‘
print calc(18.0, 16.0)

print ‘- -‘ * 10
print ‘天气属性信息熵与增益值计算‘

# 计算天气好的信息熵为
print calc(11.0, 6.0)
# 计算天气坏的信息熵为
print calc(7.0, 11.0)
# 计算天气属性的信息熵为
come_weather = 17 / 34.0 * calc(11.0, 6.0) + 17 / 34.0 * calc(7.0, 11.0)
print come_weather

# 计算天气属性的增益值为
print ‘天气属性的增益值为:%f‘ % (calc(18.0, 16.0) - come_weather)

print ‘- -‘ * 10
print ‘是否周末属性信息熵与增益值计算‘

# 计算是周末的信息熵为
print calc(11.0, 3.0)
# 计算不是周末的信息熵为
print calc(7.0, 13.0)
# 计算是否周末属性的信息熵为
come_weekday = 14 / 34.0 * calc(11.0, 3.0) + 20 / 34.0 * calc(7.0, 13.0)

print ‘是否周末属性的增益值为:%f‘ % (calc(18.0, 16.0) - come_weekday)

print ‘- -‘ * 10
print ‘是否有促销属性信息熵与增益值计算‘

# 计算有促销的信息熵为
print calc(15.0, 7.0)
# 计算不是周末的信息熵为
print calc(9.0, 3.0)
# 计算是否周末属性的信息熵为
come_sales = 22 / 34.0 * calc(15.0, 7.0) + 12 / 34.0 * calc(9.0, 3.0)

print ‘是否有促销属性的增益值为:%f‘ % (calc(18.0, 16.0) - come_sales)

使用python构建决策树模型

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)

# 1. 导入pandas库
import pandas as pd

# 2.读取excel数据
data = pd.read_excel(‘sales_data.xls‘, index_col=u‘序号‘)

# 3. 数据是类别标签,需要将数据转换为数字
# 用1表示好、是、高
# 用-1表示坏、否、低
data[data == u‘好‘] = 1
data[data == u‘是‘] = 1
data[data == u‘高‘] = 1
data[data != 1] = -1

# 3.1 获取除索引列以外的3列
x = data.iloc[:,:3].as_matrix().astype(int)
# 3.2 获取销量列
y = data.iloc[:,3].as_matrix().astype(int)

# 4. 导入决策树模型
from sklearn.tree import DecisionTreeClassifier as DTC

# 5. 构建基于信息熵的决策树模型
dtc = DTC(criterion=‘entropy‘)
# 6. 训练模型
fit = dtc.fit(x, y)

原文地址:https://www.cnblogs.com/ilovezihan/p/12243111.html

时间: 2024-10-09 18:42:17

「数据挖掘入门系列」数据挖掘模型之分类与预测 - 决策树的相关文章

「数据挖掘入门系列」挖掘建模之分类与预测–逻辑回归

拿电商行业举例,经常会遇到以下问题: 如果基于商品的历史销售情况,以及节假日.气候.竞争对手等影响因素,对商品的销量进行趋势预测? 如何预测未来一段时间哪些客户会流失,哪些客户可能会成为VIP用户? 如果预测一种新商品的销售量,以及哪种类型的客户会比较喜欢? 除此之外,运营部门需要通过数据分析来了解具有某些特征的客户的消费习惯,管理人员希望了解下一个月的销售收入等,这些都是分类与预测的日志. 分类和预测是预测问题的两种主要类型. 分类主要是预测分类标号(离散值) 预测主要是建立连续值函数模型 挖

「数据挖掘入门系列」Python快速入门

Python环境搭建 本次入门系列将使用Python作为开发语言.要使用Python语言,我们先来搭建Python开发平台.我们将基于Python 2.7版本.以及Python的开发发行版本Anaconda版本来开发. Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项. 下载地址: https://www.anaconda.com/distribution/,注意要下载2.7版本 下载好Anaconda安装包后,即可安装,安装好后

「数据挖掘入门系列」数据探索之数据特征分析

对数据质量进行简单的分析后,我们就可以开始来分析数据的特征分析了.数据的特征分析可以从以下几个方面开展: 分布分析 对比分析 统计量分析 周期性分析 相关性分析 通过以上5种方式,可以找到数据中存在的某种特征. 分布分析 分布分析很容易理解,就是理解数据的分布情况.例如:在0-100区间有多少数据.100-1000有多少数据等等.我们一般可以使用直方图.饼图来展示数据的分布情况. 分布分析可以分为两种类型: 定量数据分布分析 定性数据分布分析 定量数据分布分析就是把数据分成一个个固定的区间,然后

数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST

目录 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 下载数据集 加载数据集 构建神经网络 反向传播(BP)算法 进行预测 F1验证 总结 参考 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 在本章节中,并不会对神经网络进行介绍,因此如果不了解神经网络的话,强烈推荐先去看<西瓜书>,或者看一下我的上一篇博客:数据挖掘入门系列教程(七点五)之神经网络介绍 本来是打算按照<Python数据挖掘入门与实践>

数据挖掘入门系列教程(一)之亲和性分析

数据挖掘入门系列教程(一)之亲和性分析 教程系列简介 系列地址:https://www.cnblogs.com/xiaohuiduan/category/1661541.html 该教程为入门教程,为博主学习数据挖掘的学习路径步骤.教程为入门教程,从最简单的开始.使用的编程语言为Python3.8.1,使用JupyterNotebook作为开发环境(使不使用JupyterNotebook都没有关系). 在学习本教程之前,你需要: 有一点python编程基础 会用百度 or 谷歌 数学知识还是要一

数据挖掘入门系列教程(八点五)之SVM介绍以及从零开始推导公式

目录 SVM介绍 线性分类 间隔 最大间隔分类器 拉格朗日乘子法(Lagrange multipliers) 拉格朗日乘子法推导 KKT条件(Karush-Kuhn-Tucker Conditions) 拉格朗日乘子法对偶问题 Slater 条件 最大间隔分类器与拉格朗日乘子法 核技巧 核函数 软间隔 软间隔支持向量机推导 SMO算法 SMO变量的选择方法 总结 参考 还是老规矩,这一篇博客是对SVM进行介绍,下一篇博客就是使用SVM进行具体的使用. SVM介绍 首先介绍SVM是什么,SVM(s

推荐数据挖掘入门教材《数据挖掘与机器学习 WEKA应用技术与实践》

该书由于去年刚出比较新,所以很难在网上下载到电子书,本人很幸运找到了前两章的电子版,而第二章又是本书的关键,所以建议大家先看看第二章,如果觉的写的好,可以再买书,或寻求电子版的全书,下载前两章请到:http://download.csdn.net/detail/u010968153/8686369 图书简介: 本书借助代表当今数据挖掘和机器学习最高水平的著名开源软件Weka,通过大量的实践操作,使读者了解并掌握数据挖掘和机器学习的相关技能,拉近理论与实践的距离.全书共分8章,主要内容包括Weka

R语言数据挖掘实战系列(5)

R语言数据挖掘实战系列(5)--挖掘建模 一.分类与预测 分类和预测是预测问题的两种主要类型,分类主要是预测分类标号(离散属性),而预测主要是建立连续值函数模型,预测给定自变量对应的因变量的值. 1.实现过程 (1)分类 分类是构造一个分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别.分类模型建立在已有类标记的数据集上,模型在已有样本上的准确率可以方便地计算,所以分类属于有监督的学习. (2)预测 预测是建立两种或两种以上变量间相互依赖的函数模型,然后进行预测或控制.

【Python数据挖掘课程】九.回归模型LinearRegression简单分析氧化物数据

这篇文章主要介绍三个知识点,也是我<数据挖掘与分析>课程讲课的内容.同时主要参考学生的课程提交作业内容进行讲述,包括:        1.回归模型及基础知识:        2.UCI数据集:        3.回归模型简单数据分析. 前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.Kmeans聚类数据分析及Anaconda介绍       [Python数据挖掘课程]三.Kmeans聚类代码实现.作业及优化