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

news2024/10/7 11:21:05

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

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 = {
    // 创建一个SparkSession
    val spark = SparkSession
      .builder()
      .appName("Peng0426.")
      .master("local[*]") // 在本地模式下运行,使用所有可用的核心
      .getOrCreate()
    import spark.implicits._
    // 创建一个模拟的DataFrame
    val 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.coloradmin.cn/o/1633883.html

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

相关文章

工业交换机的封装与防尘防水设计

随着工业自动化程度的不断提升&#xff0c;工业交换机作为工业网络的核心设备之一&#xff0c;其稳定可靠的通信性能对于生产环境至关重要。而在恶劣的工业环境中&#xff0c;尘土、湿气等因素常常会对设备的稳定性和持久性造成挑战。因此&#xff0c;工业交换机的封装设计和防…

21 JavaScript 学习:一些误区和易错点

赋值运算符应用错误 在 JavaScript 中&#xff0c;赋值运算符&#xff08;Assignment Operators&#xff09;用于给变量赋值。常见的赋值运算符包括 、、-、*、/ 等。如果赋值运算符的应用不正确&#xff0c;可能会导致程序出现错误或产生意外的结果。 以下是一些常见的赋值运…

有趣的 CSS 图标整合技术!sprites精灵图,css贴图定位

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

ubuntu20.04安装RabbitMQ 3.11.19+Erlang 25.3.1

1、检查RabbitMQ、Erlang版本 Erlang Version Requirements | RabbitMQ 2、ubuntu20.04对应的是 focal 3、下载安装Erlang 下载地址&#xff1a;http://packages.erlang-solutions.com/erlang/debian/pool/ sudo dpkg -i esl-erlang_25.3-1~ubuntu~focal_amd64.deb sudo apt…

微服务使用SockJs+Stomp实现Websocket 前后端实例 | Vuex形式断开重连、跨域等等问题踩坑(二)

大家好&#xff0c;我是程序员大猩猩。 上次我们实践了&#xff0c;Java后端如何完成SockJSStomp的配置实现。 微服务使用SockJsStomp实现Websocket 前后端实例 | Vuex形式断开重连、跨域等等问题踩坑&#xff08;一&#xff09; 那么今天我们做一下web vue端的是如何来实现…

Docker 中安装单体架构 MySQL 的 Shell 脚本

该脚本用于实现 root 用户在 Linux 操作系统下的 Docker 中安装单体架构 MySQL Shell 脚本 Git 仓库地址 Gitee&#xff1a;https://gitee.com/tongchaowei/common-shell/tree/main/root 执行脚本 bash ./docker-mysql-install-single.sh需要注意的 该脚本会先检查是否安…

华为配置mDNS网关示例(AP与AC间二层转发)

华为配置mDNS网关示例&#xff08;AP与AC间二层转发&#xff09; 组网图形 图1 配置mDNS网关组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示&#xff0c;某企业的移动终端通过WLAN连接网络&#xff0c;AP_1和AP_2分别与AC之间采用二层转发。部门1和部门2分别属…

Elasticsearch中对文章进行索引和查重

解决思路 要在Elasticsearch中对文章进行索引和查重&#xff0c;可以按照以下步骤操作&#xff1a; 安装Elasticsearch并启动服务。 安装Python的Elasticsearch客户端库&#xff0c;可以使用pip install elasticsearch命令进行安装。 编写Python代码&#xff0c;使用Elastic…

照片特定风格变换Stylar AI;GPT-4V开源替代方案InternVL;纯C/C++实现的Stable Diffusion库;基于AI的数据爬取

✨ 1: AI Photo Filter Stylar AI是一款功能强大的AI图像编辑与设计工具&#xff0c;提供无与伦比的图片组合和风格控制。 AI Photo Filter&#xff0c;简言之&#xff0c;就是使用人工智能技术来改善或改变图片的风格、质量和元素组合的一种工具。 如果你想将你的照片转换成…

如何看待Agent AI智能体的未来

Agent AI智能体的未来 Agent AI智能体&#xff0c;也称为自主代理或智能代理&#xff0c;是指能够自主执行任务、与环境交互并作出决策的计算机程序或系统。这些智能体通常具备学习、适应和推理的能力&#xff0c;能够在复杂和不确定的环境中执行任务。随着技术的进步&#xf…

爬虫自动调用shell通过脚本运行scrapy爬虫(crawler API)

一、爬虫时如何同时调用shell 1)终端cd项目>>scrapy crawl example 2)打开example.py import scrapy from scrapy.shell import inspect_response#引入shellclass ExampleSpider(scrapy.Spider):name "example"allowed_domains ["example.com"]…

【EI会议|稳定检索】2024年传感技术与图像处理国际会议(ICSTIP 2024)

2024 International Conference on Sensing Technology and Image Processing 一、大会信息 会议名称&#xff1a;2024年传感技术与图像处理国际会议会议简称&#xff1a;ICSTIP 2024收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等会议官网&#xff1a;htt…

开源代码分享(26)-考虑预测不确定性的综合能源调度优化

参考文献&#xff1a; [1]崔杨,周慧娟,仲悟之,等.考虑源荷两侧不确定性的含风电电力系统低碳调度[J].电力自动化设备,2020,40(11):85-93.DOI:10.16081/j.epae.202009019. 1.基本原理 考虑碳交易机制能够有效提高风电消纳量&#xff0c;但是随着风电并网容量的增大&#xff0c…

【酱浦菌-爬虫项目】python爬取彼岸桌面壁纸

首先&#xff0c;代码导入了两个库&#xff1a;requests和parsel。这些库用于处理HTTP请求和解析HTML内容。 然后&#xff0c;它定义了一个变量url&#xff0c;指向网站’樱花2024年4月日历风景桌面壁纸_高清2024年4月日历壁纸_彼岸桌面’。 接下来&#xff0c;设置了一个HTT…

每天五分钟玩转深度学习PyTorch:创建pytorch中的零维标量tensor

标量是什么? tensor张量是一个多维数组,零维就是一个点(就是本章的标量),一维就是向量,二维就是一般的矩阵,多维就相当于一个多维的数组,这和 numpy理解是一样的,不同的是Tensor不仅可以在CPU上跑,在GPU上也可以跑。 标量(scalar),只具有数值大小,而没有方向,…

QT 开发COM(ActiveX)组件基础介绍和方案验证

一、COM简介 1.1 COM是什么&#xff1f; COM&#xff0c;Component Object Model&#xff0c;即组件对象模型&#xff0c;是一种以组件为发布单元的对象模型&#xff0c;这种模型使各软件组件可以用一种统一的方式进行交互。COM 既提供了组件之间进行交互的规范&#xff0c;也…

【matplot】【matlab】绘制简洁美观二维坐标系的一个例子

觉得下图不错美观大方&#xff0c;现仿制下图&#xff1a; import numpy as np import matplotlib.pyplot as pltdef sigmoid(x):return 1 / (1 np.exp(-x))def sigmoid_derivative(x):return sigmoid(x) * (1 - sigmoid(x))# 设置中文字体 plt.rcParams[font.family] [Tim…

使用opencv改变图片大小

使用opencv改变图片大小 图片的宽度和高度效果代码 图片的宽度和高度 宽度&#xff1a;图片的宽度指的是图像从左边缘到右边缘的水平跨度。在数字图像中&#xff0c;宽度通常是以像素&#xff08;pixels&#xff09;为单位来度量的。高度&#xff1a;图片的高度指的是图像从上…

面试中算法(最小栈)

最小栈的实现 实现一个栈&#xff0c;该栈有出栈(pop&#xff09;、入栈(push)、取最小元素(get_min) 。要保证时间复杂度都是O (1&#xff09;。 第1步&#xff1a;设原有的栈叫作栈A&#xff0c;额外的“备胎”栈B&#xff0c;用于辅助栈A。 当第1个元素进入栈A时&#xff0c…

“科技让广告更精彩”四川迈瑞斯文化传媒有限公司 行业领先的一站式媒体采购供应平台

国际数字影像产业园与园区企业一同推动数字影像技术的创新与发展&#xff0c;为数字影像产业注入新的活力。其中&#xff0c;四川迈瑞斯文化传媒有限公司&#xff08;906&#xff09;作为数字媒体行业的优秀企业&#xff0c;坚持“科技让广告更精彩”的理念&#xff0c;致力于为…