热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

46.概率统计:如何利用朴素贝叶斯算法过滤垃圾短信

文章目录1.算法解析1.1基于黑名单的过滤器1.2基于规则的过滤器1.3基于概率统计的过滤器1.3.1朴素贝叶斯算法1.3.2如何利用朴素贝叶斯算法,来做垃圾短信的过


文章目录

  • 1.算法解析
    • 1.1 基于黑名单的过滤器
    • 1.2 基于规则的过滤器
    • 1.3 基于概率统计的过滤器
      • 1.3.1 朴素贝叶斯算法
      • 1.3.2 如何利用朴素贝叶斯算法,来做垃圾短信的过滤

问题:实现一个简单的垃圾短信过滤功能以及骚扰电话拦截功能,该用什么样的数据结构和算法实现呢?


1.算法解析


1.1 基于黑名单的过滤器


  • 散列表、二叉树,比较好内存,存储有限
  • 布隆过滤器,省内存,可能会误判
  • 黑名单存储服务器,需要联网,网络通讯比较慢。

1.2 基于规则的过滤器

如果号码不在黑名单,可以通过预设规则来过滤:


  • 短信中包含特殊单词(或词语),比如一些非法、淫秽、反动词语等;

  • 短信发送号码是群发号码,非我们正常的手机号码,比如+60389585;

  • 短信中包含回拨的联系方式,比如手机号码、微信、QQ、网页链接等,因为群发短信的号码一般都是无法回拨的;

  • 短信格式花哨、内容很长,比如包含各种表情、图片、网页链接等;

  • 符合已知垃圾短信的模板。垃圾短信一般都是重复群发,对于已经判定为垃圾短信的短信,我们可以抽象成模板,将获取到的短信与模板匹配,一旦匹配,我们就可以判定为垃圾短信。

何定义特殊单词?概率统计。
在这里插入图片描述


1.3 基于概率统计的过滤器


1.3.1 朴素贝叶斯算法

假设事件A是“小明不去上学”,事件B是“下雨了”。现在统计了一下过去10天的下雨情况和小明上学的情况,作为样本数据。

在这里插入图片描述

规律:在这10天中,有4天下雨,所以下雨的概率P(B)=4/10。10天中有3天,小明没有去上学,所以小明不去上学的概率P(A)=3/10。在4个下雨天中,小明有2天没去上学,所以下雨天不去上学的概率P(A|B)=2/4。在小明没有去上学的3天中,有2天下雨了,所以小明因为下雨而不上学的概率是P(B|A)=2/3。

公式表达:
在这里插入图片描述


1.3.2 如何利用朴素贝叶斯算法,来做垃圾短信的过滤

计算机没办法像人一样理解短信的含义,需要把短信抽象成一组计算机可以理解并且方便计算的特征项,用这一组特征项代替短信本身,来做垃圾短信过滤。

通过分词算法,把一个短信分割成n个单词。这n个单词就是一组特征项,全权代表这个短信。

使用概率,来表征一个短信是垃圾短信的可信程度。公式如下:
在这里插入图片描述
实际没法通过样本数据统计得到这个概率。

朴素贝叶斯公式:
在这里插入图片描述

P(W1W_{1}W1,W2W_{2}W2,W3W_{3}W3,…,WnW_{n}Wn同时出现在一条短信中 | 短信是垃圾短信)这个概率照样无法通过样本来统计得到。通过以下公式计算:

独立事件发生的概率计算公式:P(A*B) = P(A)*P(B)如果事件A和事件B是独立事件,两者的发生没有相关性,事件A发生的概率P(A)等于p1,事件B发生的概率P(B)等于p2,
那两个同时发生的概率P(A*B)就等于P(A)*P(B)。

基于上面的公司,得到如下:
在这里插入图片描述
其中,P(WiW_{i}Wi出现在短信中 | 短信是垃圾短信)表示垃圾短信中包含WiW_{i}Wi这个单词的概率有多大。这个概率值通过统计样本很容易就能获得。我们假设垃圾短信有y个,其中包含WiW_{i}Wi的有x个,那这个概率值就等于x/y。

P(短信是垃圾短信)表示短信是垃圾短信的概率 = 把样本中垃圾短信的个数除以总样本短信个数,就是短信是垃圾短信的概率。

在这里插入图片描述


推荐阅读
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
author-avatar
q40796672
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有