决策树 算法 实例 scala

Spark决策树算法预测实现(Scala语言) 1. 准备数据 使用网上的Covtype 数据集,包含csv格式压缩数据文件 covtype.data.gz; 解压缩: gzip covtype.data.gz -d 数据集记录科罗拉多州不同地块的森林植被类型。 Spark MLlib将特征抽象为 LabeledPoint; 由包含多个特征值的Spark MLlib Vector 和一个 label 的目标值组成。目标为double 类型; ... 阅读详情
young   myope   no  reduced no lenses
young   myope   no  normal  soft
young   myope   yes reduced no lenses
young   myope   yes normal  hard
young   hyper   no  reduced no lenses
young   hyper   no  normal  soft
young   hyper   yes reduced no lenses
young   hyper   yes normal  hard
pre myope   no  reduced no lenses
pre myope   no  normal  soft
pre myope   yes reduced no lenses
pre myope   yes normal  hard
pre hyper   no  reduced no lenses
pre hyper   no  normal  soft
pre hyper   yes reduced no lenses
pre hyper   yes normal  no lenses
presbyopic  myope   no  reduced no lenses
presbyopic  myope   no  normal  no lenses
presbyopic  myope   yes reduced no lenses
presbyopic  myope   yes normal  hard
presbyopic  hyper   no  reduced no lenses
presbyopic  hyper   no  normal  soft
presbyopic  hyper   yes reduced no lenses
presbyopic  hyper   yes normal  no lenses
package mlia.trees

import breeze.numerics._
import scala.annotation.tailrec

case class Tree(nodes: Array[Node] = Array.empty) {

  override def toString = s"Tree[${nodes.map(_.toString).mkString(",")}]"

  def <<-(node: Node): Tree = Tree(nodes :+ node)

  def classify(testVec: Vector[Int], featLabels: Array[String], cur: Array[Node] = nodes): String = search(testVec, featLabels, nodes)

  @tailrec
  private def search(testVec: Vector[Int], featLabels: Array[String], cur: Array[Node]): String = {
    cur.find { node =>
      node.isLeaf || testVec(featLabels.indexOf(node.key)).toString == node.value.toString
    } match {
      case None => "Fail to classify."
      case Some(node) if node.isLeaf => node.value.toString
      case Some(node) => search(testVec, featLabels, node.children)
    }
  }
}

case class Node(key: String, value: Any, children: Array[Node] = Array.empty) {

  val isLeaf = children.isEmpty

  override def toString =
    if (children.isEmpty) s" -> $value[Leaf]" else s"{$key : $value ${children.map(_.toString).mkString(",")}}"
}

object Tree {

  case class Row(data: Array[Int], label: String)

  case class InformationGain(featureIdx: Int, infoGain: Double)

  def calcShannonEnt(dataSet: Array[Row]) = {

    val labelCounts = dataSet.foldLeft(Map.empty[String, Int]) { (map, row) =>
      map + (row.label -> (map.getOrElse(row.label, 0) + 1))
    }
    val numEntries = dataSet.size
    labelCounts.foldLeft(0.0) { (state, count) =>
      val prob = labelCounts(count._1).toDouble / numEntries
      state - prob * (log(prob) / log(2))
    }
  }

  def splitDataSet(dataSet: Array[Row], axis: Int, value: Int) = dataSet.filter(_.data(axis) == value)

  def chooseBestFeatureToSplit(dataSet: Array[Row]) = {

    val numEntries = dataSet.size
    val numFeatures = dataSet.head.data.size
    val baseEntropy = calcShannonEnt(dataSet)

    (0 until numFeatures).foldLeft(InformationGain(-1, 0.0)) { (curBest, cur) =>
      val uniqueVals = dataSet.map(_.data(cur)).distinct
      val newEntropy = uniqueVals.foldLeft(0.0) { (ent, value) =>
        val subDataSet = splitDataSet(dataSet, cur, value)
        val prob = subDataSet.size / numEntries.toDouble
        ent + prob * calcShannonEnt(subDataSet)
      }
      val infoGain = baseEntropy - newEntropy
      if (infoGain > curBest.infoGain) InformationGain(cur, infoGain) else curBest
    }
  }

  def majorityCnt(classList: Array[String]): String =
    classList.foldLeft(Map.empty[String, Int]) { (state, x) =>
      state + (x -> (state.getOrElse(x, 0) + 1))
    }.toArray.sortBy(_._2).reverse.head._1

  private def remove(num: Int, list: Array[String]) = list diff Array(num)

  def apply(dataSet: Array[Row], labels: Array[String]): Tree = createTree(dataSet, labels)

  private def createTree(dataSet: Array[Row], labels: Array[String], cur: Tree = Tree(), value: Int = -1): Tree = {
    val classList = dataSet.map(_.label)
    if (classList.distinct.size == 1) cur <<- Node(value.toString, classList(0)) // all label is equal
    else if (dataSet.head.data.isEmpty) cur <<- Node(value.toString, majorityCnt(classList)) // no more feature
    else {
      val bestFeat = chooseBestFeatureToSplit(dataSet).featureIdx
      val subLabels = remove(bestFeat, labels)
      val uniqueFeatValues = dataSet.map(_.data(bestFeat)).distinct
      uniqueFeatValues.foldLeft(cur) { (state, value) =>
        val subTree = createTree(splitDataSet(dataSet, bestFeat, value), subLabels, cur, value)
        state <<- Node(labels(bestFeat), value.toString, subTree.nodes)
      }
    }
  }
}


MLlib回归算法(线性回归、决策树)实战演练--Spark学习(机器学习) 最近太忙,自己的机器学习进度耽误了两个星期,现在才把回归这一章看完。闲话不多说,本篇文章依旧是《Spark机器学习》中的内容。书上的代码全部是用python写的,但是由于我最近一直使用的是Scala,所以本篇博客使用的是scala,当然这样就没法像书中那样画图了。 第六章将的是回归算法,主要用到的是线性回归与决策树算法,老规矩这里不讲原理(主要是自己讲不清楚),想知道原理的建议参考Andrew N 阅读详情

相关推荐

ID3算法scala语言实现

完整的ID3决策树算法,采用了scala语言来实现,代码完整。

《机器学习实战(Scala实现)》(三)——决策树

【代码】《机器学习实战(Scala实现)》(三)——决策树。

5473

STM32巡线小车PID调参实战:从五路灰度传感器数据到稳定运行的避坑指南

本文详细介绍了STM32巡线小车的PID调参实战,从五路灰度传感器数据处理到PID参数优化,提供了系统化的调试方法和常见问题解决方案。通过加权平均法计算偏移量,逐步调整比例、积分、微分参数,实现小车稳定巡线。文章还涵盖了定时器配置、控制周期优化及高级调试技巧,帮助开发者避开常见陷阱,提升巡线性能。

weixin_42570484的博客 194

机器学习-决策树算法

机器学习的决策树算法简单介绍,内容涉及决策树的概念,熵概念,决策树剪枝,以及相关算法的模拟实现和库函数的实现,详细的代码步骤和结果分析,如有错误,欢迎留言!

L的博客 2228

国产机载操作系统天脉ACoreOS实战:从零搭建开发环境到应用移植

本文详细介绍了国产机载操作系统天脉ACoreOS的实战开发流程,从核心特性解析到开发环境搭建,再到VxWorks应用移植策略。重点阐述了其符合ARINC 653标准的时空分区架构如何保障高可靠性,并提供了从零创建分区工程、重构通信与任务代码的具体步骤,为开发者向这一国产化平台迁移提供了实用指南。

flower的专栏 634

ESP32-S3开发环境避坑指南:VS Code+ESP-IDF离线安装全流程(附国内镜像加速)

本文提供了一份详细的ESP32-S3开发环境离线安装指南,重点解决网络依赖问题。通过整合国内镜像加速,手把手教你完成VS Code、ESP-IDF框架、工具链及Python依赖的本地化部署,实现稳定、可重复的开发环境搭建,大幅提升IoT开发效率。

peach的博客 962

决策树代码共享

import java.util.HashMap; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.Function; ...

m0_53291740的博客 151

Windows 下安装 ros2 的超详细教程

Windows11 ROS安装

2401_83363439的博客 3322

决策树

下面给大家介绍一个最经典的监督学习算法:决策树 决策树,就是我们之前接触过的判断树,和流程图也有点类似。决策树虽然实现起来麻烦一点,但是理解起来很容易,而且在很多场景下都合适。 决策树的生成,主要是根节点的选取和叶子节点的确定。根节点主要选择信息增益最大的那个属性作为当前树的根节点。当达到停止条件的时候,要将当前节点作为叶子节点。合适的根节点和停止条件,可以防止树过大和数据的过度拟合。同时也有...

wtt561111的专栏 1807

【信息系统项目管理师】第18章:项目绩效域详解

(3)度量绩效域与规划绩效域、项目工作绩效域和交付绩效域的相互作用:1规划构成了 交付和规划比较的基础;项目绩效域共同构成了一个统一的整体,作为一个完整系统,在项目生命周期过程中运行,系统内的每个绩效域相互作用、相互关联和相互依赖,并协调一致、共同运作,支撑项目目标和价值 的实现。(5)开发方法和生命周期绩效域与其他绩效域的相互作用:开发方法和生命周期绩效域与干系人绩效域、规划绩效域、不确定性绩效域、交付绩效域、项目工作绩效域和团队绩效域相互作用。(2)项目工作绩效域的绩效要点包括:项目过程;

数据知道的博客 7806

ISO13849功能安全从入门到精通(3):安全功能及其对降低风险的贡献4

例如,如果机器必须在有限速度下运行时进行设置,那么在低加速度值下进行设置时,参数P1将是正确的选择:随着危险缓慢出现并给予足够的运动自由,操作员将能够移出危险区域。例如,在无故障的条件下,在操作者的手的方向移动的滚子不能陷住它。在所有其他情况下,F1是正确的选择,前提是危险暴露的持续时间不超过机器总操作时间的1/20。需求来源于必要的风险降低。由于这些考虑而降低的PLr在任何情况下都不得低于通过比较方式考虑的机器的PLr,因为并不能从事故发生率低和严重程度低得出实施的安全功能提供的安全水平高于要求。

wdconan001的博客 837

决策树回归算法原理及Spark MLlib调用实例(Scala/Java/python)

决策树回归 算法介绍:         决策树以及其集成算法是机器学习分类和回归问题中非常流行的算法。因其易解释性、可处理类别特征、易扩展到多分类问题、不需特征缩放等性质被广泛使用。树集成算法如随机森林以及boosting算法几乎是解决分类和回归问题中表现最优的算法。        决策树是一个贪心算法递归地将特征空间划分为两个部分,在同一个叶子节点的数据最后会拥有同样的标签。每次划分通过贪

liulingyuan6的博客 3352

使用CubeMX配置STM32H7的FreeRTOS

本文将介绍如何使用CubeMX配置STM32H7的FreeRTOS,并提供相应的源代码示例。通过使用CubeMX,你可以轻松地配置FreeRTOS和系统资源,并生成相应的初始化代码和配置文件。在"FreeRTOS"选项卡的"Tasks"部分,可以配置系统中的任务。首先,打开CubeMX软件。在"FreeRTOS"选项卡的"Resources"部分,你可以配置FreeRTOS使用的资源,例如,堆内存和信号量。例如,我们可以创建两个简单的任务,一个任务将在循环中切换LED的状态,另一个任务将通过串口打印消息。

JeeVue的博客 712

决策树算法原理及Spark MLlib调用实例(Scala/Java/python)

决策树 算法介绍:         决策树以及其集成算法是机器学习分类和回归问题中非常流行的算法。因其易解释性、可处理类别特征、易扩展到多分类问题、不需特征缩放等性质被广泛使用。树集成算法如随机森林以及boosting算法几乎是解决分类和回归问题中表现最优的算法。        决策树是一个贪心算法递归地将特征空间划分为两个部分,在同一个叶子节点的数据最后会拥有同样的标签。每次划分通过贪心的

liulingyuan6的博客 7104

【电路设计】SERDES与pcie

明确通信接口需要达到什么样的数据速率、信号完整性以及系统中各个部件的互相作用。2.

数字人生 4568

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java mllib 算法_決策樹算法原理及Spark MLlib調用實例(Scala/Java/python)

決策樹算法介紹:決策樹以及其集成算法是機器學習分類和回歸問題中非常流行的算法。因其易解釋性、可處理類別特征、易擴展到多分類問題、不需特征縮放等性質被廣泛使用。樹集成算法如隨機森林以及boosting算法幾乎是解決分類和回歸問題中表現最優的算法。決策樹是一個貪心算法遞歸地將特征空間划分為兩個部分,在同一個葉子節點的數據最后會擁有同樣的標簽。每次划分通過貪心的以獲得最大信息增益為目的,從可選擇的分裂方...

weixin_42613360的博客 204

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

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

java mllib 算法_决策树回归算法介绍及Spark MLlib调用实例(Scala/Java/python)

决策树回归算法介绍:决策树以及其集成算法是机器学习分类和回归问题中非常流行的算法。因其易解释性、可处理类别特征、易扩展到多分类问题、不需特征缩放等性质被广泛使用。树集成算法如随机森林以及boosting算法几乎是解决分类和回归问题中表现最优的算法。决策树是一个贪心算法递归地将特征空间划分为两个部分,在同一个叶子节点的数据最后会拥有同样的标签。每次划分通过贪心的以获得最大信息增益为目的,从可选择的分...

weixin_39952190的博客 359

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

决策树分类问题 scala代码实现

Spark2.0 决策树(C4.5) scala代码实现 maven依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.1.1</version> </dependency> <dependency> <gro

PKQ1023的博客 897

使用决策树算法预测森林植被

Spark MLlib 机器学习—决策树算法用于预测森林植被 一、实验介绍 1.1 内容介绍 决策树算法就是通过对已有明确结果的历史数据进行分析,寻找数据中的特征,并以此为依据对新产生的数据结果进行预测。决策树主要由下面三部分组成: 决策节点:每个决策节点表示一个待分类的数据类别或属性,其中最顶部的是根决策节点。分支:每一个分支都有一个新的决策节点。叶子节点:每个叶子节点表示一种结果。

oxuzhenyi的博客 6160

order-book-dynamics社区与支持:如何参与贡献与获取帮助的完整指南

order-book-dynamics是一个基于支持向量机建模高频限价订单簿动态的开源机器学习项目。这个强大的工具帮助金融研究人员和量化分析师更好地理解和预测金融市场的高频交易行为。无论您是金融领域的初学者还是经验丰富的开发者,参与这个开源项目都能让您深入了解机器学习在金融领域的应用。 ## 🤝 为什么参与order-book-dynamics社区? 参与order-book-dynamic

gitblog_00075的博客 986

Spark高级数据分析

第一章 大数据分析 1.数据科学面临的挑战 1)数据分析绝大部分工作是数据预处理包括清洗,处理,融合,挖掘以及其他操作,即使模型调优阶段,特征提取和选择上花费的时间比选择和实现算法时间更多 2)迭代与数据科学紧密相关,比如模型优化时采用的随机梯度下降和最大似然估计,构建模型时需要选择正确特征,挑选合适算法,运行显著性测试,找到合适超参数 3)构建完表现卓越的模型不等于大功告成,模型需要定期

MrGeroge的博客 4249

推荐项目:Brushfire - 分布式决策树集成模型框架

推荐项目:Brushfire - 分布式决策树集成模型框架 项目介绍 Brushfire 是一个使用 Scala 编写的分布式监督学习框架,专注于构建决策树集成模型。该框架借鉴了谷歌的 PLANET 算法,并通过 Scala 的类型参数化和 Algebird 的聚合抽象进行了扩展和通用化。 项目技术分析 Brushfire 支持以下功能: 二元和多类别分类器 数值特征(离散和连续) 类别特征(...

gitblog_00005的博客 911

随机森林回归(Random Forest)算法原理及Spark MLlib调用实例(Scala/Java/python)

随机森林回归 算法介绍:        随机森林是决策树的集成算法。随机森林包含多个决策树来降低过拟合的风险。随机森林同样具有易解释性、可处理类别特征、易扩展到多分类问题、不需特征缩放等性质。        随机森林分别训练一系列的决策树,所以训练过程是并行的。因算法中加入随机过程,所以每个决策树又有少量区别。通过合并每个树的预测结果来减少预测的方差,提高在测试集上的性能表现。      

liulingyuan6的博客 1万+

【Scala】Scala学习资料

Scala学习资料 java 树形 分类器_百度搜索决策树分类器-Java实现 - 优快云博客KNN分类器-Java实现 - 优快云博客学习:java设计模式—分类 - 飞翔荷兰人 - 博客园SparkMLlib分类算法之决策树学习 - DamonDr - 博客园【Spark Mllib】决策树,随机森林——预测森林植被类型 - 简书Spark入门实战系列--8.Spark MLlib...

weixin_30485799的博客 91

Scala 和 Spark 大数据分析(六)

贝叶斯推理是一种基于贝叶斯定理的统计方法。它用于更新假设的概率(作为强有力的统计证据),以便统计模型能够不断更新,朝着更准确的学习方向发展。换句话说,所有类型的不确定性都以统计概率的形式在贝叶斯推理方法中揭示出来。这是理论和数学统计中的一个重要技术。我们将在后续章节中广泛讨论贝叶斯定理。此外,贝叶斯更新在数据集序列的增量学习和动态分析中占据主导地位。例如,时间序列分析、生物医学数据分析中的基因组测序、科学、工程、哲学和法律等领域广泛应用贝叶斯推理。从哲学视角和决策理论看,贝叶斯推理与预测概率密切相关。

龙哥盟 1331
上一篇: 决策树 算法 实例
下一篇: 线性回归 算法 理论
mllhxn
博客等级 码龄14年 116粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值