zoukankan      html  css  js  c++  java
  • 朴素贝叶斯分类器的应用

    朴素贝叶斯分类实例:检测SNS社区中不真实账号

    朴素贝叶斯分类器的公式

    假设某个体有n项特征(Feature),分别为F 、F 、...、F 。现有m个类别(Category),分别为C 、C 、...、C 。贝叶斯分类器就是计算出概率最大的那个分类,也就是求下面这个算式的最大值:

    P(C|F1F2...Fn) = P(F1F2...Fn|C)P(C) / P(F1F2...Fn)

    由于 P(F1F2...Fn) 对于所有的类别都是相同的,可以省略,问题就变成了求

    P(F1F2...Fn|C)P(C)

    的最大值。

    朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此

    P(F1F2...Fn|C)P(C) 
    = P(F1|C)P(F2|C) ... P(Fn|C)P(C)

    上式等号右边的每一项,都可以从统计资料中得到,由此就可以计算出每个类别对应的概率,从而找出最大概率的那个类。

    虽然"所有特征彼此独立"这个假设,在现实中不太可能成立,但是它可以大大简化计算,而且有研究表明对分类结果的准确性影响不大。

    下面再通过两个例子,来看如何使用朴素贝叶斯分类器。

    三、账号分类的例子

    本例摘自张洋的 《算法杂货铺----分类算法之朴素贝叶斯分类》 

    根据某社区网站的抽样统计,该站10000个账号中有89%为真实账号(设为C ),11%为虚假账号(设为C )。

    C0 = 0.89

    C1 = 0.11

    接下来,就要用统计资料判断一个账号的真实性。假定某一个账号有以下三个特征:

    F1: 日志数量/注册天数 
    F2: 好友数量/注册天数 
    F3: 是否使用真实头像(真实头像为1,非真实头像为0)

    F1 = 0.1 
    F2 = 0.2 
    F3 = 0

    请问该账号是真实账号还是虚假账号?

    方法是使用朴素贝叶斯分类器,计算下面这个计算式的值。

    P(F1|C)P(F2|C)P(F3|C)P(C)

    虽然上面这些值可以从统计资料得到,但是这里有一个问题:F1和F2是连续变量,不适宜按照某个特定值计算概率。

    一个技巧是将连续值变为离散值,计算区间的概率。比如将F1分解成[0, 0.05]、(0.05, 0.2)、[0.2, +∞]三个区间,然后计算每个区间的概率。在我们这个例子中,F1等于0.1,落在第二个区间,所以计算的时候,就使用第二个区间的发生概率。

    根据统计资料,可得:

    P(F1|C0) = 0.5, P(F1|C1) = 0.1 
    P(F2|C0) = 0.7, P(F2|C1) = 0.2 
    P(F3|C0) = 0.2, P(F3|C1) = 0.9

    因此,

    P(F1|C0) P(F2|C0) P(F3|C0) P(C0) 
    = 0.5 x 0.7 x 0.2 x 0.89 
    = 0.0623

    P(F1|C1) P(F2|C1) P(F3|C1) P(C1) 
    = 0.1 x 0.2 x 0.9 x 0.11 
    = 0.00198

    可以看到,虽然这个用户没有使用真实头像,但是他是真实账号的概率,比虚假账号高出30多倍,因此判断这个账号为真。

    http://ju.outofmemory.cn/entry/119593

    每天一小步,人生一大步!Good luck~
  • 相关阅读:
    datatables ajax异步分页
    redis实现消息发布/订阅
    使用Tomcat+Redis来实现集群部署中的Session共享问题
    工具:从一个文件夹中复制jar到另一个文件夹中
    CentOS配置上网
    热力图与百度地图扩展实例
    【转】JavaWeb编码之get方式中文乱码问题
    数字转换大写核心类
    详说 Navicat for MySQL 快捷键
    MYBATIS常用的sql事例
  • 原文地址:https://www.cnblogs.com/jkmiao/p/4664595.html
Copyright © 2011-2022 走看看