二师兄养成记正式开始, 以后就写这了。 
写的不对的、有疑问的,恳请大佬指出来。
一. 贝叶斯定理
1.  条件概率:
P(A | B) = P(A B) / P(B) = P(A U B)/ P(B),  表示 A在B条件下发生的概率=  AB共同发生的概率 / B 发生的概率。
2.   贝叶斯定理:
已知 A在B条件下发生的概率 P(A | B), B发生的概率P(B), 求 P(B | A)发生的概率。
贝叶斯定理如下:
P(B | A) =  P(A | B)  P(B) / P(A) 
二. NaiveBayes 算法
朴素贝叶斯之所以朴素,是有假设前提条件的: 假设每个特征之前相互独立,那么联合概率:
P(A B) = P(A)P(B) 
假设 A事件可以完全切分为{ A1,A2,...., An}(全概率公式)
P(A1,A2,A3,...,An | B) = P(A1 | B) P(A2 | B)  P(A3 | B) ... P(An | B) 
那么NaiveBayes模型可以表示为:
P(B | A1,A2,A3, ... , An)= P(A1,A2,A3,...,An | B) P(B)  / P(A1,A2,A3,...,An)                                P(A1,A2,A3,...,An | B) 又称后验概率
在各特征完全独立的情况下,则为:
P(B | A1,A2,A3, ... , An) = P(A1 | B)  P(A2 | B)  P(A3 | B) ... P(An | B) * P(B)/ P(A1)P(A2)...P(An)
在机器学习里, 我们可以将上式的A1, A2至 An认为数据集的特征,B({B1,B2,..., Bn})为类标签。
那么 P(B | A1,A2,A3,...,An)可以表示为  在A1,至An的特征条件下,类别为B的概率。
但是很难统计这个多条件下的条件概率, 所以Bayes定理就是解决这个问题的。
Bayes  分类器就是求得 最大后验概率 P(A1,A2,A3,...,An | B),来估计P(B) 和 P(Ai | B) , 因为 P(A1,A2,A3,...,An) 和P(B) 在训练数据给定时就已经是不变的常数。
Machine Learning 里 常用 X1,X2,X3, ... , Xi 表示特征, Y1,Y2,...,Yj表示类标签, 所以朴素贝叶斯算法的公式可以表示为:
三.  参数估计
上述介绍了只需要求出P(A1 | B)  P(A2 | B)  P(A3 | B) ... P(An | B) ,就可以求得 朴素贝叶斯计算结果.
假设 类标签B有3个值: B1,B2和B3,
我们要计算 P(B1 | A1, A2,..., An) =P(A1 | B1)  P(A2 | B1)  P(A3 | B1) ... P(An | B1) P(B1) / P(A1,A2,A3,...,An) 
但具体怎么求 P(B1)是个问题,所以采用极大似然估计法,以分类样本中B1占比(频率代替概率)来估计B1的概率 : P(B1) = Count(B1) /  Sum(Bi) 
对于上面公式1 中 P(Y=Yj) 可以使用极大似然估计求得,但P( X=Xi | Y=Yj)  如何求,那要根据特征Xi的分布确定:
① 若Xi为离散值,假设Xi符合多项式分布,那么P( X=Xi | Y=Yj)就是 Xi在 Yi类中出现的频率:
(Sklearn教程的解释)
② 若Xi为稀疏离散值值, 可以假设Xi满足 伯努利分布, 可以使用伯努利分布公式求得P( X=Xi | Y=Yj):
③ 若 Xi为连续值, 假设Xi服从 正态分布,那么可以使用正态分布式子求得P( X=Xi | Y=Yj):
四. 实例解释朴素贝叶斯的执行过程(特征值都为离散值)
这是一个什么自然条件下打网球的训练数据(维度:14行×5列):
四个特征为 天气、温度、湿度和风强
标签:Yes:打网球,No:不打。
Day
Outlook
Temperature
Humidity
Wind
PlayTennis
D1
Sunny
Hot
High
Weak
No
D2
Sunny
Hot
High
Strong
No
D3
Overcast
Hot
High
Weak
Yes 1
D4
Rain
Mild
High
Weak
Yes 2
D5
Rain
Cool
Normal
Weak
Yes 3
D6
Rain
Cool
Normal
Strong
No
D7
Overcast
Cool
Normal
Strong
Yes 4
D8
Sunny
Mild
High
Weak
No
D9
Sunny
Cool
Normal
Weak
Yes 5
D10
Rain
Mild
Normal
Weak
Yes 6
D11
Sunny
Mild
Normal
Strong
Yes 7
D12
Overcast
Mild
High
Strong
Yes 8
D13
Overcast
Hot
Normal
Weak
Yes 9
D14
Rain
Mild
High
Strong
No
(示例表格内的数据来自 https://wizardforcel.gitbooks.io/dm-algo-top10/content/naive-bayes.html)
可以将 Outlook, Temperature, Humidity, Wind,看做特征A1,A2, A3, A4  ;   
那么分类标签Yes,可以看做B, No为B拔(互斥事件)。
由上图可以计算得到  P(Yes) = 9/14 , P(No) = 5 / 14,
特征之间完全独立, 所以:
P( Sunny | Yes) * P(Hot | Yes)* P(High | Yes) * P(Weak | Yes) *P(Yes) = P(Sunny, Hot, High, Weak | Yes)、
计算过程:          
P(Yes | Sunny, Hot, High, Weak) = P( Sunny | Yes) * P(Hot | Yes)* P(High | Yes) * P(Weak | Yes) * P(Yes) /  P(Sunny)* P(Hot) * P(High) * P(Weak) 
= (  *    *    *  )  *  /  (   *   *    *)    
注:  P(Sunny)* P(Hot) * P(High) * P(Weak)    表示纵向各特征值的占比,频率代替概率。
预测过程如下
①计算在 Sunny, Hot, High, Weak 特征条件下,  分类为Yes的概率:
假设 P(Yes | Sunny, Hot, High, Weak)= Value1
② 计算 在 Sunny, Hot, High, Weak 特征条件下 ,分类为No的概率:
P(No | Sunny, Hot, High, Weak) = Value2
注: 因为类标签只有Yes和No,所以只需要计算2次。   
③ 类分类判断
当且仅当:
Value1 > Value2时, Sunny, Hot, High, Weak 特征条件下,其分类为Yes
过程解释, 假设 有特征列X1,X2,X3,..., Xn; 分类标签 Y1, Y2, Y3, ... , Yn:
计算:
P(Y1 | X1,X2, X3, ..., Xn)= Value1 ,
P(Y2 | X1,X2, X3, ..., Xn)= Value2 ,
P(Y1 | X1,X2, X3, ..., Xn)= Value3,
P(Yn | X1,X2, X3, ..., Xn)= ValueN,
选择:
max(Value1, Value2,..., ValueN)对应的 Yi作为当前数据的 类标签。
之所以可以这样预测是因为 训练集的数据给我们提供了先验概率和后验概率的值。
五. 代码实现
1.  Sklearn里的Bayes使用
1 from sklearn.naive_bayes import MultinomialNB         # 多项式
2 clf = MultinomialNB()     
3 clf.fit(train_set, train_label)

2.  上述代码解释
第1行 ,从sklearn的naive_bayes导入 类MulitnomialNB (多项式贝叶斯) 
第2行 ,创建多项式贝叶斯的对象
第3行 ,传入输入值(训练集特征)、标签属性(输入数据每行对应的标签值),开始训练模型。
3.  Scipy-learn 中的 函数及其参数
① 多项式朴素贝叶斯
class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
alpha=1.0 ,  float, optional (default=1.0) ;                  平滑参数(拉普拉斯 / 利斯通 )。
fit_prior=True, boolean, optional (default=True) ;      是否学习先验概率, if False, 使用统一的先验概率。
class_prior=None,   array-like, size (n_classes,), optional (default=None); 先验概率,if 指定, 不根据数据调整先验概率。
② 伯努利朴素贝叶斯
class sklearn.naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
alpha=1.0 ,  float, optional (default=1.0) ;                      平滑参数(拉普拉斯 / 利斯通 )。
binarize=0.0, float or None, optional (default=0.0);       样本特征映射到boolean(二值化)上的阈值,if None ,假定输入为二值化特征。
fit_prior=True, boolean, optional (default=True) ;         是否学习先验概率, if False, 使用统一的先验概率。
class_prior=None,   array-like, size (n_classes,), optional (default=None); 先验概率,if 指定, 不根据数据调整先验概率。            
③ 高斯朴素贝叶斯
class sklearn.naive_bayes.GaussianNB(priors=None)
priors=None,  array-like, shape (n_classes,) ;            先验概率,if 指定, 不根据数据调整先验概率。
4.  3种朴素贝叶斯算法  
A.  Gaussian朴素贝叶斯, 其特征符合正态分布(高斯分布)
B. Mutinomial朴素贝叶斯。 
C. 伯努利朴素贝叶斯

转载于:https://www.cnblogs.com/HankCui/p/10993301.html

ML————朴素贝叶斯原理和SKlearn相关库相关推荐

  1. 数据挖掘十大算法(九):朴素贝叶斯 python和sklearn实现

    第三个算法终于算是稍有了解了,其实当你结合数据了解了它的实现原理后,你会发现确实很朴素.这里对朴素贝叶斯算法做一个介绍和总结,包括(原理.一个代码示例.sklearn实现),皆为亲自实践后的感悟,下面 ...

  2. 机器学习入门02-朴素贝叶斯原理和java实现

    朴素贝叶斯是一种基于概率统计的机器学习方法,其原理采用计算样本数据中先验数据与标签数据出现的概率,以先验数据对应最大出现概率的标签作为预测结果. 朴素贝叶斯公式一般记为:P(A|B)=P(A)*P(B ...

  3. 朴素贝叶斯算法python sklearn实现_朴素贝叶斯算法优化与 sklearn 实现

    进行拉普拉斯平滑运算后,我们运行程序,仍然得出了两个测试样本均属于非侮辱类的结果,这是为什么呢? 我们查看最终计算出的 p0 和 p1 会发现,他们的结果都是 0,这又是为什么呢? 这是因为出现了另一 ...

  4. sklearn中的朴素贝叶斯算法

    sklearn中的朴素贝叶斯分类器 之前理解朴素贝叶斯中的结尾对sklearn中的朴素贝叶斯进行了简单的介绍. 此处对sklearn中的则对sklearn中的朴素贝叶斯算法进行比较详细介绍.不过手下还 ...

  5. sklearn朴素贝叶斯分类器_朴素贝叶斯原理

    贝叶斯分类算法是统计学是一种概率分类方法,朴素贝叶斯分类时贝叶斯分类中最简单的一种.利用贝叶斯公式根据某特征的先验概率计算出其后延概率,然后选择具有最大后延概率的类作为该特征所属的类.朴素贝叶斯,称之 ...

  6. python调用sklearn中朴素贝叶斯踩坑

      调用结构: from sklearn.naive_bayes import MultinomialNB # 从sklean.naive_bayes里导入朴素贝叶斯模型 from sklearn.f ...

  7. Sklearn(v3)——朴素贝叶斯(3)

    多项式朴素贝叶斯MultinomialNB   from sklearn.preprocessing import MinMaxScaler from sklearn.naive_bayes impo ...

  8. [python机器学习及实践(2)]Sklearn实现朴素贝叶斯

    1.朴素贝叶斯简介 朴素贝叶斯(Naive Bayes)是一个基于贝叶斯理论的分类器.它会单独考量每一唯独特征被分类的条件概率,进而综合这些概率并对其所在的特征向量做出分类预测. 因此,朴素贝叶斯的基 ...

  9. 机器学习之朴素贝叶斯(一):朴素贝叶斯的介绍、概率基础(拉普拉斯平滑)、sklearn朴素贝叶斯实现API、朴素贝叶斯分类的优缺点、文本的特征工程

    朴素贝叶斯 文章目录 朴素贝叶斯 一.介绍 1.1 文本分类的应用 词云的例子 垃圾邮件分类 文章类别的概率 二.概率基础 2.1 概率例题 2.2 联合概率和条件概率 2.3 朴素贝叶斯-贝叶斯公式 ...

最新文章

  1. HTML表格颜色按条件填充,Excel单元格能否根据条件填充颜色?
  2. 设计模式学习3——装饰者模式(Decorator)
  3. python安装哪个版本-python到底安装哪个版本
  4. spring-data-jpa Specification构建动态ql
  5. 万年自学党聊聊如何选择编程学习资源?
  6. XML/YAML文件的输入输出
  7. 电话号码以185****3547显示demo
  8. 手机照片局部放大镜_往事洗照片
  9. flex布局文字溢出显示省略号失效的解决方法
  10. 微信小程序数据拼接_最佳方式实现微信小程序分页加载数据
  11. taro开发微信小程序禁止下拉刷新(ios下拉出现空白问题)
  12. OpenCore-Legacy-Patcher 0.5.1正式版
  13. 2018------书籍电影和音乐
  14. ISCC ISCC客服一号冲冲冲(二)
  15. 免费ARP(gratuitous ARP)
  16. 昆仑通态串口定义_昆仑通态-嵌to嵌串口数据转发.pdf
  17. Project 2010 学习资源
  18. 26MB160A-ASEMI单相整流桥26MB160A
  19. 病理图像相关内容整理
  20. 输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字

热门文章

  1. [转载] Python杂谈 | (6) numpy中array()和asarray()的区别
  2. [转载] 5.2 calendar--通用日期的相关函数(4)
  3. 1614700501
  4. python学习第25天
  5. 85. Maximal Rectangle 由1拼出的最大矩形
  6. Oracle 11g vs 12c 内存、优化器等默认参数对比
  7. 洛谷——P1155 双栈排序
  8. Launcher3调整壁纸清晰度
  9. 51nod 平均数(二分+树状数组)
  10. 用Java实现非阻塞通信