php贝叶斯,php – 将单个概率与朴素贝叶斯垃圾邮件过滤相结合
我正在尝试通过分析我已经积累的语料库来生成垃圾邮件过滤器。
我已经实现了代码来计算消息是垃圾邮件的概率,因为它包含一个特定的单词,通过从wiki实现以下公式:
我的PHP代码
public function pSpaminess($word)
{
$ps = $this->pContentIsSpam();
$ph = $this->pContentIsHam();
$pws = $this->pWordInSpam($word);
$pwh = $this->pWordInHam($word);
$psw = ($pws * $ps) / ($pws * $ps + $pwh * $ph);
return $psw;
}
根据“组合个人概率”部分,我已经实现了代码来组合测试消息中所有唯一字词的概率来确定垃圾邮件。
从维基公式:
我的PHP代码:
public function predict($content)
{
$words = $this->tokenize($content);
$pProducts = 1;
$pSums = 1;
foreach($words as $word)
{
$p = $this->pSpaminess($word);
echo "$word: $p\n";
$pProducts *= $p;
$pSums *= (1 - $p);
}
return $pProducts / ($pProducts + $pSums);
}
在测试字符串“这根本不是很糟糕”,产生以下输出:
C:\projects\bayes>php test.php
this: 0.19907407407407
isn't: 0.23
very: 0.2
bad: 0.2906976744186
at: 0.17427385892116
all: 0.16098484848485
probability message is spam: float(0.00030795502523944)
这是我的问题:我是否正确实施个人概率?假设我正在生成有效的单词概率,组合方法是否正确?
我关心的是计算结果的可能性很小。我已经测试了一个更大的测试消息,最终导致了科学计数的概率超过10个零位。我期待在10或100位的价值观。
我希望问题在于我的PHP实现 – 但是当我从维基百科中检查组合函数时,公式的分红是分数的乘积。我看不出多个概率的组合最终会超过0.1%的概率。
如果是这种情况,那么信息越长,概率分数越低,如何补偿垃圾邮件配额来正确预测垃圾邮件/火腿的小型和大型测试用例?
附加信息
我的语料库实际上是一个约40k的评论的集合。我实际上是应用我的“垃圾邮件过滤器”反对这些评论。根据投票数量,我将个人评论评为垃圾邮件/火腿:如果投票少于投票数,则被认为是Ham,否则为垃圾邮件。
现在,由于语料库的类型,事实证明,垃圾邮件中使用的词几乎比火腿更多。也就是说,这里列出了垃圾邮件的十大列表,比火腿更频繁。
+-----------+------------+-----------+
| word | spam_count | ham_count |
+-----------+------------+-----------+
| krugman | 30 | 27 |
| fetus | 12.5 | 7.5 |
| boehner | 12 | 10 |
| hatred | 11.5 | 5.5 |
| scum | 11 | 10 |
| reserve | 11 | 10 |
| incapable | 8.5 | 6.5 |
| socalled | 8.5 | 5.5 |
| jones | 8.5 | 7.5 |
| orgasms | 8.5 | 7.5 |
+-----------+------------+-----------+
相反,大多数词在火腿上比火腿更丰富。举个例子,我排名前10位的垃圾邮件数最多的单词列表。
+------+------------+-----------+
| word | spam_count | ham_count |
+------+------------+-----------+
| the | 4884 | 17982 |
| to | 4006.5 | 14658.5 |
| a | 3770.5 | 14057.5 |
| of | 3250.5 | 12102.5 |
| and | 3130 | 11709 |
| is | 3102.5 | 11032.5 |
| i | 2987.5 | 10565.5 |
| that | 2953.5 | 10725.5 |
| it | 2633 | 9639 |
| in | 2593.5 | 9780.5 |
+------+------------+-----------+
如您所见,垃圾邮件使用频率明显低于火腿使用量。在我的40k评论的语料库中,2100评论被认为是垃圾邮件。
如下所述,对垃圾邮件发布率的测试短语如下:
短语
Cops are losers in general. That's why they're cops.
分析:
C:\projects\bayes>php test.php
cops: 0.15833333333333
are: 0.2218958611482
losers: 0.44444444444444
in: 0.20959269435914
general: 0.19565217391304
that's: 0.22080730418068
why: 0.24539170506912
they're: 0.19264544456641
float(6.0865969793861E-5)
据此,垃圾邮件的概率极低。但是,如果我现在分析一个火腿评论:
短语
Bill and TED's excellent venture?
分析
C:\projects\bayes>php test.php
bill: 0.19534050179211
and: 0.21093065570456
ted's: 1
excellent: 0.16091954022989
venture: 0.30434782608696
float(1)
好的,这很有趣我正在做这些例子,因为我正在撰写这个更新,所以这是我第一次看到这个具体测试用例的结果。我认为我的预测是倒转的。它实际上挑选了火腿的可能性,而不是垃圾邮件。这值得验证。
对已知火腿的新测试。
短语
Complain about $174,000 salary being too little for self. Complain about $50,000 a year too much for teachers.
Scumbag congressman.
分析
C:\projects\bayes>php test.php
complain: 0.19736842105263
about: 0.21896031561847
174: 0.044117647058824
000: 0.19665809768638
salary: 0.20786516853933
being: 0.22011494252874
too: 0.21003236245955
little: 0.21134020618557
for: 0.20980452359022
self: 0.21052631578947
50: 0.19245283018868
a: 0.21149315683195
year: 0.21035386631717
much: 0.20139771283355
teachers: 0.21969696969697
scumbag: 0.22727272727273
congressman: 0.27678571428571
float(3.9604152477223E-11)
很不幸的是,不行。原来是巧合的结果。我开始怀疑是否也许不能轻易量化评论。或许垃圾邮件的性质与垃圾邮件的性质截然不同。
也许垃圾邮件过滤只有在您有特定的单词类垃圾邮件时才可行?
最终更新
正如答复所指出的,奇怪的结果是由于语料库的性质。使用没有明确定义垃圾信息的评论语料库贝叶斯分类不能执行。由于可能(可能)任何一个评论可能会收到各种用户的垃圾邮件和火腿评级,所以不可能为垃圾评论生成硬分类。
最终,我想生成一个评论分类器,可以确定评论文章是否会根据贝叶斯分类进行评估,以便评论内容。我仍然可以调查分类器的电子邮件垃圾邮件,看看这样的分类器是否可以猜测评论系统的业务响应。但是现在的问题得到回答。感谢大家的投入。
php贝叶斯,php – 将单个概率与朴素贝叶斯垃圾邮件过滤相结合相关推荐
- 朴素贝叶斯算法实现垃圾邮件过滤(Python3实现)
目录 1.朴素贝叶斯实现垃圾邮件分类的步骤 2.邮件数据 3.代码实现 4.朴素贝叶斯的优点和缺点 1.朴素贝叶斯实现垃圾邮件分类的步骤 (1)收集数据:提供文本文件. (2)准备数据:将文本文件解析 ...
- 机器学习之朴素贝叶斯实现垃圾邮件过滤
一.朴素贝叶斯概述 朴素贝叶斯法是基于贝叶斯定理与特征条件独立性假设的分类方法.对于给定的训练集,首先基于特征条件独立假设学习输入输出的联合概率分布(朴素贝叶斯法这种通过学习得到模型的机制,显然属于生 ...
- 机器学习:朴素贝叶斯算法与垃圾邮件过滤
简介 贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决"逆向概率"的问题.首先我们先来解释下正向概率与逆向概率的含义: 正向概率:假设一个箱子里有5个黄色球和 ...
- 朴素贝叶斯算法实现垃圾邮件过滤
朴素贝叶斯算法实现垃圾邮件过滤 1.1 题目的主要研究内容 (1)贝叶斯垃圾邮件过滤技术是一种电子邮件过滤的统计学技术,它使用贝叶斯分类来进行垃圾邮件的判别. (2)贝叶斯分类的运作是借着使用标记(一 ...
- 朴素贝叶斯——垃圾邮件过滤
文章目录 利用朴素贝叶斯进行文档分类 1.获取数据集 2.切分文本 3.构建词表和分类 4.构建分类器 5.测试算法 利用朴素贝叶斯进行垃圾邮件过滤 1.导入数据集 2.垃圾邮件预测 总结 利用朴素贝 ...
- 数据嗨客 | 第3期:朴素贝叶斯和垃圾邮件过滤 机器学习 2016-11-01 0 摘要:概率论只不过是把常识用数学公式表达了出来。 概率论只不过是把常识用数学公式表达了出来。 —
数据嗨客 | 第3期:朴素贝叶斯和垃圾邮件过滤 机器学习 2016-11-01 0 摘要:概率论只不过是把常识用数学公式表达了出来. 概率论只不过是把常识用数学公式表达了出来. ----拉普拉斯 由于 ...
- 【机器学习】贝叶斯算法详解 + 公式推导 + 垃圾邮件过滤实战 + Python代码实现
文章目录 一.贝叶斯简介 二.贝叶斯公式推导 三.拼写纠正案例 四.垃圾邮件过滤案例 4.1 问题描述 4.2 朴素贝叶斯引入 五.基于朴素贝叶斯的垃圾邮件过滤实战 5.1 导入相关库 5.2 邮件数 ...
- 朴素贝叶斯算法--垃圾邮件过滤
文章目录 一.朴素贝叶斯概述 1.贝叶斯决策理论 2.条件概率 3.朴素贝叶斯 4.朴素贝叶斯一般过程 二.朴素贝叶斯算法--垃圾邮件 1.准备数据:从文本中构建词向量 2.训练算法:从词向量计算概率 ...
- 【机器学习实战】朴素贝叶斯应用之垃圾邮件过滤
1.什么是朴素贝叶斯 2.贝叶斯公式 3.朴素贝叶斯常用的三个模型 4.朴素贝叶斯实现垃圾邮件过滤的步骤 5.垃圾邮件过滤实验: (一).准备收集好的数据集,并下载到本地文件夹 (二).朴素贝叶斯分类 ...
最新文章
- linux制作共享服务器,Linux如何制作一个简单的共享服务器
- 被前公司辞退后,前领导打电话命令你给前同事解释代码,该怎么办?
- 网络yum源 自定义yum仓库 zip备份 编译安装
- hdu 1081To The Max
- 唤醒控件曾经拥有的能力
- 一场媲美“超女”海选的招聘狂潮
- FTP协议、电子邮件系统与Telnet远程控制
- CSS3动画 - 图片开关灯阴影动画
- Linux学习一周初体验
- [转载]一个任务超时退出的装饰器,用起来真方便
- 应聘游戏策划是否该将完整策划案给面试官看
- 计算机用户名显示TEMP,windows7登陆创建TEMP临时个人配置文件夹解决方法-系统操作与应用
-亦是美网络...
- 物联网技术体系(一)
- Django--表单
- 计算机语言点餐笑话,笑话:逗逼的程序员去点餐,结果·····
- 车型数据api 根据车系查询车型数据
- 转自啄木鸟学院-IT行业培训班出来的人真的不行吗?
- 华为fusion超融合虚拟服务器,华为FusionCube超融合:满足客户未来一切云化所需...
- 男人也勾魂(航爷钦定题目,汗!)
- 马毅沈向洋曹颖最新AI综述火了!耗时3月打造,网友:必读论文
热门文章
- adg类似于mysql半同步机制_MySQL基准测试异步复制和半同步复制延迟对比
- python3.6下载百度云_Python3.6零基础入门与爬虫案例开发教程
- vxworks操作系统_【7.10开播】最新自主研发工业操作系统发布会行业top来助阵,邀您共同见证(附报名)...
- ios 推送消息 php推送
- PowerSploit-CodeExecution(代码执行)脚本渗透实战
- JZOJ5906 传送门
- Java知识点梳理——继承
- C++调用python(C++)
- Windows 下配置Apache+MySql+PHP环境(原创)
- ASP.NET学习路线图