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

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

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( W 1 W_{1} W1 W 2 W_{2} W2 W 3 W_{3} W3,…, W n W_{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( W i W_{i} Wi出现在短信中 | 短信是垃圾短信)表示垃圾短信中包含 W i W_{i} Wi这个单词的概率有多大。这个概率值通过统计样本很容易就能获得。我们假设垃圾短信有y个,其中包含 W i W_{i} Wi的有x个,那这个概率值就等于x/y。

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

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值