当前位置: 首页 > article >正文

大数据-274 Spark MLib - 基础介绍 机器学习算法 剪枝 后剪枝 ID3 C4.5 CART

点一下关注吧!!!非常感谢!!持续更新!!!

大模型篇章已经开始!

  • 目前已经更新到了第 22 篇:大语言模型 22 - MCP 自动操作 Figma+Cursor 自动设计原型

Java篇开始了!

  • MyBatis 更新完毕
  • 目前开始更新 Spring,一起深入浅出!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(已更完)
  • DataX(已更完)
  • Tez(已更完)
  • 数据挖掘(已更完)
  • Prometheus(已更完)
  • Grafana(已更完)
  • 离线数仓(已更完)
  • 实时数仓(正在更新…)
  • Spark MLib (正在更新…)

在这里插入图片描述

预剪枝和后剪枝

决策树对训练集有很好的分类能力,但是对于未知的测试集未必能有很好的分类能力,导致模型的泛化能力差,可能发生过拟合的情况,为了防止过拟合的情况出现,可以对决策树进行剪枝,剪枝分为预剪枝和后剪枝。

预剪枝

预剪枝就是在构建决策树的时候提前停止,比如指定树的深度最大为3,那么训练出来的决策树的高度就是3,预剪枝主要是建立某些规则限制决策树的生长,降低了过拟合的风险,降低了建树的时间,但是有可能带来欠拟合的问题。

后剪枝

后剪枝是一种全局的优化方法,在决策树构建好之后,然后才开始进行剪枝。后剪枝的过程就是删除一些子树,这个叶子节点的标识类别通过大多数原则来确定,即属于这个叶子节点下大多数样本所属的类别就是该叶子节点的标识。
选择减掉哪些子树时,可以计算没有减掉子树之前的误差和减掉子树之后的误差,如果相差不大,可以将子树减掉。
一般使用后剪枝得到的结果比较好。

算法总结

在这里插入图片描述

  • 分裂标准(Split Criterion):选择划分属性与划分点
  • 树生成(Growing):递归地对子集继续分裂
  • 剪枝(Pruning):降低过拟合:预剪枝 / 事后剪枝
  • 叶节点预测:分类树:投票 / 概率;回归树:均值 / 中位数

ID3、C4.5、CART 的区别主要体现在 分裂标准、支持的属性类型、树结构与剪枝方法。

ID3

存在的缺点:
● ID3 算法在选择根节点和各内部节点中的分支属性时,采用信息增益作为评价标准。信息增益的缺点是倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息
● ID3 算法只能对描述属性为离散型属性的数据集构造决策树

核心思想

信息增益 (Information Gain):选择能最大化熵下降(信息增益)的属性来分裂,仅支持 离散属性;连续属性需先离散化。
请添加图片描述

算法流程

  • 计算当前数据集 D 的熵 H(D)
  • 对每个属性 a 计算 Gain(D,a)
  • 选 Gain 最大者分裂,对子集递归生成子树
  • 当属性耗尽或样本纯度足够时停止

C4.5

那为什么 C4.5 好呢?
● 用信息增益率来选择属性
● 可以处理连续数值型属性
● 采用了一种后剪枝的方法
● 对于缺失值的处理

优点:
● 产生的分类规则易于理解,准确率较高

缺点:
● 在构造数的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效
● 只适合与能够驻留在内存的数据集,当训练集大得无法再内存中时则程序无法运行

CART

CART算法相比C4.5算法的分类方法,采用了简化的二叉树模型,同时特征选择采用了近似的基尼系数来简化计算。

流程要点

  • 对每个特征枚举所有切分点 → 计算基尼下降量 / 均方误差下降量
  • 选最大下降量的「特征 + 切分点」做二分
  • 直到叶节点样本少于阈值或纯度满足停止准则
  • 代价复杂度剪枝得到最终子树

决策树案例

package icu.wzk.logicimport org.apache.spark.mllib.tree.DecisionTree
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.{SparkConf, SparkContext}object LogicTest2 {def main(args: Array[String]): Unit = {val conf = new SparkConf().setMaster("local").setAppName("dt")val sc = new SparkContext(conf)sc.setLogLevel("warn")//读取数据集val labeledPointData = MLUtils.loadLibSVMFile(sc, "./data/dt.data")val trainTestData = labeledPointData.randomSplit(Array(0.8, 0.2), seed = 1)val trainData = trainTestData(0)val testData = trainTestData(1)//训练模型val categoriFeatureMap = Map[Int, Int](0 -> 4, 1 -> 4, 2 -> 3, 3 -> 3)val model = DecisionTree.trainClassifier(trainData, 2,categoriFeatureMap, "entropy", 3, 32)//预测val testRes = testData.map(data => {(model.predict(data.features), data.label)})testRes.take(10).foreach(println(_))//评价val errorRate = testRes.filter(x => x._1 != x._2).count().toDouble /testData.count()println("错误率:" + errorRate)//if-else展示println(model.toDebugString)sc.stop()}
}
http://www.lryc.cn/news/2395416.html

相关文章:

  • 力扣面试150题--二叉树的锯齿形层序遍历
  • 如何在 CentOS / RHEL 上修改 MySQL 默认数据目录 ?
  • 网页前端开发(基础进阶2)
  • 简历制作要精而不简
  • SPA-RL:通过Stepwise Progress Attribution训练LLM智能体
  • 【深度学习】9. CNN性能提升-轻量化模型专辑:SqueezeNet / MobileNet / ShuffleNet / EfficientNet
  • Relational Algebra(数据库关系代数)
  • 【C/C++】面试常考题目
  • Chorme如何对于youtube视频进行画中画背景播放?
  • 017搜索之深度优先搜索——算法备赛
  • 从单机到集群,再到分布式,再到微服务
  • 关于ios点击分享自动复制到粘贴板的问题
  • Hive的JOIN操作如何优化?
  • React Native 实现抖音式图片滑动切换浏览组件-媲美抖音体验的滑动式流畅预览组件
  • 睿抗机器人开发者大赛CAIP-编程技能赛-历年真题 解题报告汇总 | 珂学家
  • 【c++】【数据结构】AVL树
  • 【原神 × 插入排序】刷圣遗物也讲算法:圣遗物评分系统背后的排序逻辑你真的懂吗?
  • ORB-SLAM2学习笔记:ExtractorNode::DivideNode和ORBextractor::DistributeOctTree函数详解
  • nt!MmMapViewInSystemCache函数分析PointerPte的填充
  • 3D Tiles高级样式设置与条件渲染(3)
  • 通义灵码深度实战测评:从零构建智能家居控制中枢,体验AI编程新范式
  • 头歌之动手学人工智能-Pytorch 之优化
  • 基于谷歌ADK的智能客服系统简介
  • (一)视觉——工业相机(以海康威视为例)
  • DAY 36 超大力王爱学Python
  • 基于React + TypeScript构建高度可定制的QR码生成器
  • DeepSeek进阶教程:实时数据分析与自动化决策系统
  • visual studio 2022 初学流程
  • SRD-12VDC-SL-C 继电器‌接线图解
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的企业组织生态化重构研究