算法小白的第一次尝试---ID3(Decision Tree)

Python实现决策树(Decision Tree) 决策树,是机器学习的魔法般工具!它可以帮助我们进行分类和回归,无论是二元还是多元,连续还是离散,统统搞定!决策树的构建过程就像在寻宝一样,我们递归地挑选最优特征,然后根据这些特征将数据分割,直到发现宝藏——满足某种条件为止,这时,一颗美丽的决策树就呈现在我们面前! 阅读详情
package DecesionTree
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.ml.feature.StringIndexer
import java.math._
import scala.collection.mutable.ArrayBuffer
/**
 * 基于ID3算法选择最优特征---统计学习方法
 */
object ID3 {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setMaster("local").setAppName("ML")
    val sc=new SparkContext(conf)
    val sqlcontext=new SQLContext(sc)
    import sqlcontext.implicits._
    val sampleData=Array(Array("1","青年","否","否","一般","否"),Array("2","青年","否","否","好","否"),Array("3","青年","是","否","好","是"),
                   Array("4","青年","是","是","一般","是"),Array("5","青年","否","否","一般","否"),Array("6","中年","否","否","一般","否"),
                   Array("7","中年","否","否","好","否"),Array("8","中年","是","是","好","是"),Array("9","中年","否","是","非常好","是"),
                   Array("10","中年","否","是","非常好","是"),Array("11","老年","否","是","非常好","是"),Array("12","老年","否","是","好","是"),
                   Array("13","老年","是","否","好","是"),Array("14","老年","是","否","非常好","是"),Array("15","老年","否","否","一般","否"))
    
    val newData=sc.parallelize(sampleData).map { x =>
      val age=x(1)
      val work=x(2)
      val house=x(3)
      val credit=x(4)
      val label=x(5)
      (age,work,house,credit,label)  
    }.persist(StorageLevel.MEMORY_ONLY_SER)
    val DF=newData.toDF("age","isWork","isHouse","credit","label").persist(StorageLevel.MEMORY_ONLY_SER)
    val features=DF.columns
      
    //计算数据集D的熵
    val totalRecord=newData.count()
    val labels=newData.map(x=>(x._5,1)).reduceByKey(_+_).collect()
  
    var Hd=0.0
    for(lab<-labels){
      val labelcount=lab._2.toDouble
      val pi=labelcount/totalRecord
      Hd+= -1.0*((pi)*Math.log(pi)/Math.log(2))
    }
   
   //计算特征A对数据集的经验条件熵
   val Hda=ArrayBuffer[Double]()
    for(feature<-features){
      var Hdik=0.0
      if(!"label".equals(feature)){
        //DI表示特征A对应的信息
        val DI=DF.groupBy(feature).count()
        //lab表示特征A所有可能得取值
        val Lab=ArrayBuffer[String]()
        val Di=ArrayBuffer[Int]()
        DI.collect().map { Row =>  
          Lab +=Row.getString(Row.fieldIndex(feature))
          Di +=Row.getLong(Row.fieldIndex("count")).toInt
        }    
        //获取Dik信息
        val Dik=ArrayBuffer[(Int,Int)]()
        for(lab<-Lab){
          var i=0
          val str=s"$feature = " + s"'$lab'"
          println("str:"+str)
          val newDF=DF.where(str).groupBy("label").count()
          val df=newDF.rdd.map { Row => Row.getLong(Row.fieldIndex("count")).toInt}.collect()
          if(newDF.count().toInt ==2)  Dik.append((df(0),df(1))) else Dik.append((df(0),0))
        }
        //计算每个label的条件熵
        for(i<-Di){
          val newDik=Dik.take(1)
          Dik.remove(0,1)
          for(j<-newDik){
            if(j._2 ==0){
              val pi=j._1.toDouble/i
              Hdik += i.toDouble/totalRecord*(-1.0)*(pi)*Math.log(pi)/Math.log(2)
            }else{
              val pi1=j._1.toDouble/i
              val pi2=j._2.toDouble/i
               Hdik += i.toDouble/totalRecord*(-1.0)*(pi1)*Math.log(pi1)/Math.log(2) + i.toDouble/totalRecord*(-1.0)*(pi2)*Math.log(pi2)/Math.log(2) 
            }
          }
        }
        Hda.append(Hdik)
      }
    }
   //Gda表示信息增益,选取信息增益最大值作为最优特征。
   val Gda=ArrayBuffer[(String,Double)]()
   for(i<-0 until Hda.length){
     val hda=Hda(i)
     Gda.append((features(i),(Hd-hda)))
   }
   Gda.foreach { x => println(x) } 
  }
}
实验结果:
(age,0.08300749985576883)
(isWork,0.3236501981515564)
(isHouse,0.419973094021975)
(credit,0.3629895625370855)
机器学习算法之----Decision Tree Classification Decision Tree Classification 决策树以树结构的形式构建分类或回归模型。它将数据集分解为越来越小的子集,同时逐步开发相关的决策树。最终结果是具有决策节点和叶节点的树。决策节点(例如,Outlook)具有两个或更多个分支(例如,Sunny,Overcast和Rainy)。叶节点(例如,Play)表示分类或决定。树中最顶层的决策节点,对应于称为根节点的最佳预测器。决策树可以处... 阅读详情

相关推荐

DecisionTree决策树数据挖掘算法的实现(Java)

DecisionTree数据挖掘算法的实现(Java)

决策树算法 java_决策树算法原理及JAVA实现(ID3)

0 引言决策树的目的在于构造一颗树像下面这样的树。图1图21. 如何构造呢?1.1 参考资料。本例以图2为例,并参考了以下资料。写的东西非常经典。(3)机器学习(Tom.Mitchell著) 第三章 决策树,里面详细介绍了信息增益的计算,和熵的计算。建议大家参考1.2 数据集(训练数据集)outlooktemperaturehumiditywindyplaysunnyhothighFALSEn...

weixin_39677203的博客 1112

决策树,decision tree java源码

本代码是用java写的实现了决策树的功能,对机器学习同学可以下载看看。

ID3 Decision Tree Algorithm

介绍一下ID3 决策树算法 变量介绍对于一个多分类问题我们通常将数据集$D$分为训练集$D_{train}$和测试集$D_{test}$。对于数据集$D$上每个数据$d$都有$k$个属性${a_1,a_2,…,a_k}$,每个属性都有一个明确的输出$output$,全部分类数的个数计做$y$。 生成决策树想要生成决策树,我们必须知...

Vaskka的博客 670

ACPWorkbench_for_BP10

ADC支持9种采样率:8000Hz、11025Hz、12000Hz、16000Hz、22050Hz、24000Hz、32000Hz、44100Hz 以及 48000Hz。选择5种MCLK源时, 模块内部的MCLK源无效。I2S 采样率支持:8K,11.025K,12K,16K, 22.05K, 24K, 32K, 44.1K, 48K, 88.2K, 96K, 176.4K 和 192K。DAC采样率支持:8K,11.025K,12K,16K,22.05K, 24K, 32K, 44.1K和48K。

dddds222_的博客 4566

移动端抓包实战指南:从HTTPS解密到QUIC协议与证书绑定破解

HTTPS作为保障网络通信安全的核心协议,其工作原理基于TLS/SSL加密与证书信任链验证。在移动应用开发与测试中,抓包是调试接口、分析性能、排查问题的关键技术手段。然而,随着移动端安全性的提升,传统的代理抓包方法常因证书绑定、HTTP/3/QUIC协议等挑战而失效。这要求开发者掌握分层诊断思维,协同使用代理工具、协议分析工具及底层流量捕获工具。例如,面对证书绑定导致的流量不可见,需借助Wireshark进行协议层分析;针对基于UDP的QUIC协议,则需使用支持该协议的抓包工具或临时禁用特性。本文聚焦移动端

weixin_27722377的博客 299

决策树算法 decision tree algorithm(ID3 and CART)

决策树是一种基本的分类与回归方法,从分类来说,svm也用于分类,我们为什么要用决策树呢? a. 决策树一般是模拟人类的行为,数据和算法更便于理解 b. 决策树不是黑盒,能让你看清他是怎么工作和解释数据的 下面是关于是否提供贷款给个人的一个决策树,简单明了 为了得到这课决策树,我们的训练数据类似下面的表格,只列了一点,需要更多数据完成训练: 现在的关键问题在于如何选取每一层的节点,原则在于尽...

weixin_43909872的博客 1857

StarRocks FE启动异常

服务器断电,StarRocks FE 启动失败。

qq_15138049的博客 1114

【ML1】决策树算法decision tree(ID3)理论详解及实战

首先我们要深入了解决策树算法的每一个步骤,最基本的是ID3算法。以下这几个博客介绍的很详细,一定要推导 官网地址: https://scikit-learn.org/stable/modules/tree.html 经过上面重要的阶段,接下来进行简要总结, 一、理论讲解 0. 机器学习中分类和预测算法的评估: 准确率 速度 强壮行 可规模性 可解释性 1. 什么是决策树/判定树(...

kk的博客 1646

DPARSF高级版 vs 基础版怎么选?没有T1数据也能做fMRI分析吗?

本文深度对比了DPARSF高级版与基础版在fMRI分析中的核心差异与适用场景,特别针对无T1数据的情况提供了实战解决方案。高级版依赖T1像实现高精度配准,适合需要精确解剖定位的研究;基础版则无需T1数据,适用于功能连接等相对空间要求不高的分析。文章还提供了版本选择决策树和常见问题解决方案,帮助研究者根据实际需求做出最优选择。

weixin_42526087的博客 132

【图像超分】论文精读:Residual Dense Network for Image Super-Resolution(RDN)

一个非常深的卷积神经网络 (CNN) 最近在图像分类 (SR) 方面取得了巨大成功,并提供了分层特征。然而,大多数基于深度 CNN 的 SR 模型没有充分利用原始低分辨率 (LR) 图像中的层次特征,从而实现相对较低的性能。在本文中,我们提出了一种新的残差密集网络(RDN)来解决图像SR中的这个问题。我们充分利用所有卷积层的分层特征。具体来说,我们提出了残差密集块(RDB)通过密集连接的卷积层提取丰富的局部特征。RDB 进一步允许将前一个 RDB 的状态与当前 RDB 的所有层直接连接,从而产生连续的内存

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7259

决策树 Decision Tree

决策树系统介绍: https://blog.youkuaiyun.com/jiaoyangwm/article/details/79525237 决策树介绍: https://blog.youkuaiyun.com/zhao_crystal/article/details/81810483 3.2.3 ID3、C4.5、CART的区别 这三个是非常著名的决策树算法。简单粗暴来说,ID3 使用信息增益作为选择特征的准则;C...

G1011的博客 277

国科大学习资料--遥感原理集图像处理(尤红建)--2019年期末考试

国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 ================================================================== ================================================================== ==============

无名何许人的博客 1471

机器学习算法原理系列篇13: 决策树和决策树不同算法区别 (decision tree)

决策树算法,或者统称Classification And Regression Tree (CART),是在数据挖掘中常用的机器学习算法。决策树也是一种非常直观形象和易于理解的算法,总的来说是通过数学方法不断区分数据的迭代方法。决策树是一种非参数的监督学习方法,因为每一步的决策算法都是基于所有数据。决策树算法也是许多更加复杂的基础算法的基础,理解决策树算法有助于理解其他更加复杂的算法。...

《人工智能原理与实践》作者 3453

【TIDB】TiDB认证考试PTCA 练习题 题库

TiDB认证考试PTCA 练习题 题库

DBA之路的博客 4721

CATIA 3DEXPERIENCE R2019x VBA开发介绍

CATIA 3DEXPERIENCE R2019x VBA开发介绍 一、 什么是VBA? 【VBA的官方解释】 VBA(Visual Basic for Applications)是VisualBasic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是MicrosoftOffice软件。它也可说是一种应用程式视觉化的 Basic 脚本。 CATIA提供了多种二次开发的接口,其中包括自动化对象编程(Automation)和

WorkMan的博客 5063

rapidminer decision tree(决策树)手册

决策树是类似于节点集合的树,旨在创建有关与类的值隶属关系或数字目标值估计值的决策。每个节点表示一个特定属性的拆分规则。对于分类,此规则将属于不同类的值分开,对于回归,它将它们分开,以便以最佳方式减少所选参数条件的误差。...

m0_56134806的博客 2666

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

决策树(decision tree,待完善)

相关概念 决策树概念:决策数是一种树形结构,其中每一个内部节点表示在一个特征(属性)上的决策条件,每个分支表示一个决策输出,每个叶结点代表一种分类的类别。 决策树基本思想:**以信息熵为度量构造一颗熵值下降最快的树,树不断构建的过程也就是熵不断下降的过程。**而其中内部结点的具体特征(属性)选择取决于哪个特征在当前结点的熵下降最快。以此类推,到了叶结点处的熵值即为0。 决策树优点:——待定—— ...

zyd196504的博客 470

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

vue引入id3_使用决策树ID3算法,预测收入是否大于50k

算法比较简单,没有涉及剪枝和限制树深,懒得写.. 实现完算法在数据集上跑了一遍,发现数据集太大导致栈溢出,所以只能预测部分数据了,谁知道比较好的优化办法欢迎交流~数据:列描述信息代码:import pandas as pdimport numpy as npimport mathimport syscol_names=['age','workclass','fnlwgt','education',...

weixin_39968266的博客 620

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

决策树(Decision Tree)

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。

2401_86806544的博客 1057

决策树实例(Decision Tree)

决策树是一种机器学习的方法。决策树的生成算法有ID3, C4.5和C5.0等。决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。 决策树是一种十分常用的分类方法,需要监管学习(有教师的Supervised Learning),监管学习就是给出一堆样本,每个样本都有一组属性和一个分类结果,也就是分类结果已知,那么...

weixin_43416958的博客 915

机器学习: 决策树(Decision Tree)

决策树(Decision Tree)作者:刘伟杰 日期:2015-11-27 参考: [1]《统计学习方法》 李航 2012年3月第一版 [2]《机器学习实战》 Peter Harrington 1. 理论 概述:决策树的内部节点表示一个特征或属性,叶子节点表示一个类别。输入一个新样本,从根节点开始按照节点说示的特征划分,直到划分到叶子节点,该叶子节点即为类别。 关于熵的基础

Avalon 3806

sklearn.tree: Decision Trees

sklearn.tree scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归。 DecisionTreeClassifier 特征选择标准criterion 可以使用"gini"或者"entropy",前者代表基尼系数,后者代表信息增益。 一般说使用默认的基尼系数"gini"就可以了,即CART算法。除非你更喜欢类似ID3, C4.5的...

kakak_的博客 430

决策树算法全解析:从ID3原理到Python实现与剪枝优化

在机器学习领域,分类与预测是核心任务之一,而决策树作为一种基础且强大的算法,通过模拟人类决策过程来解决这些问题。其核心原理在于利用信息论中的熵与信息增益等概念,自动从数据中学习最优的划分规则,构建出树形结构的决策路径。这种方法的独特技术价值在于其卓越的可解释性,能够将复杂的预测过程转化为一系列清晰的“如果-那么”规则,使模型决策对业务人员透明易懂。在实际应用场景中,决策树广泛用于金融风控、客户分群、医疗诊断等领域,尤其适合需要模型解释性的业务环境。本文聚焦于决策树的经典ID3算法及其Python实现,深入探

weixin_33895475的博客 414

MSBD5003 Project2.0: Decision Tree Model

书接,我们构建了id3的决策树,能够按照我们所指定的k列生成最多k层的决策树。本文在扩展使用方法之外还试图加快了运行速度(未完全果)。然后就发生了神奇的一幕:......所有的预测结果都无一例外的是同一个,原因可能是因为分的还是太粗糙了,两条指标最多能分出M(第一条指标取值数量)*N(第二...)类,但这几类中可能都是Not_Canceled占比大,所以预测结果就肯定全都是Not_Canceled了。确实是无论哪种情况下Not_Canceled的都更多,这棵树构造的没问题。

TwjnbcT的博客 170

《机器学习实战》—Decision Tree

机器学习实战—Decision Tree(一) 问题描述通过决策树来预测患者需要佩戴何种隐形眼镜,决策树使用age,prescript,astigmatic,tearRate这四个数据来进行分类。数据集包含患者眼部状况的观察条件以及医生推荐的隐形眼镜类型。隐形眼镜类型包括硬材质,软材质以及不适合佩戴隐形眼镜。(二)数据准备与预处理隐形眼镜数据集在决策树中是非常著名的数据集。我们从书中配套网站中下载...

anzhi的博客 349
上一篇: 算法小白的第一次尝试---朴素贝叶斯
下一篇: Spark性能优化--基础篇
小糖宝
博客等级 码龄9年 47粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值