朴素贝叶斯分类器_以python为工具【Python机器学习系列(十三)】 3 X5 ~( P* I: w0 C& `. R7 t: f- D1 i
文章目录 ) Z- `6 g9 v( h) o1. 朴素贝叶斯算法原理* T5 m* F1 t: u/ x5 r+ a, _" q
2. sklearn提供的朴素贝叶斯算法9 ]$ o: B; Q2 e' N
3. 伯努利朴素贝叶斯 BernoulliNB(): y8 `3 d4 o& b
4. 多项式朴素贝叶斯 MultinomialNB() $ W3 w s' e" }5 B6 ?5. 高斯朴素贝叶斯 GaussianNB(); G9 O( }3 [3 x0 k
ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞ 1 f' }$ B' c2 D4 v/ u8 |* X& g) h0 z" u) w
ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞ 5 h0 V8 I& B8 Y% {9 W7 }( Q+ v2 V V 7 y& O. t. u! }大家好,我是侯小啾!, m* R4 G# G L! b V+ v' e
o a7 E' `5 M2 S. m7 N 今天分享的话题是朴素贝叶斯分类器算法。 3 [" C3 I$ }2 Y: S' K# U; O) J7 k+ L9 C! m# k* W
🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ 7 q' I. j" b- Q* N- i5 a2 G% I% W, {! a8 P( j: e A
1. 朴素贝叶斯算法原理! Y( T! V" @: o8 ^4 R' J5 O" N
使用贝叶斯算法,首先需要理解的是以下两个公式:5 p; U1 }9 H# d6 V% Z
4 Z, m6 v6 ]3 i7 c% c% L- R全概率公式 # s8 F8 p3 h& ^" M: V0 Z4 l2 r& b, Y ( B ) = P ( A 1 ) × P ( B ∣ A 1 ) + P ( A 2 ) × P ( B ∣ A 2 ) + . . . + P ( A n ) × P ( B ∣ A n ) P(B)=P(A_1)×P(B|A_1)+P(A_2)×P(B|A_2)+...+P(A_n)×P(B|A_n)P(B)=P(A ! Y' ^$ @3 ?. f8 Z7 i6 c& G1 ; t/ X( U/ z; }& M x* L+ h$ U, y5 S1 z+ _% y
)×P(B∣A - D$ m& ]- I" E" Q/ R
1 9 M/ z0 F) {5 b" _ 2 J9 ~3 |9 W% ?6 ~- I& |" Q3 ^1 ^0 ^ )+P(A 1 |" W; }+ Y4 E2 C+ L& \: ~& A1 s5 \
]0 E4 n* x8 c9 n, H0 y; l% s- g, ^
)×P(B∣A l, O; T o" U/ {2# U/ I' x8 c3 R0 \' _
9 X9 X1 K: g2 I$ J )+...+P(A 8 F p' j. [! y% un4 p& p, q% `. X! V, u* ^* ]/ j( i
6 V# C6 ]3 W* k7 _) o/ z, J )×P(B∣A " Y5 o6 x& ?5 L l1 ln " o' q% v3 Y* D$ D5 F6 n. d4 i% i9 R% p7 g% G5 R6 b8 ^+ U6 g* x
)! ^* |. x$ V+ V) q5 R
2 U0 _% R% F2 h/ ?贝叶斯公式1 Y" ^/ e, |0 U7 j7 S8 H8 R+ o% K
" `1 Y4 U. a4 K5 d ( A ∣ B ) = P(A|B)=P(A∣B)=P ( A ) × P ( B ∣ A ) P ( B ) \frac{P(A)×P(B|A)}{P(B)} ' H$ b1 v2 Q0 Z: W& R0 m
P(B)/ h- G6 T* f4 |6 B6 W
P(A)×P(B∣A)* K9 p/ D( }9 B
+ y# \) B" w3 h, A t9 _6 m
' k$ K' I/ q s
/ @* g" Y7 D4 Y7 ~+ d( N 或 2 N2 p; j& k4 c! y 2 E" H" M1 p7 L5 \( f ( A n ∣ B ) = P(A_n|B)=P(A , ?. l3 O0 Z. Y6 ~
n # I0 `* [8 l U' u7 O e$ W5 G, {* E- ~$ G
∣B)=P ( A n ) × P ( B ∣ A n ) P ( B ) \frac{P(A_n)×P(B|A_n)}{P(B)} 7 E8 K# d4 |! W' w& K9 B$ c
P(B) ; ^( ^+ c1 @& W# C" L, _- X6 A; bP(A " k4 W, w2 ]% L2 h- z! [2 Y4 on h* \2 r9 I" b0 p; B 2 ~3 P( `' x1 e* e: Y1 ] )×P(B∣A 9 x. p; |: S$ s; ~n& A. w3 |8 z8 b9 a
2 Y' T4 [0 v6 _' u2 a# K
) $ d" Q" K, j- Z& _0 j) o" p' N+ A8 y. f+ d M. b1 K& r" r W5 v
1 Y5 {, b/ l3 X2 L9 b4 L
6 j& B+ R/ J5 \- W; ?" E
通俗地讲,假设需要将对某样本分为为0和1二类,其有A,B,C三个特征且值分别为a、b、c,* s6 ?7 I& |/ C3 W
则只需要求出,在类别为0前提下特证A、B、C分别为a、b、c的概率:" _& r3 G/ S. r( A! D8 c' ]
5 k' [. V+ v4 h 即P ( A = a , B = b , C = c ∣ 类别为 0 ) P(A=a,B=b,C=c|类别为0)P(A=a,B=b,C=c∣类别为0) $ R" ^- x |' v# W" I: b+ Z8 ~$ b$ c. b z$ V& E
和在类别为1的前提下特征A、B、C分别为a、b、c的概率:' j+ n7 M3 C- m- c) O. Z
! S5 h( @, s/ a/ B* q 即P ( A = a , B = b , C = c ∣ 类别为 1 ) P(A=a,B=b,C=c|类别为1)P(A=a,B=b,C=c∣类别为1), B7 b5 a, S. r) O: T
1 v5 Z# ^4 _2 K* O6 c即可。 ) q4 A# d7 z% l8 r% ?然后将这两个概率作比较,大者,则为朴素贝叶斯决策结果所属类别。- K3 I/ [6 d2 J f
或者也可以求出在特征为目标特征的前提下,类别为某类别的概率,这样比较出的结果也是会是一致的。 ! y$ I5 u/ e& z6 x4 U+ N8 Z0 P+ d# F7 Q# |. |
2. sklearn提供的朴素贝叶斯算法 7 v7 I% V2 D! ^4 l在python的scikit-learn库中,一共提供了3个朴素贝叶斯的分类算法,分别是GaussianNB(),MultinomialNB()和BernoulliNB()。, w, ?) @+ h2 W3 x# d) g1 ]4 P" a4 @: |0 o
. f1 }9 g2 r9 i! Z- I$ w& }2 Y
其中," E7 f x) F" ^- }- I
BernoulliNB() 则表示先验为 伯努利分布 的朴素贝叶斯; ; w1 T! q) g+ _, P5 UMultinomialNB() 表示先验为 多项式分布 的朴素贝叶斯; ' ]" J2 ^ y, v1 e7 f" PGaussianNB() 表示先验为 高斯分布(即正态分布)的朴素贝叶斯。 4 `& A. }& S4 O. x: {: i - M0 b) c1 A: W! M, X+ u9 i& Y: U伯努利朴素贝叶斯 & n9 a' N0 a) V6 D% O其中伯努利分布的较为简单,因为伯努利分布的样本的特征值是离散型的分布,且特征都只有两个取值(比如0或1,是或否)。2 `0 x4 G J# g1 t9 E1 V+ k) k
多个特征,则对应多个相互独立的伯努利实验,每个实验只进行一次。比如,特征甲,可以是抛一枚硬币,结果可以是正面和反面。特征乙可以是昨天是否下雨,结果可以是“是”或“否”。 9 v) P$ ^1 L& |: z5 @如果特征值是连续的,则算法中可以设定一个阈值(参数名为binarize),对特征值进行二值化处理,后即可满足伯努利分布。 3 [# Q) g9 A' z0 [& X) V) ^, ^3 M7 D
多项式朴素贝叶斯/ z5 b8 O2 M U' I* h' O: ?! H
多项式分布则是在伯努利分布的基础上进行了多次实验。多项式分布下的多个特征依然分别对应着相互独立的实验,但与伯努利不同的是,每个特征的实验进行了多次。比如,特征甲可以是抛10次硬币正面的次数,特征乙可以是过去七天中下雨的天数(假设每天下雨的概率都一样)。 ! I# A( p+ z" F, W & f9 }- Z& {" v0 Q8 E9 W2 S5 K高斯朴素贝叶斯2 ^" z, E9 x' K, @! ~* ^
伯努利朴素贝叶斯算法和多项式朴素贝叶斯算法都是对于离散特征的,高斯朴素贝叶斯则常用于连续特征的情况下。高斯朴素贝叶斯假设特征满足高斯分布(正态分布)。如特征为“某地高中生的身高”时,就使用高斯朴素贝叶斯。 4 |4 c; K1 P$ b0 \$ X7 s4 B - s& e, Q3 U$ T. Z _1 b5 C3 i3. 伯努利朴素贝叶斯 BernoulliNB()( O6 X6 Y: B! z5 F
导包,并准备一组数据,代码如下图所示:) @4 @. _5 ]) W3 A7 S
6 D- j p& ]" S$ ^
import numpy as np ' f" L# z1 \# ~; d2 l8 ifrom sklearn.naive_bayes import BernoulliNB: ~. e* @9 t/ {, g) N4 Z2 y. m
from sklearn.datasets import make_blobs 1 V! m0 W5 W" o( jfrom sklearn.model_selection import train_test_split$ S+ ~7 Q: G- `! M- e