分类算法之朴素贝叶斯

2023-11-15

1、朴素贝叶斯分类算法
朴素贝叶斯(Naive Bayes ,NB)算法是基于贝叶斯定理与特征条件独立假设的分类方法,该算法是有监督的学习算法,解决的是分类问题,是将一个未知样本分到几个预先已知类别的过程。
朴素贝叶斯的思想就是根据某些个先验概率计算Y变量属于某个类别的后验概率,也就是根据先前事件的有关数据估计未来某个事件发生的概率。
2、理解朴素贝叶斯
假设现在有一堆邮件,正常邮件的比例饿是80%,垃圾邮件的比例是20%,这堆邮件中,5%的邮件出现Viagra单词,如果有一封邮件,这封邮件中包含Viagra单词,求这封邮件是垃圾邮件的概率。
在这里插入图片描述
显然不能使用5%*20%=1%得到这封邮件是垃圾邮件的概率,因为垃圾邮件中有可能出现Viagra也有可能不会出现Viagra单词。那么根据贝叶斯公式可得包含Viagra单词的邮件是垃圾邮件的概率为:
在这里插入图片描述
P(spam)是已知20%,也是已知 5%,那么如果求出的概率,结果就可以知道。我们可以根据邮件的数据集统计得到单词频率表:
在这里插入图片描述
其中P(Viagra|spam)表示在垃圾邮件中出现Viagra单词的概率,通过统计得出为4/20。可以得出如果一封邮件中有Viagra单词,这封邮件是垃圾邮件的概率为:
在这里插入图片描述
通过同样的计算可以得到,含有Viagra单词但不是垃圾邮件的概率为0.2。那么可以认为这封邮件是垃圾邮件的概率比较大。这里的Viagra可以理解为邮件中的一个特征。那么当一封邮件有额外更多的特征时,贝叶斯如何扩展?
假设所有历史邮件中只出现了4个单词,也就是4个特征,根据历史邮件统计的单词频率表如下:
在这里插入图片描述
假设现在给定一封邮件中有Viagra和Unsubscribe(取消订阅)两个单词,求这封邮件是垃圾邮件的概率、不是垃圾邮件的概率?
利用贝叶斯公式,我们可以得到:
是垃圾邮件的概率:
在这里插入图片描述
不是垃圾邮件的概率:
在这里插入图片描述
在这里插入图片描述
3、拉普拉斯估计
根据以上例子,假设有一封邮件这4个单词都出现了,求这封邮件是垃圾邮件的概率:
在这里插入图片描述
由于的概率为0/20,会导致整个结果是垃圾邮件的概率为0,那么就否定了其他单词出现的权重。
拉普拉斯估计本质上是给频率表中的每个单词的计数加上一个较小的数,这样就保证每一类中每个特征发生的概率非零。通常,拉普拉斯估计中加上的数值为1,这样就保证了每一个特征至少在数据中出现一次。
以上例子如果四个单词都出现情况下计算是否是垃圾邮件,出现的概率为0/20,可以增加4封垃圾邮件,使4封邮件中每个邮件中只有一个单词出现,这样就避免了垃圾邮件中有的单词出现概率为0的情况。同样在不是垃圾邮件中也增加4封,避免在正常邮件中出现有的单词出现概率为0的情况。

代码实现

import org.apache.spark.ml.classification.NaiveBayesModel
import org.apache.spark.mllib.classification.NaiveBayes
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.{SparkConf, SparkContext}

object Native_bayes {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("").setMaster("")
  val sc = new SparkContext(conf)
    //读取样本数据1
  val data = sc.textFile("sample_naive_bayes_data.txt")
    val parseData = data.map(line => {
      val parts = line.split("")
      LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split("").map(_.toDouble)
      ))
    })
    //样本数据划分训练样本与测试样本
    val splits = parseData.randomSplit(Array(0.9,0.1),seed = 11L)
    val training = splits(0)
    val test = splits(1)
    //新建贝叶斯分类模型模型,并训练 ,lambda 拉普拉斯估计
    val model = NaiveBayes.train(training,lambda = 1.0)
    //对测试样本进行测试
    val predictionAndLabel = test.map(p => {
      (model.predict(p.features), p.label)
    })
    val print_predict = predictionAndLabel.take(10020)
    println("prediction"+"\t"+"label")
    for(i <- 0 to print_predict.length - 1){
      println(print_predict(i)._1+"\t"+print_predict(i)._2)
    }
    val accurscy = 1.0 *  predictionAndLabel.filter(x=>x._1==x._2).count()
    println(accurscy)
    //保存模型
    val ModelPath = "native_bayes_model"
    model.save(sc,ModelPath)
    val sameModel = NaiveBayesModel.load(ModelPath)
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分类算法之朴素贝叶斯 的相关文章

  • Spark广播变量与累加器

    在之前的文章中 我介绍了flink广播状态 从而了解了flink广播状态实际上就是将一个流广播到下游所有算子之中 在本文中我将介绍spark中类似的概念 为了方便理解 先放张spark应用程序架构图 1 普通spark变量 实际上 如果我们
  • 任务长期不释放和占用单节点持续的cpu,导致hivesever2本身内存泄漏造成

    任务长期不释放和占用单节点持续的cpu 导致hivesever2本身内存泄漏造成 产生的原因在于 查询过于复杂或者数据量过大 当有复杂的查询或处理大量数据的请求时 HiveServer2可能会出现高负载 这可能涉及大量的计算 IO操作或涉及
  • windows下安装spark及hadoop

    windows下安装spark 1 安装jdk 2 安装scala 3 下载spark spark下载地址 3 1安装spark 将下载的文件解压到一个目录 注意目录不能有空格 比如说不能解压到C Program Files 作者解压到了这
  • spark集群搭建与mysql元数据管理

    找个spark集群搭建是针对于上一篇hadoop的基础上搭建的 所以spark的版本也是要按照着hadoop版本进行下载 1 解压spark 修改spark的 etc profile的home目录 2 安装SCALA 并配置SCALA HO
  • 11.Linux下Spark的安装配置以及spark-shell的启动和 Spark集群环境搭建

    本案例软件包 链接 https pan baidu com s 1zABhjj2umontXe2CYBW DQ 提取码 1123 若链接失效在下面评论 我会及时更新 目录 1 安装Spark 1 先用xftp将安装包传到home hadoo
  • 【Spark NLP】第 3 章:Apache Spark 上的 NLP

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • spark-shell 加载本地文件报错 java.io.FileNotFoundException

    学习spark shell 时候发现一个问题 从本地文件加载数据生成RDD 报错 文件找不到 原因 spark shell 如果启动了集群模式 真正负责计算的executor会在 该executor所在的 worker节点上读取文件 并不是
  • Spark on Kubernetes 与 Spark on Yarn 不完全对比分析

    前言 Apache Spark 是目前应用最广泛的大数据分析计算工具之一 它擅长于批处理和实时流处理 并支持机器学习 人工智能 自然语言处理和数据分析应用 随着 Spark 越来越受欢迎 使用量越来越大 狭义上的 Hadoop MR 技术栈
  • SparkSQL HiveSQL 常用正则表达式

    SparkSQL HiveSQL 常用正则表达式 目录 SparkSQL HiveSQL 常用正则表达式 1 匹配汉字 2 匹配手机号码 3 匹配身份证 4 SparkSQL HiveSQL 常用正则函数 5 SparkSQL 分组 聚合
  • 广电用户画像分析之根据用户行为数据进行筛选与标签添加

    在数据处理和分析领域 我们经常需要根据用户的行为数据进行筛选和标签添加 以便更好地理解用户行为和偏好 在本篇博客中 我们将介绍两个示例 展示如何根据用户的收视行为数据和订单信息进行数据处理和分析 前情提要 数据集分析 广电用户画像分析之探索
  • 大数据相关常用软件下载地址集锦

    文章目录 每日一句正能量 前言 一 软件下载地址如下 二 文档地址如下 结语 每日一句正能量 生命中有一些人与我们擦肩了 却来不及遇见 遇见了 却来不及相识 相识了 却来不及熟悉 熟悉了 却还是要说再见 前言 由于大数据开发中经常需要用到Z
  • 【Apache Spark 】第 1 章Apache Spark 简介:统一分析引擎

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • spark报Got an error when resolving hostNames. Falling back to /default-rack for all

    一 报错代码如下 21 06 01 20 13 36 INFO yarn SparkRackResolver Got an error when resolving hostNames Falling back to default rac
  • spark_hadoop集群搭建自动化脚本

    bin bash 脚本使用说明 1 使用脚本前需要弄好服务器的基础环境 2 在hadoop的每个节点需要手动创建如下目录 data hdfs tmp 3 修改下面的配置参数 4 脚本执行完备后需要收到格式化namenode
  • 使用Flink1.16.0的SQLGateway迁移Hive SQL任务

    使用Flink的SQL Gateway迁移Hive SQL任务 前言 我们有数万个离线任务 主要还是默认的DataPhin调度CDP集群的Hive On Tez这种低成本任务 当然也有PySpark 打Jar包的Spark和打Jar包的Fl
  • 大数据手册(Spark)--Spark基本概念

    文章目录 Spark 基本概念 Hadoop 生态 Spark 生态 Spark 基本架构 Spark运行基本流程 弹性分布式数据集 RDD Spark安装配置 Spark基本概念 Spark基础知识 PySpark版 Spark机器学习
  • spark-3.1.2兼容多版本hive

    2 3 9版本Hive的支持 直接在实例化SparkSession时 启用hive支持即可 例如 val spark SparkSession builder appName Spark Hive Example config spark
  • sparkstreamming 消费kafka(2)

    spark streaming提供了两种获取方式 一种是同storm一样 实时读取缓存到内存中 另一种是定时批量读取 这两种方式分别是 Receiver base Direct 一 Receiver base Spark官方最先提供了基于R
  • spark SQL基础教程

    1 sparkSQL入门 sparksql专门用于处理结构化的数据 而RDD还可以处理非结构化的数据 sparksql的优点之一是sparkfsql使用统一的api读取不同的数据 第二个优点是可以在语言中使用其他语言 例如python 另外
  • Spark Sql之dropDuplicates去重

    文章目录 算子介绍 示例 问题 解决 dropDuplicates和distinct 参考 算子介绍 dropDuplicates去重原则 按数据行的顺序保留每行数据出现的第一条 dropDuplicates 在Spark源码里面提供了以下

随机推荐

  • STL 容器List

    List节点结构 template
  • BAPI_ACC_DOCUMENT_POST 增强

    使用 BAPI ACC DOCUMENT POST 的时候 如果有些字段在 Tables 参数中没有 比如 现在大家都用 Reason code 来作为现金流量表的实现方案 但 BAPI ACC DOCUMENT POST 的 accoun
  • MRI原理与CEST相关简介

    一 MRI相关 1 MRI 2 磁共振成像的物理学原理 3 磁共振成像仪相关 4 磁共振成像脉冲序列 1 MRI 核磁共振成像MRI Magnetic Reasonance Imaging 是利用利用磁共振的物理原理 来对人体内部结构成像的
  • 面试题创作0001,请解释mmap的细节

    1 请列举Linux的几种ICP工具 2 重解释共享内存的实现原理 3 两个进程A和B共享到的同一页物理内存 如果被A进程勾进CPU的Cache 那么B进程访问这段内存数据时 将会从内存中访问 还是从Cache中访问呢 可以X86为例 或其
  • 串扰的耦合途径

    虽然说串扰是电磁场的耦合 但是使用电容与电感就可以理解他 我们都知道两个导体会构成一个电容 当电容两端的电压发生变化时 会有电流从电容中流过 这个电容耦合不止发生在我们的信号线与信号线之间 同时也发生在信号线与回流平面之间 让我们来看一下下
  • Java POI 百万规模数据的导入和导出

    目录 1 百万数据导入 1 1 需求分析 1 2 思路分析 1 3 代码实现 1 3 1 步骤分析 1 3 2 自定义处理器 1 3 3 自定义解析 1 3 4 测试 2 百万数据导出 2 1 概述 2 2 解决方案分析 2 3 原理分析
  • leetcode 167 -双指针

    1 题目 给定一个已按照升序排列 的有序数组 找到两个数使得它们相加之和等于目标数 函数应该返回这两个下标值 index1 和 index2 其中 index1 必须小于 index2 说明 返回的下标值 index1 和 index2 不
  • 开启mysql 3306端口远程访问,并且允许数据库用户远程登录,使用navicat来去登录数据库用户,操作步骤配截图。

    1 首先选择开始菜单进到控制面板 然后选择windows防火墙 2 然后选择高级设置选项 3 选择入站规则 4 新建规则 5 选择端口 单击下一步 6 输入端口3306 单击下一步 7 下一步 8 点击下一步 9 这时候 入站规则里已经有显
  • 深入理解c语言——‘\0’ ,‘0’, “0” ,0之间的区别

    看来基础还是很重要的 基础不扎实就难以学好c语言 就别说写出高质量的c语言代码了 今天 我就被这个问题折磨的不行了 哈哈 不过现在终于明白了 0 0 0 之间的区别了 困惑和快乐与你分享 首先比较一下 0 和 0 的区别 有一个共同点就是它
  • Win11系统线程异常未处理怎么办?Win11系统线程异常未处理解决方法

    Win11系统线程异常未处理怎么办 相信有很多用户对于这一情况都是十分头疼的 大家不要着急 我们可以具体问题具体分析 使用不同的方法解决这个问题 更多系统教程尽在小白系统重装官网 我们认为有必要先了解导致System Thread Exce
  • unity人物换装

    unity人物换装 人物换装算是游戏中的老梗了 为了美化游戏 为获取更好的游戏体验 很多游戏中可以实现人物换装 还可以给人物更换武器 还要翅膀什么的 总之 能在玩家在体验上 带来很好的效果 先看下效果图 这个就把一个人物的形象稍微改变了下
  • flutter 自定义TabBar,实现 高度 和 标题与图标距离 可自定义的方案与实践

    TabBar 是基本每个App都会使用到的一个控件 在官方内置的 TabBar 的高度只有两种规格且是不可修改的 未设置 Icon 时的高度 const double kTabHeight 46 0 设置 Icon 之后的高度 const
  • Springboot + mybatis-plus 报错 java.nio.file.AccessDeniedException

    记录一次 java nio file AccessDeniedException的解决 先看我的报错信息 Caused by java nio file AccessDeniedException D WorkSpace Java IDEA
  • Unity+Vuforia+Window10打包 PC

    前言 本文参考 http blog csdn net htwzl article details 77488886 实测哦 Vuforia SDK是一个常用的增强现实软件开发工具 其跟踪效果稳定 使用简便 受到大众的喜爱 但是以前的Vufo
  • CentOS 6.4下编译安装MySQL 5.6.14

    概述 CentOS 6 4下通过yum安装的MySQL是5 1版的 比较老 所以就想通过源代码安装高版本的5 6 14 正文 一 卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm qa grep mysql 有的话通
  • 在CentOS 7中安装PHP5和PHP7需要的插件

    安装插件预防安装过程遇见问题 yum install openssl openssl devel bzip2 devel libjpeg devel libpng devel libmcrypt devel fretype freetype
  • python 人民币数字转汉字大写金额

    写了那么久的博客 始于Python爬虫 目前专于Java学习 终于有了属于自己的小窝 欢迎各位访问我的个人网站 未来我们一起交流进步 背景 银行在打印票据的时候 常常需要将阿拉伯数字表示的人民币金额转换为大写表示 现在请你来完成这样一个程序
  • android中log知识总结

    android中的log有很多级别 合理的控制log可以提高的解决问题的效率 减少工作量1 log输出级别 android中的log级别如下 ANDROID LOG UNKNOWN ANDROID LOG DEFAULT ANDROID L
  • http报文结构--个人笔记

    转自 https www cnblogs com ldq2016 p 9055933 html 一个HTTP请求报文由四个部分组成 请求行 请求头部 空行 请求数据 1 请求行 请求行由请求方法字段 URL字段和HTTP协议版本字段3个字段
  • 分类算法之朴素贝叶斯

    1 朴素贝叶斯分类算法 朴素贝叶斯 Naive Bayes NB 算法是基于贝叶斯定理与特征条件独立假设的分类方法 该算法是有监督的学习算法 解决的是分类问题 是将一个未知样本分到几个预先已知类别的过程 朴素贝叶斯的思想就是根据某些个先验概