Giter Club home page Giter Club logo

bayesspam's Introduction

BayesSpam

python实现基于贝叶斯的简单垃圾邮件分类 在400封邮件(正常邮件与垃圾邮件各一半)的测试集中测试结果为分类准确率95.15%,在仅仅统计词频计算概率的情况下,分类结果还是相当不错的。 1、准备工作 python3.4开发环境; 结巴分词工具:https://github.com/fxsjy/jieba

2、贝叶斯公式 我们要做的是计算在已知词向量$w=(w_1,w_2,...,w_n)$的条件下求包含该词向量邮件是否为垃圾邮件的概率,即求:

$P(s|w),w=(w_1,w_2,...,w_n)$ 其中,$s$表示分类为垃圾邮件 根据贝叶斯公式和全概率公式, $P(s|w_1,w_2,...,w_n)$ $=\frac {P(s,w_1,w_2,...,w_n)}{P(w_1,w_2,...,w_n)}$ $=\frac {P(w_1,w_2,...,w_n|s)P(s)}{P(w_1,w_2,...,w_n)}$ $=\frac {P(w_1,w_2,...,w_n|s)P(s)}{P(w_1,w_2,...,w_n|s)\cdot p(s)+P(w_1,w_2,...,w_n|s^{'})\cdot p(s^{'})}\qquad\qquad...式1$ 根据朴素贝叶斯的条件独立假设,并设先验概率$P(s)=P(s^{'})=0.5$,上式可化为: $=\frac {\prod\limits_{j=1}^nP(w_j|s)}{\prod\limits_{j=1}^nP(w_j|s)+\prod\limits_{j=1}^nP(w_j|s^{'})}$ 再利用贝叶斯$P(w_j|s)=\frac{P(s|w_j)\cdot P(w_j)}{P(s)}$,式子化为 $=\frac {\prod\limits_{j=1}^nP(s|w_j)}{\prod\limits_{j=1}^nP(s|w_j)+\prod\limits_{j=1}^nP(s^{'}|w_j)}$ $=\frac {\prod\limits_{j=1}^nP(s|w_j)}{\prod\limits_{j=1}^nP(s|w_j)+\prod\limits_{j=1}^n\left(1-P(s|w_j)\right)}\qquad\qquad...式2$ 至此,我们接下来会用式2来计算概率$P(s|w)$,为什么不用式1而用式2来计算概率,是因为通过式2可以将关于$s^{'}$的部分用$s$表示,方便计算。

3、实现步骤 具体实现的源码已经给出,这里简单说下思路,就是一个分词并记录词频的过程: (1)对训练集用结巴分词,并用停用表进行简单过滤,然后使用正则表达式过滤掉邮件中的非中文字符; (2)分别保存正常邮件与垃圾邮件中出现的词有多少邮件出现该词,得到两个词典。例如词"疯狂"在8000封正常邮件中出现了20次,在8000封垃圾邮件中出现了200次; (3)对测试集中的每一封邮件做同样的处理,并计算得到$P(s|w)$最高的15个词,在计算过程中,若该词只出现在垃圾邮件的词典中,则令$P(w|s^{'})=0.01$,反之亦然;若都未出现,则令$P(s|w)=0.4$。PS.这里做的几个假设基于前人做的一些研究工作得出的。 (4)对得到的每封邮件中重要的15个词利用式2计算概率,若概率$>$阈值$\alpha(一般设为0.9)$,则判为垃圾邮件,否则判为正常邮件。

bayesspam's People

Contributors

shijing888 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

bayesspam's Issues

emmmm

excuse me,where is the code?:D

#error "UnicodeDecodeError" on MacOS, python3.7

文件格式为国标18030

1. 使用utf-8不能打开

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 4: invalid start byte

2. 使用encoding='gb18030'也不能打开

你好我发现了代码中的严重bug

sorted(wordProbList.items(),key=lambda d:d[1],reverse=True)[0:15] 这一行没有对wordProList产生任何影响,也就是函数并没有取前15而是返回全部词。在此基础上得到的95%是错误的。
改正这里后,我做了如下实验:
reverse=true:
15 53%
50 78%

reverse=false:
15 74%
50 90%
另外我在另一个数据集上的效果只能到75%左右,目前还没有查到是代码原因还是数据不够干净。感谢你的代码,希望取得联系,共同修改模型

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.