zoukankan      html  css  js  c++  java
  • 朴素贝叶斯

    常用tricks

    1)平滑技术:拉普拉斯平滑

     

    2)对极大似然式子取对数

    算法理论

    判断一个样本x属于哪个类别y1, y2, y3……, 即是判断max( P(y1|x), P(y2|x), P(y3|x)….),若最大值是P(yi|x), 那么样本x就属于i类别。

    那么该如何求解P(yk|x)?

     

    这里c = yk,

    因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:

     

    根据我们的样本,很容易计算出P(a1|yi), P(a2|yi)…….,得到一系列P(x|yi)P(yi)的值后,最大值所对应的i值就是样本x的类别。

    Tip:

    1)实际应用中如果P(ak|yi)为0,那么P(x|yi)P(yi)就为0,我们可以将ak初始化为1,分母初始化为2

    2)下溢问题,如果P(ak|yi)值很小,那么他们的乘积便会非常小,一种办法就是对乘积去对数。

    使用

    1)多项分布朴素贝叶斯

    我们假设各特征属性条件独立,这里假设特征属性服从多项式分布,P(ak|yi)与下式相等

     

    式中 Nyi是训练集T中特征i在类y中出现的次数,Ny是类y中出现所有特征的计数总和。

    先验平滑因子α>=0 应用于在学习样本中没有出现的特征,以防在将来的计算中出现0概率输出。把α = 1 被称为拉普拉斯平滑(Lapalce smoothing),而α < 1 被称为利德斯通(Lidstone smoothing)

    from sklearn.naive_bayes import MultinomialNB

    2)高斯朴素贝叶斯

    我们假设各特征属性条件独立,这里假设特征属性服从多项式分布,P(ak|yi)与下式相等

     

    from sklearn.naive_bayes import GaussianNB

  • 相关阅读:
    Oracle数据库之SQL基础和分支循环
    Oracle数据库基础--存储过程和函数
    oracle 子查询中null的问题(in 和 not in)
    Oracle伪列rownum
    Java基础之I/O流
    Java基础之Comparable接口, Collections类,Iterator接口,泛型(Generic)
    java基础之容器、集合、集合常用方法
    Java基础之常用类
    电子宠物加强版
    SIGAI机器学习第九集 数据降维2
  • 原文地址:https://www.cnblogs.com/yongfuxue/p/10094727.html
Copyright © 2011-2022 走看看