java决策树_【Java】决策树介绍和使用

现在生活中,越来越多的时候 需要进行判断和决策,因此关于怎么去判断和决策,需要根据一定的依据进行判断和决策,并不是凭空的按照自己的意愿去判断和决策,就比如举个例子; 假如甲同学准备结婚,但是在准备结婚之前,甲的女朋友需要甲买一套房子,但是甲去买房子的过程中,开发商进会对甲是否能够购买方法进行评估和决策:

如下图:

图一

分析: ①开发商对于你是否能够购买房子 进行判断的第一个依据是 “能否购买” 如果你又现金 OK,可以购买,如果你没有现金 会对再次判断; ②判断你是否有工作,如果没有工作 ,直接不让你买,如果有工作,还不一定能让你买,还要继续判断你 的工资是多少。 ③如果工资 大于4K的 OK,你可以购买,如果你工资不大于4K的,还要看你的职业; ④如果职业是 公务员的 ,OK 你可以购买,如果你不是公务员的,不让你购买;

这个例子中,就形成了一个决策树;

那什么是决策树:决策树(decision tree):是一个树形结构,决策树从根开始进行决策,直到到叶子节点,得到决策结果,当然这个决策树不是分支越多越好,而是决策的分支越少越好,并且有些不必要的分支,我们最终的时候,还要进行剪枝;

但是这个决策树,不是凭空形成的,在形成这个决策树的过程中,我们会想到一些问题?

①为什么是第一个按照 “能否购买” 来进行判断决策; ②为什么是第二个按照 “是否有工作” 来进行判断决策; ③为什么是第三个按照 “工资多少”来进行判断决策; ④这些顺序能够进行调整?

要分析清楚这样的分类问题,我们需要了解一些分类的算法 ID3算法,C4.5算法,CART算法 ID3算法是早期的算法,存在一些问题,而C4.5算法和CART算法 都是从 ID3算法 演变而来的,而且ID3算法 和 C4.5算法 是同一个人提出的; 那ID3算法是什么? ID3是贪心算法,用来构造决策树的,ID3算法的核心思想是以信息增益最大的属性来进行分类的; 这里有提到一个概念,信息增益: 它是ID3算法中用于进行属性选择度量,一般是拥有最高信息增益的的属性来作为节点N的分裂属性;

图二

其中Info(D) 叫 总数的信息熵

InfoA(D)表示 具体A这个属性的信息熵

Gain(A) 表示 A这种划分的信息增益

A这种的信息信息增益的结果等于 总数的信息熵Info(D) 减去具体某项的信息熵InfoA(D) ;

这是算出A的划分的的增益 ,同理,其他的增益 也是这样算出了,增益越多,就优先选择作为分类的标准;

ID3算法的缺点: 这种ID3算法的信息增益有个缺点,就是它会偏向具有大量值得属性,因为作为分母的D 越大 越多,整体的值就越小, 总数减去越大的小的值,信息增益就越大,这样就存在问题,假如我一个分类的属性 我分的越细,它的D就会越大, 但是只是根据分类的越细 来获取大的增益,这种是没有实际意义的;

基于ID3算法的缺点,后面出现C4.5算法和CART算法 C4.5算法:

C4.5算法核心采用信息增益率

图三

C4.5 采取得是分裂信息的量,当因子数比较多 ,数值比较大,在使用信息增益除以这个大的数,使得到小的数,这样就可以抵消掉倾向于ID3的缺点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 【随想录】(五)C 文件操作

#include<iostream> #include<cstdio> using namespace std;int main() {FILE *fp1 NULL; //指向源文件FILE *fp2 NULL; //指向目的文件char *byBuffNULL; //缓存int fileBytes 0; //文件大小const char* pSrc "M3.264";const char* pDest "M…

stackoverflow_Stackoverflow的见解:投票最多的是Spring 4问题

stackoverflow在Stackoverflow上对Spring 4问题进行投票和回答最多的是什么&#xff1f; 以下是最常见的五个问题和解答。 Spring中的 Component&#xff0c; Controller&#xff0c; Repository和Service批注有什么区别&#xff0c;它们可以互换使用还是具有特定功能&#xf…

java 编译顺序_关于java中一次编译多个源文件时的编译顺序的问题

为了节省回答者的时间我先把问题提出来&#xff0c;再针对问题案例作详细说明。如果能不用看问题案例就回答出来当然省时。我的问题是java里面&#xff0c;用命令行提示符环境编译源文件的时候&#xff0c;加上*通配符...为了节省回答者的时间我先把问题提出来&#xff0c;再针…

宏定义细节

#define PI(a,b) ab //分析 /* PI(a,b)a,b是参数 后面的ab进行运算 返回值作为PI的宏定义

libgdx和unity_libgdx和Kotlin –类[2D平台原型]

libgdx和unity这篇文章是libgdx和Kotlin文章的后续文章。 我已经决定开发一个简单的2D平台程序的原型&#xff08;沿着我的早期文章中的Star Assault进行介绍&#xff09;&#xff0c;但是我一直在使用和学习Kotlin&#xff0c;而不是Java。 对于本教程&#xff0c;该项目应处…

java1.7开发环境_在Windows平台搭建Java 1.7开发环境

OS&#xff1a;Windows 7 or laterJava Version: 1.7.x本文具体的演示环境是&#xff1a;Windows 8.1&#xff0c;Java 1.7.0_45。一、安装JDK需要注意的是安装路径中不要出现非西文符号。实际上我一般喜欢在安装路径中也尽可能不出现空格。比如&#xff1a;在我的PC上&#xf…

浅谈人工智能

所谓人工智能&#xff0c;主旨是让它有用“自己的思维模式”

java timer开销_减少Java垃圾收集开销的5条提示

java timer开销保持较低的GC开销的一些最有用的技巧是什么&#xff1f; 随着Java 9即将再次延迟发布&#xff0c;G1&#xff08;“垃圾优先”&#xff09;垃圾收集器将设置为HotSpot JVM的默认收集器。 从串行垃圾收集器一直到CMS收集器&#xff0c;JVM在其整个生命周期中都见…

C++STL Vector

#include<iostream> #include<vector> using namespace std;int main() {//vector构造函数vector<int>A(); //无参数&#xff0c;构造一个空的vectorvector<int>B(10, 1);//数量(num)和值(val) - 构造一个初始放入num个值为val的元素的Vector vector&…

java serializable 源码_Java源码分析之-Serializable接口

一、基本概念Serializable接口&#xff1a;1. 实现了Serializable接口的类&#xff0c;可以进行序列化和反序列化&#xff1b;没有实现这个接口的类的任何(state)状态/域或者属性值不能被序列化2. All subtypes of a serializable class are themselves serializable. 所有实现…

gluon_带有Gluon Ignite和Dagger的JavaFX中的依赖注入

gluon依赖注入抽象框架Gluon Ignite在几个流行的依赖注入框架&#xff08;例如Spring&#xff0c;Dagger和Guice&#xff09;上创建了一个通用抽象。 目前&#xff0c;Gluon 页面仅包含一个示例&#xff0c;该示例使用Gluon Ignite和Google Guice作为依赖注入框架&#xff0c;…

快速排序 自带时间复杂度检测

//时间复杂度 O(N*log2N //稳定性&#xff1a;不稳定 //来源于分治思想 /* 确定分界点 调整区间 递归处理两端算法思想&#xff0c;快排是基于冒泡排序的优化&#xff0c;冒泡排序从一侧开始进行&#xff0c;而快排是两边同时进行从而时间复杂度折半&#xff0c;同时包含了二…

java arraylist 常用方法_分享ArrayList中的几个常用方法的源码

jdk1.7.0_79上文里解析了有关ArrayList中的几个常用方法的源码——《有关ArrayList常用方法的源码解析》&#xff0c;本文将对LinkedList的常用方法做简要解析。LinkedList是基于链表实现的&#xff0c;也就是说它具备了链表的优点和缺点&#xff0c;随机访问慢、插入删除速度快…

java8 streams_Java 8 Streams API:对流进行分组和分区

java8 streams这篇文章展示了如何使用Streams API中可用的Collectors将具有groupingBy的流元素和具有partitioningBy的流元素进行groupingBy 。 考虑一系列Employee对象&#xff0c;每个对象都有名称&#xff0c;城市和销售数量&#xff0c;如下表所示&#xff1a; ---------…

【FFMPEG应用篇】使用FFMPEG解析H264编码为YUV格式

头文件 #pragma once#ifndef _VIDEO_DECODING_HEADER_ #define _VIDEO_DECODING_HEADER_#define INBUF_SIZE 4096 #define AUDIO_INBUF_SIZE 20480 #define AUDIO_REFILL_THRESH 4096extern "C" { #include "libavutil/opt.h" #include "libavcodec/…

java 反射api_Java学习笔记--反射API

反射API1.反射API的介绍通过反射API可以获取Java程序在运行时刻的内部结构。比如Java类中包含的构造方法、域和方法等元素&#xff0c;并可以与这些元素进行交换。按照 一般地面向对象的设计思路&#xff0c;一个对象的内部状态都应该通过相应的方法来改变&#xff0c;而不是直…

c++各类型有效范围

int -2147483648 ~ 2147483647 float 有6-7位有效数字 double 有15-16位有效数字

couchbase_具有Couchbase,Java EE和WildFly的CRUD Java应用程序

couchbaseCouchbase是一个开源的NoSQL文档数据库。 它允许访问&#xff0c;索引和查询JSON文档&#xff0c;同时利用集成的分布式缓存来实现高性能数据访问。 开发人员可以使用不同的语言&#xff08;Java&#xff0c;Go&#xff0c;.NET&#xff0c;Node&#xff0c;PHP&…

java 对象的态_Java面向对象-------多态总结

1.多态&#xff1a;是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口&#xff0c;使用不同的实例而执行不同操作&#xff0c;如图所示&#xff1a;多态性是对象多种表现形式的体现。2.多态作用&#xff1a;1. 消除类型之间的耦合关系2. 可替换性3. 可扩充性4…

C++ 【随想录】(六)C++后端向JS前端转换

需要包含的头文件 #include"comutil.h" #include"<string> BSTR转string BSTR bstrText ::SysAllocString(L"Test"); string str _com_util::ConvertBSTRToString(bstrText); SysFreeString(bstrText); string转BSTR…