Spark-机器学习(5)分类学习之朴素贝叶斯算法

news2024/11/24 9:02:03

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

Spark-机器学习(4)回归学习之逻辑回归-CSDN博客文章浏览阅读2.6k次,点赞63次,收藏38次。今天的文章,我们来学习我们回归中的逻辑回归,并带来简单案例,学习用法。希望大家能有所收获。同时,希望我的文章能帮助到每一个正在学习的你们。也欢迎大家来我的文章下交流讨论,共同进步。https://blog.csdn.net/qq_49513817/article/details/138049507

今天的文章,我们来学习分类学习之朴素贝叶斯算法,并带来简单案例,学习用法。希望大家能有所收获。

目录

一、朴素贝叶斯

什么是朴素贝叶斯 

spark朴素贝叶斯

 二、示例代码

完整代码 

 方法解析

 代码效果

 代码输出

拓展-spark朴素贝叶斯

一、朴素贝叶斯

什么是朴素贝叶斯 

朴素贝叶斯 

朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理与特征之间强(朴素)独立假设的分类方法。它简单、易于实现,并且在很多情况下都有不错的分类效果。朴素贝叶斯分类器常用于文本分类,如垃圾邮件的识别。

这里的“朴素”一词意味着该分类器假设特征之间是相互独立的,即一个特征的出现与另一个特征无关。然而,在现实世界的数据集中,这个假设往往是不成立的,即特征之间往往存在一定的相关性。尽管如此,朴素贝叶斯分类器在很多实际应用中仍然表现得很好。

朴素贝叶斯分类器的工作原理大致如下:

  • 训练阶段

    • 对于每个类别,计算每个特征的条件概率,即该特征在给定类别中出现的概率。
    • 同时,计算每个类别的先验概率,即训练集中该类别的样本数占总样本数的比例。
  • 分类阶段

    • 对于一个新的待分类样本,根据朴素贝叶斯公式(即贝叶斯定理)和训练阶段得到的条件概率、先验概率,计算该样本属于每个类别的后验概率。
    • 将样本分类到后验概率最大的那个类别。

朴素贝叶斯分类器有多种变体,如高斯朴素贝叶斯(用于连续特征)、多项式朴素贝叶斯(用于离散特征)和伯努利朴素贝叶斯(用于二元特征)。这些变体在处理不同类型的数据时具有不同的优势。

spark朴素贝叶斯

park朴素贝叶斯是指在Apache Spark大数据处理框架中实现的朴素贝叶斯算法。朴素贝叶斯算法本身是一类基于贝叶斯定理和特征之间条件独立假设的分类方法。在Spark中,可以使用MLlib(机器学习库)来方便地实现朴素贝叶斯算法,并应用于大规模数据集的分类任务。

Spark朴素贝叶斯分类器的主要工作原理是基于朴素贝叶斯定理,它计算给定特征条件下样本属于不同类别的概率,并将样本分类到概率最大的类别中。在Spark中,可以利用分布式计算的能力来处理大规模数据集,提高分类任务的效率和可扩展性。

使用Spark朴素贝叶斯分类器时,通常需要先准备训练数据集,然后使用MLlib提供的朴素贝叶斯算法进行模型训练。训练完成后,可以使用得到的模型对新的数据进行分类预测。

Spark朴素贝叶斯分类器在实际应用中具有广泛的应用场景,如文本分类、垃圾邮件识别、情感分析等。通过利用Spark的分布式计算能力,可以高效地处理大规模数据集,并提升分类任务的性能和准确性。

 二、示例代码

在我的示例代码中主要作用是展示如何使用Apache Spark MLlib来执行以下步骤:

  1. 准备和预处理数据。
  2. 训练一个朴素贝叶斯分类器。
  3. 使用模型进行预测。
  4. 评估模型的性能。

由于我们数据集很小且简单,该代码主要用于学习。在实际应用中,通常会使用更大、更复杂的数据集,并且可能需要进行更多的数据预处理和模型调优。

完整代码 

import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification.NaiveBayes
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature.{StringIndexer, VectorAssembler}
import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.linalg.Vectors
object p5 {
  def main(args: Array[String]): Unit = {
    // 初始化SparkSession
    val spark = SparkSession.builder()
      .appName("Peng0426.")
      .master("local[*]") // 使用所有可用的核心在本地运行
      .getOrCreate()
    import spark.implicits._
    val data = Seq(
      (0.0, Vectors.dense(0.0, 1.0)),
      (1.0, Vectors.dense(1.0, 0.0)),
      (0.0, Vectors.dense(2.0, 1.0)),
      (1.0, Vectors.dense(0.0, 3.0))
    ).toDF("label", "features")
    val labelIndexer = new StringIndexer()
      .setInputCol("label")
      .setOutputCol("indexedLabel")
      .fit(data)
    // 创建朴素贝叶斯分类器
    val nb = new NaiveBayes()
      .setLabelCol("indexedLabel")
      .setFeaturesCol("features")
    val pipeline = new Pipeline()
      .setStages(Array(labelIndexer, nb))
    val model = pipeline.fit(data)
    val predictions = model.transform(data)
    // 选择并展示预测结果
    predictions.select("label", "indexedLabel", "prediction").show()
    // 选择(预测标签,实际标签)并计算测试误差
    val evaluator = new MulticlassClassificationEvaluator()
      .setLabelCol("indexedLabel")
      .setPredictionCol("prediction")
      .setMetricName("accuracy")
    val accuracy = evaluator.evaluate(predictions)
    println(s"Test Error = ${(1.0 - accuracy)}")
  }
}

 方法解析

  • SparkSession:这是Apache Spark MLlib的入口点,用于创建DataFrame和注册DataFrame相关的函数。

  • Pipeline:在Spark ML中,Pipeline用于将多个转换(Transformations)和模型(Models)串联在一起,形成一个统一的工作流。

  • StringIndexer:将标签列(通常是字符串类型)转换为索引标签,以便可以用于分类算法。

  • NaiveBayes:朴素贝叶斯分类器,用于执行分类任务。

  • VectorAssembler:VectorAssembler通常用于将多个列组合成一个特征向量。

  • MulticlassClassificationEvaluator:用于评估多分类模型性能的评估器,此处用于计算准确率。

  • Vectors:用于创建密集向量。

 代码效果

  • 数据准备:创建一个包含标签和特征的数据集。

  • 数据预处理:使用StringIndexer将标签转换为索引形式。

  • 模型训练:通过Pipeline训练朴素贝叶斯分类器。

  • 预测:使用训练好的模型对数据进行预测。

  • 评估:使用MulticlassClassificationEvaluator计算模型的准确率。

 代码输出

运行代码我们应该得到如下两段内容:

  • 预测结果:使用predictions.select("label", "indexedLabel", "prediction").show()展示原始标签、索引标签和预测标签。

  • 测试误差:计算并打印出测试误差(1减去准确率)。

 

 成功得到两段我们所需内容。

拓展-spark朴素贝叶斯

说明描述示例
算法名称朴素贝叶斯(Naive Bayes)假设特征之间相互独立,利用贝叶斯定理进行分类
所属框架Apache Spark MLlibSpark MLlib提供了朴素贝叶斯分类器的实现
适用场景文本分类、垃圾邮件过滤、情感分析等使用Spark MLlib的朴素贝叶斯分类器对文本数据进行分类
算法原理基于贝叶斯定理和特征条件独立假设计算每个类别的先验概率和特征的条件概率,然后利用贝叶斯定理计算后验概率
数据要求特征通常是离散的将文本数据转换为TF-IDF向量,然后作为朴素贝叶斯分类器的输入
优点实现简单、计算效率高、对缺失数据不敏感使用Spark的分布式计算能力,可以快速处理大规模数据集
缺点假设特征之间相互独立,可能不适用于所有场景当特征之间存在依赖关系时,分类效果可能不佳
使用步骤1. 准备数据集<br>2. 加载数据集到Spark<br>3. 转换数据为MLlib格式<br>4. 训练朴素贝叶斯模型<br>5. 使用模型进行预测使用Spark MLlib的API,编写代码进行数据处理、模型训练和预测

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

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

相关文章

k8s-身份认证与权限

认证概述 Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。 在Kubernetes集群中&#xff0c;客户端通常有两类&#xff1a; User Account&#xff1a;一般是独…

原型链prototype、__proto、constructor的那些问题整理

再了解原型链之前,我们先来看看构造函数和实例对象的打印结构 - 函数 这里我们定义一个构造函数Fn,然后打印它的结构吧 function Fn(){} console.dir(Fn)控制台得到结构 从上面结构我们能看的出来,函数有两种原型,一种是作为函数特有的原型:prototype,另一种是作为对象的__…

记录wordpress网站搭建及当天被SEO优化收录

网站是前不就前搭建的&#xff0c;但是一直没有做SEO优化&#xff0c;今天花了点时间做下优化。记录下&#xff0c;喜欢的朋友点赞收藏下。 1.wordpress后台下载插件Yoast SEO插件&#xff0c;setting中搜索XML sitemaps&#xff0c;点view the XML sitemap&#xff0c;暂时不…

传媒论坛编辑部传媒论坛杂志社传媒论坛杂志2024年第7期目录

专题│场景传播研究 场景传播&#xff1a;一场遮盖自我与寻找自我的博弈 胡沈明; 3 基于CiteSpace的中国场景传播研究热点分析 管倩;粟银慧; 4-610《传媒论坛》投稿&#xff1a;cnqikantg126.com 数字世界的美与危&#xff1a;场景传播的失范与应对之举 王依晗;章洁…

srpingMVC基本使用

文章目录 1. springMVC基本功能(1) maven坐标导入(2) 编写表现层(3) springMVC配置类编写(4) 部署tomcat访问 2. 各种请求方法get请求post请求put请求delete请求请求参数提取 3. 请求参数接收(1) param参数接受封装到对象中 (2) 路劲参数接收集合接受时间类型接收json参数接收m…

鸿蒙OpenHarmony【轻量系统 编写“Hello World”程序】 (基于Hi3861开发板)

编写“Hello World”程序 下方将通过修改源码的方式展示如何编写简单程序&#xff0c;输出“Hello world”。请在下载的源码目录中进行下述操作。 确定目录结构。 开发者编写业务时&#xff0c;务必先在./applications/sample/wifi-iot/app路径下新建一个目录&#xff08;或一…

Electron中使用Prisma(以SQLite为例)

1、安装 Prisma 打开终端&#xff0c;执行以下命令安装 Prisma CLI&#xff1a; npm install prisma -g 2、初始化 Prisma 项目 在工作目录中执行以下命令来初始化一个新的 Prisma 项目&#xff1a; prisma init 这将创建一个新的文件夹&#xff0c;包含了必要的文件和目…

proteus+stm32+CubeMX+dht11+lcd1602

浅浅记录下过程遇到的问题&#x1f921;&#x1f921;&#x1f921; 1 供电网配置错误&#xff08;加上就好了 新起个名也会出这个 / 电源不起名 不创建估计项目也会&#xff09;没zet6的 proteus 里 固件库 账号注册半天没成 就用的stm32F103R6的然后发现单片机不输出高低电平…

ElasticSearch 安装(docker)

下载安装包 阿里云链接&#xff1a; elasticSearch.exe https://www.alipan.com/s/3A356NnmWaJ 提取码: 93da 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速播放。 安装步骤 1、首先…

RabbitMQ发布确认和消息回退(6)

概念 发布确认原理 生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm 模式&#xff0c;所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始)&#xff0c;一旦消息被投递到所有匹配的队列之后&#xff0c;broker就会发送一个确认给生产者(包含消…

2024精武杯复现

第一部分&#xff1a;计算机和手机取证 1. 请综合分析计算机和手机检材&#xff0c;计算机最近一次登录的账户名是 用火眼分析后在登录信息查找最后登录的人&#xff0c;用户名是admin 2. 请综合分析计算机和手机检材&#xff0c;计算机最近一次插入的USB存储设备串号是 在u…

AIX7环境上一次艰难的Oracle打补丁经历

系统环境 AIX &#xff1a;7200-05-03-2148 Oracle&#xff1a;11.2.0.4 PSU: 11.2.0.4.201020&#xff08;31718723&#xff09; perl:5.28 问题一&#xff1a;AUTO patch #/u01/app/11.2.0/grid/OPatch/opatch auto /tmp/31718723 错误信息如下&#xff1a;匹配mos 2516761.1…

Spring MVC系列之九大核心组件

概述 Spring MVC是面试必问知识点其一&#xff0c;Spring MVC知识体系庞杂&#xff0c;有以下九大核心组件&#xff1a; HandlerMappingHandlerAdapterHandlerExceptionResolverViewResolverRequestToViewNameTranslatorLocaleResolverThemeResolverMultipartResolverFlashMa…

LeetCode 面试题 08.02——迷路的机器人

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题就是一个典型的图搜索题&#xff0c;一种就是广度优先搜索&#xff0c;一种就是深度优先搜索。 3. 代码实现 class Solution { public:vector<vector<int>> pathWithObstacles(vector<vecto…

Go源码--Strconv库

简介 Strconv 库是一些跨类型的转换函数集合&#xff0c;大家应该很熟悉。源码没有什么难点&#xff0c;主要是面试题有可能会出这种类型的&#xff0c;所以简单介绍下&#xff0c;主要介绍 以下两种常用转换&#xff0c;其他的没细研究&#xff0c;感兴趣的可以看看。 Strco…

[笔试训练](八)

目录 022&#xff1a;求最小公倍数 023&#xff1a;数组中的最长连续子序列 024&#xff1a;字母收集 022&#xff1a;求最小公倍数 求最小公倍数_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 求最小公倍数公式&#xff1a;lcm(a,b)a*b/gcd(a,b)&am…

网页提示语闪太快的定位问题(selenium)

selenium UI自动化时&#xff0c;提示语闪太快&#xff0c;导致无法获取元素的问题 解决办法 步骤一&#xff1a; F12---》控制台输入debugger 步骤二&#xff1a;对于需要定位的部分&#xff0c;在控制台的debugger处回车&#xff0c;可以定住页面 步骤三&#xff1a;正常定…

win11 安装qt5.14.2 、qtcreator、vs编译器 。用最小安装进行 c++开发qt界面

系统 &#xff1a;win11 一、安装vs生成工具 &#xff0c;安装编译器 下载visualstudio tools 生成工具&#xff1a; 安装编译器 和 windows sdk&#xff1a; 安装debug 调试器&#xff1a; 二、Qt5.14.2下载 下载链接: Index of /archive/qt/5.14/5.14.2 安装qt 三、配置QT/…

MVP+敏捷开发

MVP敏捷开发 1. 什么是敏捷开发&#xff1f; 敏捷开发是一种软件开发方法论&#xff0c;旨在通过迭代、自组织的团队和持续反馈&#xff0c;快速响应需求变化并交付高质量的软件。相较于传统的瀑布模型&#xff0c;敏捷开发强调灵活性、适应性和与客户的紧密合作。敏捷开发方…

Llama网络结构介绍

LLaMA现在已经是开源社区里炙手可热的模型了&#xff0c;但是原文中仅仅介绍了其和标准Transformer的差别&#xff0c;并没有一个全局的模型介绍。因此打算写篇文章&#xff0c;争取让读者不参考任何其他资料把LLaMA的模型搞懂。 结构 如图所示为LLaMA的示意图&#xff0c;由…