问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于管理学中决策树的问题怎么做?

发布网友 发布时间:2022-04-24 14:01

我来回答

6个回答

懂视网 时间:2022-04-23 11:35

这次给大家带来javascript怎样做出决策树,javascript做出决策树的注意事项有哪些,下面就是实战案例,一起来看一下。

决策树算法代码实现

1.准备测试数据

这里我假设公司有个小姐姐相亲见面为例
得到以下是已经见面或被淘汰了的数据(部分数据使用mock.js来生成的):

var data =
 [
  { "姓名": "余夏", "年龄": 29, "长相": "帅", "体型": "瘦", "收入": "高", 见面: "见" },
  { "姓名": "豆豆", "年龄": 25, "长相": "帅", "体型": "瘦", "收入": "高", 见面: "见" },
  { "姓名": "帅常荣", "年龄": 26, "长相": "帅", "体型": "胖", "收入": "高", 见面: "见" },
  { "姓名": "王涛", "年龄": 22, "长相": "帅", "体型": "瘦", "收入": "高", 见面: "见" },
  { "姓名": "李东", "年龄": 23, "长相": "帅", "体型": "瘦", "收入": "高", 见面: "见" },
  { "姓名": "王五五", "年龄": 23, "长相": "帅", "体型": "瘦", "收入": "低", 见面: "见" },
  { "姓名": "王小涛", "年龄": 22, "长相": "帅", "体型": "瘦", "收入": "低", 见面: "见" },
  { "姓名": "李缤", "年龄": 21, "长相": "帅", "体型": "胖", "收入": "高", 见面: "见" },
  { "姓名": "刘明", "年龄": 21, "长相": "帅", "体型": "胖", "收入": "低", 见面: "不见" },
  { "姓名": "红鹤", "年龄": 21, "长相": "不帅", "体型": "胖", "收入": "高", 见面: "不见" },
  { "姓名": "李理", "年龄": 32, "长相": "帅", "体型": "瘦", "收入": "高", 见面: "不见" },
  { "姓名": "周州", "年龄": 31, "长相": "帅", "体型": "瘦", "收入": "高", 见面: "不见" },
  { "姓名": "李乐", "年龄": 27, "长相": "不帅", "体型": "胖", "收入": "高", 见面: "不见" },
  { "姓名": "韩明", "年龄": 24, "长相": "不帅", "体型": "瘦", "收入": "高", 见面: "不见" },
  { "姓名": "小吕", "年龄": 28, "长相": "帅", "体型": "瘦", "收入": "低", 见面: "不见" },
  { "姓名": "李四", "年龄": 25, "长相": "帅", "体型": "瘦", "收入": "低", 见面: "不见" },
  { "姓名": "王鹏", "年龄": 30, "长相": "帅", "体型": "瘦", "收入": "低", 见面: "不见" },
 ];

2.搭建决策树基本函数

代码:

function DecisionTree(config) { if (typeof config == "object" && !Array.isArray(config)) this.training(config);
};
DecisionTree.prototype = { //分割函数
 _predicates: {}, //统计属性值在数据集中的次数
 countUniqueValues(items, attr) {}, //获取对象中值最大的Key 假设 counter={a:9,b:2} 得到 "a" 
 getMaxKey(counter) {}, //寻找最频繁的特定属性值
 mostFrequentValue(items, attr) {}, //根据属性切割数据集 
 split(items, attr, predicate, pivot) {}, //计算熵
 entropy(items, attr) {}, //生成决策树
 buildDecisionTree(config) {}, //初始化生成决策树
 training(config) {}, //预测 测试
 predict(data) {},
};var decisionTree = new DecisionTree();

3.实现函数功能

由于部分函数过于简单我就不进行讲解了
可前往 JS简单实现决策树(ID3算法)_demo.html查看完整代码
里面包含注释,与每个函数的测试方法

这里的话我主要讲解下:计算熵的函数、生成决策树函数(信息增益)、与预测函数的实现

在 ID3算法 wiki 中解释了计算熵与信息增益的公式

3.1.计算熵(entropy)函数

我们可以知道计算H(S)(也就是熵)需要得到 p(x)=x/总数量 然后进行计算累加就行了
代码:

//......略//统计属性值在数据集中的次数countUniqueValues(items, attr) { var counter = {}; // 获取不同的结果值 与出现次数
 for (var i of items) { if (!counter[i[attr]]) counter[i[attr]] = 0;
 counter[i[attr]] += 1;
 } return counter;
},//......略//计算熵entropy(items, attr) { var counter = this.countUniqueValues(items, attr); //计算值的出现数
 var p, entropy = 0; //H(S)=entropy=∑(P(Xi)(log2(P(Xi))))
 for (var i in counter) {
 p = counter[i] / items.length; //P(Xi)概率值
 entropy += -p * Math.log2(p); //entropy+=-(P(Xi)(log2(P(Xi))))
 } return entropy;
},//......略var decisionTree = new DecisionTree();console.log("函数 countUniqueValues 测试:");console.log(" 长相", decisionTree.countUniqueValues(data, "长相")); //测试console.log(" 年龄", decisionTree.countUniqueValues(data, "年龄")); //测试console.log(" 收入", decisionTree.countUniqueValues(data, "收入")); //测试console.log("函数 entropy 测试:");console.log(" 长相", decisionTree.entropy(data, "长相")); //测试console.log(" 年龄", decisionTree.entropy(data, "年龄")); //测试console.log(" 收入", decisionTree.entropy(data, "收入")); //测试

3.2.信息增益

公式

根据公式我们知道要得到信息增益的值需要得到:

H(S) 训练集熵

p(t)分支元素的占比

H(t)分支数据集的熵

其中t我们就先分 match(合适的)和on match(不合适),所以H(t):

H(match) 分割后合适的数据集的熵

H(on match) 分割后不合适的数据集的熵

所以信息增益G=H(S)-(p(match)H(match)+p(on match)H(on match))
因为p(match)=match数量/数据集总项数量
信息增益G=H(S)-((match数量)xH(match)+(on match数量)xH(on match))/数据集总项数量

//......略buildDecisionTree(config){ var trainingSet = config.trainingSet;//训练集 
 var categoryAttr = config.categoryAttr;//用于区分的类别属性
 //......略
 //初始计算 训练集的熵
 var initialEntropy = this.entropy(trainingSet, categoryAttr);//<===H(S)
 //......略
 var alreadyChecked = [];//标识已经计算过了
 var bestSplit = { gain: 0 };//储存当前最佳的分割节点数据信息
 //遍历数据集
 for (var item of trainingSet) { // 遍历项中的所有属性
 for (var attr in item) {  //跳过区分属性与忽略属性
  if ((attr == categoryAttr) || (ignoredAttributes.indexOf(attr) >= 0)) continue;  var pivot = item[attr];// 当前属性的值 
  var predicateName = ((typeof pivot == 'number') ? '>=' : '=='); //根据数据类型选择判断条件
  var attrPredPivot = attr + predicateName + pivot;  if (alreadyChecked.indexOf(attrPredPivot) >= 0) continue;//已经计算过则跳过
  alreadyChecked.push(attrPredPivot);//记录
  var predicate = this._predicates[predicateName];//匹配分割方式
  var currSplit = this.split(trainingSet, attr, predicate, pivot);  var matchEntropy = this.entropy(currSplit.match, categoryAttr);// H(match) 计算分割后合适的数据集的熵
  var notMatchEntropy = this.entropy(currSplit.notMatch, categoryAttr);// H(on match) 计算分割后不合适的数据集的熵
  //计算信息增益: 
  // IG(A,S)=H(S)-(∑P(t)H(t))) 
  // t为分裂的子集match(匹配),on match(不匹配)
  // P(match)=match的长度/数据集的长度
  // P(on match)=on match的长度/数据集的长度
  var iGain = initialEntropy - ((matchEntropy * currSplit.match.length
   + notMatchEntropy * currSplit.notMatch.length) / trainingSet.length);  //不断匹配最佳增益值对应的节点信息
  if (iGain > bestSplit.gain) {   //......略
  }
 }
 } 
 //......递归计算分支}

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

相关阅读:

如何使用canvas来制作好用的涂鸦画板

如何使用s-xlsx实现Excel 文件导入和导出(下)

热心网友 时间:2022-04-23 08:43

决策树法用于风险性决策,就是在比较和选择活动方案时未来情况不止一种,管理者无法确定那种情况将发生,但是知道每种情况发生的概率。


 决策树法是用树状图来描述各种方案在不同情况(或自然状态)下的收益,据此计算每种方案的期望收益从而作出决策的方法。


举例:

某企业为了扩大某产品的生产,拟建设新厂。据市场预测,产品销路好的概率为0.7,销路差的概率为0. 30有三种方案可供企业选择:

    方案1、新建大厂,需投资300万元。据初步估计,销路好时,每年可获利100万元;销路差时,每年亏损20万元。服务期为10年。

方案2、新建小厂,需投资140万元。销路好时,每年可获利40万元;销路差时,每年仍可获利30万元。服务期为10年。    

方案3 、 先建小厂,三年后销路好时再扩建,需追加投资200万元,服务期为7年,估计每年获利95万元。


问哪种方案最好?

决策树中,

矩形结点称为决策点,从决策点引出的若干条树枝枝表示若干种方案,称为方案枝。圆形结点称为状态点,从状态点引出的若干条树枝表示若干种自然状态,称为状态枝。图中有两种自然状态:销路好和销路差,自然状态后面的数字表示该种自然状态出现的概率。位于状态枝末端的是各种方案在不同自然状态下的收益或损失。据此可以算出各种方案的期望收益。


决策树如下图:


方案1的期望收益为:

[0.7×100+0.3×(-20)]×10 - 300=340(万元)

方案2的期望收益为:

(0.7×40+0.3×30) - 140= 230(万元)

    至于方案3,由于结点④的期望收益465(= 95×7- 200)万元,大于结点⑤的期望收益280(= 40×7)万元,所以销路好时,扩建比不扩建好。

方案3(结点③)的期望收益为:(0.7×40×3+0.7 X465 +0.3×30×10) - 140= 359.5(万元)


    计算结果表明,在三种方案中,方案3最好

在复杂的决策树中还会将利率(货币的时间价值因素)考虑进去,简单建模做出决策树以后计算收益或损失即可。

热心网友 时间:2022-04-23 10:01

1、决策树(decision tree)一般都是自上而下的来生成的。每个决策或事件(即自然状态)都可能引出两个或多个事件,导致不同的结果,把这种决策分支画成图形很像一棵树的枝干,故称决策树。决策树就是将决策过程各个阶段之间的结构绘制成一张箭线图,我们可以用下图来表示。

2、选择分割的方法有好几种,但是目的都是一致的:对目标类尝试进行最佳的分割。从根到叶子节点都有一条路径,这条路径就是一条“规则”。决策树可以是二叉的,也可以是多叉的。对每个节点的衡量:通过该节点的记录数;如果是叶子节点的话,分类的路径;对叶子节点正确分类的比例;有些规则的效果可以比其他的一些规则要好。

3、决策树的构成有四个要素:(1)决策结点;(2)方案枝;(3)状态结点;(4)概率枝。如图所示:

扩展资料:

决策树一般由方块结点、圆形结点、方案枝、概率枝等组成,方块结点称为决策结点,由结点引出若干条细支,每条细支代表一个方案,称为方案枝;圆形结点称为状态结点,由状态结点引出若干条细支,表示不同的自然状态,称为概率枝。每条概率枝代表一种自然状态。在每条细枝上标明客观状态的内容和其出现概率。在概率枝的最末稍标明该方案在该自然状态下所达到的结果(收益值或损失值)。这样树形图由左向右,由简到繁展开,组成一个树状网络图。

热心网友 时间:2022-04-23 11:36

你画一棵树,每个树叶,都让人的专长代替。枝是专项,杈上坐着领导,你就明白了。

热心网友 时间:2022-04-23 13:27

计算期望收益值来作为判断的依据

热心网友 时间:2022-04-23 15:35

没有具体例题不好说~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么车险可以分期花呗 请问“有几个虫子怕什么"改为陈述句是"有几个虫子不可怕"。为什么要加... 一只狼身边有一只羊为什么狼不吃羊? 路边有一只羊,过来一只狼,却没有吃羊,为什么? ...有没有一个厂叫【福高】厂的,是做电子产品的。。3Q 明道冒险王百度云如何下载 冒险王2cps联系谁? 350分到400分的二本大学 廊坊高考400分能上什么学校 河北2023年高考400分左右能上什么大学 时间的单位是什么? 时间单位的由来 时间单位是怎么来的? 如何画决策树 决策树是什么,求! 决策树上每个节点都有数字,是怎样算的 lol空格名字怎么打教程? 英雄联盟里改名字空格怎么打 LOL现在改名还能打空格吗? 英雄联盟怎么起空格名字,求 晒小孩子朋友圈说说 宝宝满月的说说朋友圈 适合宝宝一周岁发的朋友圈说说有哪些? 宝宝周岁朋友圈说说 孩子成长的朋友圈说说 繁体字超怎么写 “超”用什么繁体字代替好看,“超”的繁 十个月的孩子发朋友圈怎么说? 超级的繁体字怎么写? 超的繁体字怎么写的 决策树图中,用什么符号自然状态节点。 决策树算法原理是什么? 时间的基本单位是什么? 如何设置j48决策树中的根节点 时间单位是如何得出来的 决策树在造价管理的哪一章 时间单位的演变过程 时间的时间单位 如何从科学学习决策树中提取决策规则 在决策树归纳中,为什么树剪枝是有用的 时间单位 在北京 Iphone7p手机忽然耗电特快 是什么原因? 我的是苹果7p这个应用电池用量最近删除的应用怎么费电那么多,电量就像流水一样,这个怎么关闭它 电脑正常使用中,突然显示器黑屏,但是主机还在运行...什么原因? 电脑老是出问题,显示器突然黑屏,但是主机还在运行。 电脑显示屏最近总是突然就黑屏了,主机还运行着,重启电脑又可以用... 电脑显示屏突然黑屏,主机却还发出正常运转的声音,是怎么回事? 电脑突然就黑屏了但主机还在运行这是怎么回事 word如何删除修改修订标记 电视剧《烽火佳人》里 佟毓婉究竟爱的人是杜允唐还是周霆琛?感觉霆琛好专情,闵茹这么好他都不接受