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

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

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 = {// 初始化SparkSessionval 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.hqwc.cn/news/651804.html

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

相关文章

如何实现直播声卡反向给手机充电功能呢?

在数字化时代的浪潮中&#xff0c;声卡作为多媒体系统的核心组件&#xff0c;扮演着声波与数字信号相互转换的关键角色。它不仅能够将来自各类音源的原始声音信号转换为数字信号&#xff0c;进而输出到各类声响设备&#xff0c;更能够通过音乐设备数字接口(MIDI)发出合成乐器的…

单片机为什么有多组VDD?

以前我在画尺寸小的PCB时&#xff0c;比较头痛&#xff0c;特别是芯片引脚又多的&#xff0c;芯片底下&#xff0c;又不能打太多过孔。 可能有些老铁也比较好奇&#xff0c;为什么一个单片机芯片&#xff0c;有这么多组VDD和VSS。 比如下面这个100个引脚的STM32单片机。 有5组…

场景文本检测识别学习 day07(BERT论文精读)

BERT 在CV领域&#xff0c;可以通过训练一个大的CNN模型作为预训练模型&#xff0c;来帮助其他任务提高各自模型的性能&#xff0c;但是在NLP领域&#xff0c;没有这样的模型&#xff0c;而BERT的提出&#xff0c;解决了这个问题BERT和GPT、ELMO的区别&#xff1a; BERT是用来…

曲线「三分」

明明做作业的时候遇到了 n 个二次函数Si(x)ax^2bxc &#xff0c;他突发奇想设计了一个新的函数F(x)max{Si(x)},i1,2……n 。 明明现在想求这个函数在 的最小值&#xff0c;要求精确到小数点后四位&#xff0c;四舍五入。 输入格式 输入包含 T组数据&#xff0c;每组第一行一…

网络安全培训对软件开发人员的重要性

微信搜索关注&#xff1a;网络研究观 阅读获取更多信息。 组织所经历的持续不断的网络威胁没有任何放缓的迹象&#xff0c;使得实现有效安全的任务变得越来越具有挑战性。 根据最新的 Verizon 数据泄露调查报告&#xff0c;2023 年高级攻击增加了 200% 以上。 IBM 数据泄露成…

maven-idea新建和导入项目

全局配置 新建项目 需要新建的文件夹 src/testsrc/test/javasrc/main/java 注&#xff1a;1、新建Java-class&#xff0c;输入.com.hello.hellomaven 2、快捷键psvm显示 public static void main(String[] args) {.... } package com.hello;public class hellomaven {publ…

Unity 使用GPU计算物体距离

在游戏开发中&#xff0c;计算物体之间的距离是一个常见的需求&#xff0c;例如用于碰撞检测、视觉效果等。传统的计算方法可能会在大量物体时带来性能问题&#xff0c;而在 Unity 中&#xff0c;借助 GPU 进行计算可以有效提高性能。本文将介绍一种使用 Compute Shader 在 Uni…

HarmonyOS ArkUI实战开发—状态管理

一、状态管理 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染&…

数字旅游:通过科技赋能,创新旅游服务模式,提供智能化、个性化的旅游服务,满足游客多元化、个性化的旅游需求

目录 一、数字旅游的概念与内涵 二、科技赋能数字旅游的创新实践 1、大数据技术的应用 2、人工智能技术的应用 3、物联网技术的应用 4、云计算技术的应用 三、智能化、个性化旅游服务的实现路径 1、提升旅游服务的智能化水平 2、实现旅游服务的个性化定制 四、数字旅…

CSS基础语法

CSS 标签选择器 内嵌式改变标签样式 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><!-- 属于标签选择器 --><style>p{font - size: 16px;color: red;}</style></head><bo…

Docker从无到有

主要为windows下docker的安装与使用~ 初始Docker Docker理解 对于docker的加简介&#xff0c;我们可以官网获取它的概念&#xff0c;接下来就从什么是docker、为什么要使用docker以及它的作用来进行一个快速入门 前提&#xff1a;项目在发布时&#xff0c;不仅需要其jar包同…

STM32自己从零开始实操01:原理图

在听完老师关于 STM32 物联网项目的所有硬件课程之后&#xff0c;就是感觉自己云里雾里&#xff0c;明明课程都认真听完了&#xff0c;笔记也认真记录&#xff0c;但是就是感觉学到的知识还不是自己。 遂决定站在老师的肩膀上自己开始设计项目&#xff0c;将知识变成自己的&am…