热门标签 | 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(短信是垃圾短信)表示短信是垃圾短信的概率 = 把样本中垃圾短信的个数除以总样本短信个数,就是短信是垃圾短信的概率。

在这里插入图片描述


推荐阅读
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社区 版权所有