决策树算法分析天气、周末和促销活动对销量的影响

news/2024/12/21 21:08:42/

决策树算法分析天气、周末和促销活动对销量的影响


作者:AOAIYI
创作不易,觉得文章不错或能帮助到你,点赞收藏评论一下哦

文章目录

  • 决策树算法分析天气、周末和促销活动对销量的影响
  • 一、实验目的
  • 二、实验原理
  • 三、实验环境
  • 四、实验内容
  • 五、实验步骤
  • 总结


一、实验目的

1.掌握决策树的计算原理

2.掌握利用决策树分析商品销量的影响因素

二、实验原理

  1. 决策树的基本认识

决策树是一种依托决策而建立起来的一种树。在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象,树中的每一个分叉路径代表某个可能的属性值,而每一个叶子节点则对应从根节点到该叶子节点所经历的路径所表示的对象的值。决策树仅有单一输出,如果有多个输出,可以分别建立独立的决策树以处理不同的输出。

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

决策树最重要的是决策树的构造。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。构造决策树的关键步骤是分裂属性。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。分裂属性分为三种不同的情况:

1、属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。

2、属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。

3、属性是连续值。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支。

信息论中有熵(entropy)的概念,表示状态的混乱程度,熵越大越混乱。熵的变化可以看做是信息增益,决策树ID3算法的核心思想是以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。

设D为用(输出)类别对训练元组进行的划分,则D的熵表示为:
在这里插入图片描述
其中pi表示第i个类别在整个训练元组中出现的概率,一般来说会用这个类别的样本数量占总量的占比来作为概率的估计;熵的实际意义表示是D中元组的类标号所需要的平均信息量。

如果将训练元组D按属性A进行划分,则A对D划分的期望信息为:
在这里插入图片描述
于是,信息增益就是两者的差值:
在这里插入图片描述
ID3决策树算法就用到上面的信息增益,在每次分裂的时候贪心选择信息增益最大的属性,作为本次分裂属性。每次分裂就会使得树长高一层。这样逐步生产下去,就一定可以构建一颗决策树。

接下来以天气预报的例子来说明。下面是描述天气数据表,学习目标是play或者not play。
在这里插入图片描述

三、实验环境

Python3.6以上
Pycharm
sklearn0.19.0

四、实验内容

某餐饮企业作为大型连锁企业,生产的产品种类比较多,另外涉及的分店所在的位置也不同,数目比较多。对于企业的高层来讲,了解周末和非周末销售量是否有很大的区别,以及天气、促销活动这些因素是否能够影响门店的销售量等信息至关重要。因此,为了让决策者准确了解和销量有关的一系列影响因素,采用算法构建决策树模型,来分析天气、是否周末和是否有促销活动对销量的影响。

五、实验步骤

1.导入数据所需的外包

import pandas as pd
from sklearn.tree import DecisionTreeClassifier as DTC
from sklearn.tree import export_graphviz

2.导入数据

filename='/data/python13/sales_data.txt'
data=pd.read_csv(filename,index_col='序号')

3.数据预处理

data[data=='好']=1
data[data=='是']=1
data[data=='高']=1
data[data!=1]=-1

4.特征提取

x=data.iloc[:,:3].as_matrix().astype(int)
y=data.iloc[:,3].as_matrix().astype(int)

5.建立决策树模型

dtc=DTC(criterion="gini").fit(x,y)

6.模型可视化

with open( 'tree.dot','w') as f:f=export_graphviz(dtc,feature_names=data.columns,out_file=f)

7.完整代码

#-*- coding: utf-8 -*-
import pandas as pd
from sklearn.tree import DecisionTreeClassifier as DTCfilename='/data/python13/sales_data.txt'
data=pd.read_csv(filename,index_col='序号')
print(data.columns)
data[data=='好']=1
data[data=='是']=1
data[data=='高']=1
data[data!=1]=-1x=data.iloc[:,:3].as_matrix().astype(int)
y=data.iloc[:,3].as_matrix().astype(int)dtc=DTC(criterion="gini").fit(x,y)from sklearn.tree import export_graphvizwith open( 'tree.dot','w') as f:f=export_graphviz(dtc,feature_names=data.iloc[:,:3].columns,out_file=f)

8.运行结果:

可以在当前目录下,看到一个名为tree.dot的文件,切换到当前项目所在目录下:~/python13文件下,以如下方式编译,将其转化为可视化文件tree.png

cd ~/python13
dot -Tpng tree.dot -o tree.png

9.在pycharm中打开tree.png文件。
在这里插入图片描述


总结

为什么纸上谈兵不行?纸上谈兵太理想化了,把自己没有发现的问题隐藏了,当成了不存在的问题。只有实际多多亲自动手,才会发现有太多的问题是书上没提到的,也是自己没想到的。才会发现,一个小小的问题也要搞上半天。当然,如果你基础巩固的话,那这些问题应该都是可以被你解决的。熟练后,就不认为这些问题了。
不要看代码不难就感觉会了,只有自己的手打一遍,没有错误,编程的严谨些决定了,你错一个字母都不行。所以大家一定要注意,编程是自己打出来的,不是复制,粘贴你就会了,以后碰到了,还是不会。


http://www.ppmy.cn/news/22635.html

相关文章

QT+ OpenGL 变换

文章目录QT OpenGL变换向量的运算矩阵矩阵与向量相乘代码实现QT OpenGL 本篇完整工程见gitee:QTOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主。 变换 我们需要改变物体的位置 现有解决办法&#xff08;每一帧&#xff0c…

YB菜菜的机器学习自学之路(八)——基于keras的初级深度学习框架

YB菜菜的机器学习自学之路&#xff08;八&#xff09;——基于keras的初级深度学习框架前提说明1. 训练集和测试集2. mnist数据集简单介绍3.基于keras框架&#xff0c;利用全链接层搭建深度学习网络对MNIST训练3.1 数据导入与one-hot编码3.2 创建模型3.3创建神经元3.3.1 输入层…

产品原型不应该有过多的视觉设计元素

​写在前面&#xff1a; 日常中会接触较多的学习产品经理知识的小伙伴&#xff0c;学习是为从事这个岗位或者技能提升做准备。在与小伙伴接触的过程中发现&#xff0c;有小部分人的观点是产品原型不重要&#xff0c;甚至可以不学不做。 作为产品经理&#xff0c;产品原型制作是…

ubuntu16.04下安装离线jdk1.8

下载 jdk1.8安装包&#xff08;地址&#xff1a;Java Downloads | Oracle&#xff09;[ubuntu] 在/usr/local 目录下使用root账号执行以下命令(使用root账号&#xff0c;也可以使用普通账号<sudo>)&#xff1a;(1) 创建目录&#xff1a;mkdir java (将jdk离线包上传到该目…

理解矩阵二

接着理解矩阵。上一篇里说“矩阵是运动的描述”&#xff0c;到现在为止&#xff0c;好像大家都还没什么意见。但是我相信早晚会有数学系出身的网友来拍板转。因为运动这个概念&#xff0c;在数学和物理里是跟微积分联系在一起的。我们学习微积分的时候&#xff0c;总会有人照本…

嵌入式系统的概述、特点和发展阶段

嵌入式系统是由软件和硬件组成的能够独立运行的系统&#xff0c;硬件包括传感器、转换处理器、存储器、执行器和IO接口等&#xff0c;可以辅助、监控和控制机器设备运行&#xff0c;软件包括软件层、系统层和中间层&#xff0c;用于软件运行环境和操作系统。 下面详细的给大家介…

pc 和手机调用摄像头拍照 获取照片 好用

前端何如在代码中使用摄像头拍照功能 demo 部署服务器可以测试 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&quo…

工民建专业职称申报条件

工民建砖业&#xff0c;是工业与民用建筑砖业&#xff0c;是中等职业学校砖业目录的一门土建施工类砖业&#xff0c;主要在中砖以及开设中砖砖业的学校开设。工业与民用建筑主要为建筑施工企业、安装单位、设计单位、业主、监理等单位及各及管理部门培养从事施工及术、工程项目…