Spark-机器学习(8)分类学习之随机森林

在之前的文章中,我们学习了分类学习之支持向量机决策树支持向量机,并带来简单案例,学习用法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

Spark-机器学习(7)分类学习之决策树-CSDN博客文章浏览阅读1.3k次,点赞29次,收藏26次。今天的文章,我们来学习分类学习之决策树,并带来简单案例,学习用法。希望大家能有所收获。同时,希望我的文章能帮助到每一个正在学习的你们。也欢迎大家来我的文章下交流讨论,共同进步。https://blog.csdn.net/qq_49513817/article/details/138294454今天的文章,我们来学习分类学习之随机森林,并带来简单案例,学习用法。希望大家能有所收获。

目录

 一、随机森林

什么是随机森林?

spark随机森林

 二、示例代码 

完整代码 

方法解析

代码效果  

代码输出 

拓展-spark随机森林


 一、随机森林

随机森林模型

什么是随机森林?

随机森林(Random Forest) 是一种基于决策树的集成学习算法,由多棵决策树组成,且每棵树的建立都依赖于一个独立抽取的样本集。在分类问题中,随机森林通过集成学习的思想将多棵树(决策树)的预测结果进行汇总,从而得到最终的分类结果;在回归问题中,随机森林的输出则是所有决策树输出的平均值。

随机森林的优点:

  • 高准确性:由于集成了多棵决策树,其预测结果通常比单棵决策树更准确。
  • 鲁棒性:对于噪声和异常值有较好的容忍度,不容易过拟合。
  • 易于并行化:由于每棵树的生成是独立的,因此可以很容易地进行并行化处理,提高计算效率。
  • 能评估特征的重要性:通过计算特征在所有树中的平均不纯度减少量,可以评估每个特征在预测中的重要性。

随机森林的大致构建流程:

  • 从原始数据集中随机抽取n个样本(有放回地抽样),作为训练集用于构建决策树。
  • 当每个样本有m个特征时,随机从这m个特征中选择k个特征(k<m),然后利用这些特征来构建最佳的分裂点。这个过程在整棵树的每个节点上都会重复。
  • 重复上述两个步骤,构建多棵决策树,形成随机森林。
  • 对于分类问题,每棵决策树都输出一个分类结果,然后采用多数投票的方式决定最终的分类结果;对于回归问题,则输出所有决策树的平均值。

spark随机森林

Spark随机森林是Apache Spark中一种基于随机森林算法的机器学习模型,它利用Spark的分布式计算能力对大规模数据集进行高效处理。Spark随机森林模型由多棵决策树组成,每棵决策树都是基于随机抽样的训练子集和随机选择的特征子集构建的。

Spark随机森林的工作原理大致如下:

  • 数据准备:将输入的训练数据划分为若干个随机子样本。对于每个子样本,从原始数据集中有放回地采样相同数量的样本,形成一个新的训练集。同时,对于每个决策树,还会随机选择一部分特征用于构建树。
  • 决策树的构建:对于每个子样本和随机选择的特征,使用决策树算法(如ID3、C4.5或CART)构建一个决策树模型。决策树的构建过程包括选择最佳的特征进行节点划分、递归地构建子树,直到达到停止条件(如树的深度达到预设值)。
  • 集成学习:将所有构建好的决策树组合成随机森林模型。在分类问题中,每个决策树会根据样本的特征进行预测,并统计最终的类别投票结果。根据多数表决原则,选择票数最多的类别作为随机森林模型的最终预测结果。在回归问题中,则输出所有决策树的平均值作为预测结果。

 二、示例代码 

下面的示例代码的主要作用是训练一个随机森林分类模型 ,通过直接在程序中模拟数据来达到我们展示一个随机森林的过程,仅作为学习阶段的示例。在工作中,外部数据往往庞大而复杂,需要我们花费更长的时间来处理数据,清洗数据和优化模型。 

完整代码 

import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.classification.RandomForestClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.linalg.Vectors
object p8 {def main(args: Array[String]): Unit = {// 创建一个SparkSessionval spark = SparkSession.builder().appName("Peng0426.").master("local[*]") // 在本地模式下运行,使用所有可用的核心.getOrCreate()import spark.implicits._// 创建一个模拟的DataFrameval data = Seq((1.0, Vectors.dense(0.0, 1.1, 0.1)),(0.0, Vectors.dense(2.0, 1.0, -1.0)),(0.0, Vectors.dense(2.0, 1.3, 1.0)),(1.0, Vectors.dense(0.0, 1.2, -0.5)),(0.0, Vectors.dense(1.0, 1.0, -0.1)),(1.0, Vectors.dense(0.1, 0.1, -1.0))).toDF("label", "features")// 显示数据data.show()// 划分训练集和测试集(这里简单地将前4个样本作为训练集,后2个作为测试集)val Array(trainingData, testData) = data.randomSplit(Array(0.67, 0.33))// 训练随机森林模型val rf = new RandomForestClassifier().setLabelCol("label").setFeaturesCol("features") // 因为我们已经有数值特征,所以不需要VectorIndexer.setNumTrees(3) // 树的数量// 使用训练数据拟合模型val model = rf.fit(trainingData)// 对测试数据进行预测val predictions = model.transform(testData)// 显示预测结果predictions.select("label", "prediction", "features").show()// 计算测试准确率val evaluator = new MulticlassClassificationEvaluator().setLabelCol("label").setPredictionCol("prediction").setMetricName("accuracy")val accuracy = evaluator.evaluate(predictions)// 输出准确率println(s"Accuracy = $accuracy")}
}

方法解析

  • SparkSession:这是Spark SQL的入口点,用于初始化Spark应用。
  • RandomForestClassifier:这是Spark MLlib中的一个类,用于训练随机森林分类模型。
  • MulticlassClassificationEvaluator:这是Spark MLlib中的一个类,用于评估多分类问题的模型性能。
  • Vectors:这是Spark MLlib中用于表示特征向量的类。
  • DataFrame:Spark SQL中的核心概念,用于表示分布式的数据集。

代码效果  

  • SparkSession:这是Spark SQL的入口点,用于初始化Spark应用。
  • RandomForestClassifier:这是Spark MLlib中的一个类,用于训练随机森林分类模型。
  • MulticlassClassificationEvaluator:这是Spark MLlib中的一个类,用于评估多分类问题的模型性能。
  • Vectors:这是Spark MLlib中用于表示特征向量的类。
  • DataFrame:Spark SQL中的核心概念,用于表示分布式的数据集。

代码输出 

  • 模拟数据集的展示(data.show())。
  • 预测结果的展示(predictions.select("label", "prediction", "features").show())。
  • 模型的准确率(println(s"Accuracy = $accuracy"))。

运行代码查看输出

 

可以看到我们的数据集,预测结果和我们的准确率都输出成功。

应为我们的数据量小,数却又有3个,所以它的准确率为0.5也是没问题的,这个准确率并不算高。 

拓展-spark随机森林

方法描述例子
随机森林基于多个决策树的集成学习方法使用Spark MLlib中的RandomForestClassifier进行鸢尾花分类
决策树随机森林的基本构建单元单一决策树用于分类或回归
集成学习通过组合多个学习器来提高预测性能随机森林通过平均多个决策树的预测结果来提高准确性
特征重要性评估特征对模型预测的贡献程度计算每个特征在随机森林中的重要性得分
袋外误差使用未参与训练的数据评估模型性能袋外误差估计作为随机森林模型性能的度量
参数调优调整模型参数以优化性能调整树的数量、最大深度、特征子集大小等参数
并行化利用多核或多节点提高计算效率Spark利用分布式计算框架加速随机森林的训练和预测

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

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

相关文章

【论文阅读——基于拍卖的水平联邦学习后付款激励机制设计与声誉和贡献度测量】

1.原文名称 Auction-Based Ex-Post-Payment Incentive Mechanism Design for Horizontal Federated Learning with Reputation and Contribution Measurement 2.本文的贡献 我们提出了一种贡献度测量方法。我们建立了一个声誉系统。声誉易于下降&#xff0c;难以提高。结合声…

第6篇:创建Nios II工程之控制LED<一>

Q&#xff1a;还记得第1篇吗&#xff1f;设计简单的逻辑电路&#xff0c;控制DE2-115开发板上LED的亮与熄灭&#xff0c;一行Verilog HDL的assign赋值语句即可实现。本期开始创建Nios II工程&#xff0c;用C语言代码控制DE2-115开发板上的LED实现流水灯效果。 A&#xff1a;在…

Windows编译OpenCV及扩展模块

OpenCV官网只提供了OpenCV Windows 64位动态库且不包括扩展模块&#xff0c;如果需要32位动态库&#xff0c;或者需要扩展模块的功能&#xff0c;则需要下载源码进行编译。 1. 版本说明与下载地址 OpenCV下载 https://github.com/opencv/opencv/releases/tag/4.9.0 OpenCV扩展模…

企业选择内外网文件摆渡平台的常见三大误区

网络隔离技术现在已经广泛应用于企业安全管理中&#xff0c;企业使用逻辑隔离或物理隔离的方式将网络隔离为内外网进而隔绝外部有害网络攻击&#xff0c;保护内部重要数据资产&#xff0c;但网络隔离后企业仍存在数据交换的需求&#xff0c;此时就需要内外网文件摆渡平台来承担…

学习100个Unity Shader (16) --- 程序纹理简述

文章目录 理解参考 理解 程序纹理顾名思义&#xff0c;就是通过代码生成的纹理&#xff0c;然后传入材质&#xff0c;生成图像。 假设&#xff0c;给一个模型添加了材质&#xff0c;并赋予了一个shader。shader中有一个纹理属性叫_MainTex。 程序纹理简单来说就是&#xff0c;…

Mybatis 实现数据加密

Mybatis 实现数据加密 背景解决方案案例AesEncryptHandler使用 背景 在我们业务开发中会保存一些用户的敏感信息&#xff0c;比如&#xff1a;手机号、银行卡等信息&#xff0c;如果这些信息以明文的方式保存&#xff0c;那么是不安全的。假如&#xff1a;黑客黑进了数据库&am…

Python 点云体积计算(网格积分法)

点云体积计算 一、介绍二、代码示例三、结果展示一、介绍 网格积分法,是一种简单快速的估计点云体积的方法。其核心思想是将三维点云数据映射至二维平面上,随后将平面划分为多个规则格网。在每个格网内,统计点云数据的最高点与最低点之间的垂直距离,即高度差。接着,将高度…

人工智能_大模型044_模型微调004_随机梯度下降优化_常见损失计算算法_手写简单神经网络_实现手写体识别---人工智能工作笔记0179

然后对于,梯度下降,为了让训练的速度更好,更快的下降,又做了很多算法,可以看到 这里要知道Transformer中最常用的Adam 和 AdamW这两种算法. 当然,这些算法都是用于优化神经网络中的参数,以最小化损失函数。下面我会尽量以通俗易懂的方式解释它们的原理和适用场景。 1. **L-…

selenium设置元素隐藏和显示

常见元素隐藏情况 在HTML中&#xff0c;由于页面美化和用户交互的需求&#xff0c;元素隐藏的使用非常常见&#xff0c;比如下拉菜单、内容折叠、对话框以及上传文件框等。隐藏常见有以下几种表现形式&#xff1a; hidden&#xff1a;占据空间&#xff0c;无法点击 style"…

Java成员内部类全解析:从创建、使用到优缺点分析

什么是成员内部类&#xff1f; 在Java的开发中&#xff0c;我们有时会遇到一种特殊的类&#xff0c;它并不像平常的类那样独立存在&#xff0c;而是寄生在另一个类的内部&#xff0c;这就是我们今天要讲的成员内部类。 成员内部类&#xff0c;顾名思义&#xff0c;是作为另一…

自然语言处理 (NLP) 和文本分析

自然语言处理 (NLP) 和文本分析&#xff1a;NLP 在很多领域都有着广泛的应用&#xff0c;如智能助手、语言翻译、舆情分析等。热门问题包括情感分析、命名实体识别、文本生成等。 让我们一起来详细举例子的分析讲解一下自然语言处理&#xff08;NLP&#xff09;和文本分析的应用…

BiLSTM-KDE的双向长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab)

BiLSTM-KDE的双向长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09; 目录 BiLSTM-KDE的双向长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.BiLS…

windows驱动开发-I/O请求(三)

之前的两篇文章已经将I/O请求的使用说清楚了&#xff0c;接下来试着探索一下I/O请求的其它方面。 I/O请求原理 如果对IRP结构有印象的话&#xff0c;会发现IRP结构中有一个DeviceObject成员以及FileObject成员&#xff0c;这里已经隐含了IRP是如何传递的。 在DriverEntry中&…

JAVA面试专题-Redis

你在最近的项目中哪些场景使用了Redis 缓存 缓存穿透 缓存穿透&#xff1a;查询一个不存在的数据&#xff0c;mysql查询不到数据也不好直接写入缓存&#xff0c;导致每次请求都查数据库。 解决方案一&#xff1a;缓存空数据&#xff0c;即使查询返回的数据为空&#xff0c;也把…

MySQL 迁移到 Oracle 需要注意的问题

MySQL /Oracle 常见问题 1. VARCHAR/VARCHAR2/NVARCHAR 差异&#xff1a; MySQL 的 VARCHAR 是以字符为单位计算的&#xff0c;Oracle 的 VARCHAR 是 以字节为单位计算的&#xff0c;所以对中文的存储 Oracle 是 MySQL 的 2 倍 (GBK)和 3 倍(UTF8) 2. NULL 差异 A. MySQL…

微信小程序开发核心:样式,组件,布局,矢量图标

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【蓝桥杯2024真题】好数

试题C: 好数 时间限制: 1.0s 内存限制: 256.0MB 本题总分&#xff1a;10分 【问题描述】 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位&#xff09;上 的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位&#xff09;上的数…

MAC 本地搭建Dify环境

Dify 介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员&#xff0c;也能参与到 AI 应用的定义和数据运营过…

邦注科技模具监视器 模具CCD影像检测 电子眼代替人眼

在制造行业&#xff0c;很多公司在模具方面损失很大&#xff0c;由于不同模具的特殊性不规则形导致尽管采取很多模具保护措施却依然无法减少压模带来的损失。针对这一行业难点讯采科技自主研发的模具监视器利用先进的机器视觉技术代替人眼实时监控模具运行情况&#xff0c;智能…

Qt | QDialogButtonBox(按钮框)、QButtonGroup(按钮组)、QGroupBox(组框)

01、上节回顾 Qt | 标准、复选、单选、工具、命令按钮大全02、QDialogButtonBox 一、QDialogButtonBox 类(按钮框) 1、QDialogButtonBox 直接继承自 QWidget 类。很多程序都需要把按钮组织在一起,以呈现给用户作出一个选择,比如当关闭文件时,会弹出一个询问用户是否保存文…