樸素貝葉斯分類工作原理
數學基礎
1.條件機率
設A,B 是兩個事件,則
表示在事件A發生的條件下,事件B發生的機率。其中P(A)不能為0,就是要求A是有可能的事件。
2. 聯合機率
表示兩個事件共同發生的機率。A與B的聯合機率表示為 P(AB) 或者P(A,B),或者P(A∩B)。
3. 樸素貝葉斯
因為 P(B|A)=P(AB)/P(A) 》P(AB)=P(B|A)P(A)
是以 P(A|B)=P(AB)/P(B) = P(B|A)P(A)/P(B)
即 P(A|B)=P(B|A)P(A)/P(B)
它的思想基礎是這樣的:對于給出的待分類項,求解在此項出現的條件下各個類别出現的機率,哪個最大,就認為此待分類項屬于哪個類别。
例子
一個學生有點發燒(B事件發生),感冒是A1事件,流感是A2事件,惡性良性腫瘤是A3事件
欲求 發燒的學生屬于感冒的機率為P(A1|B)=?
已知 該醫院全部患者屬于感冒的獨立機率為P(A1),屬于流感為P(A2),屬于惡性良性腫瘤為P(A3)
P(A1)=0.6,P(A2)=0.2,P(A3)=0.1
已知感冒患者中發燒的機率為90%,即P(B|A1)=0.9
流感患者中發燒的機率為80%,即P(B|A2)=0.8
惡性良性腫瘤患者中發燒的機率為60%,即P(B|A2)=0.6
發燒是由于感冒的機率:P(A1|B)=P(B|A1)P(A1)/P(B)=0.9*0.6/P(B)
發燒是由于流感的機率:P(A2|B)=P(B|A2)P(A2)/P(B)=0.8*0.2/P(B)
發燒是由于惡性良性腫瘤的機率:P(A3|B)=P(B|A2)P(A3)/P(B)=0.6*0.1/P(B)
4. 連續貝葉斯
連續樸素貝葉斯分類的定義如下:
1、設X={a1,a2,…am}為一個待分類項目,而每個a為X的一個特征屬性值。我們可以把X了解為一個新的病人,我們已經采集到了他的身高,職業,年齡等各種互不相關的臨床參數。
2、有分類集合C={y1,y2,…,yn},這個分類集合可以看成病人需要診斷的臨床結局,比如可以假定y1=感冒,y2=腦震蕩
3、計算先驗機率:P(y1|x),P(y2|x),…,P(yn|x).也就是各種結局在該病人身上的發生機率。也就是條件機率
如果P(yk|x)=max{P(y1|x),P(y2|x),…,P(yn|x)},則x∈yk.
要計算第三步的條件機率,可以通過建立一些已經知道分類情況的樣本來形成訓練樣本集。然後根據公式
來計算條件機率。在這個公式裡面P(x)對于所有類别都是常數,是以我們隻計算分子即可。又因為各特征屬性是條件獨立的。是以有:
也就是說,隻需要把特定臨床結局下各症狀的機率用連乘乘起來,再乘以該特定臨床結局的先驗分布,就可以獲得在特定一系列症狀下該臨床結局的機率。
5.正态分布密度函數
高斯分布(Gaussian Distribution)的機率密度函數(probability density function)
正态分布的期望值 決定了其位置,其标準差 決定了分布的幅度
Python代碼為:
```python
#samples為樣本,numpy數組
#求均值
mean = numpy.mean(samples)
#求一個數組的标準差
std= numpy.std(samples)
#求機率,其中x可以是一個數,或者一個numpy數組
y = numpy.exp(-(x - mean) ** 2 / (2 * std** 2)) / (math.sqrt(2 * math.pi) * std)

判斷男的女的的過程是一個分類的過程,根據以往的經驗,通常從身高、體重、鞋碼、頭發長短、服飾、聲音等角度去判斷,“經驗”就是一個訓練好了的關于性别判斷的模型,資料就是日常中遇到的各式各樣的人,以及這些人實際的性别資料
## 離散資料案例
遇到的資料分為兩種,一種是離散的,一種是連續的,離散就是不連續的意思,有明确的邊界,比如整數1,2,3就是離散的,而1到3中間的任何數,就是連續資料,可以取這個區間裡任何數值
下面資料為例子,根據之前的經驗資料,給一個新的資料:身高“高”,體重“中”,鞋碼“中”判斷男女

先确定一共有3個屬性,用A代表屬性,用A1,A2,A3分别為身高=高,體重=中,鞋碼=中,一共有兩個類别,用C表示,C1 、C2為男女,在未知情況下用Cj表示,求在A1,A2,A3的屬性下,Cj的機率,用條件機率表示就是P(Cj|A1A2A3),因為一共有2個類别,隻需要求得P(C1|A1A2A3)和P(C2|A1A2A3)的機率即可,然後比較哪個分類的可能性大,就是哪個分類

因為P(A1A2A3)是固定的,要尋找使得P(Cj|A1A2A3)的最大值就等價于求P(A1A2A3|Cj)P(Cj)的最大值,假定Ai之間是互相獨立的,那麼:P(A1A2A3|Cj) = P(A1|Cj)P(A2|Cj)P(A3|Cj) ,需要從Ai和Cj中計算出P(Ai|Cj)的機率,帶入公式得P(A1A2A3|Cj),最後找到P(A1A2A3|Cj)最大的類别Cj
P(A1A2A3|C1)P(C1) > P(A1A2A3|C2)P(C2) 是以是C1類别,是男性
## 連續資料案例
實際生活中得到的是連續數值,比如

**給你一個新資料,身高180、體重120、鞋碼41,請問該人是男是女?**
由于身高、體重、鞋碼都是**連續變量**,不能采用離散變量的方法計算機率,而且樣本太少,無法分成區間計算,這時候假設身高、體重、鞋碼都是**正态分布**,**通過樣本計算出均值和方差**,即得出**正态分布的密度函數**,有了密度函數,**把值代入,算出某一點的密度函數的值**,比如男性的身高均值179.5、标準差為3.697的正态分布,是以男性的身高為180的機率為0.1069
如何得出?可以使用Excel的NORMDIST(x,mean,standard_dev,cumulative)函數,有四個參數:
x:正态分布中,需要計算的數值
mean:正态分布的平均值
standard_dev:正态分布的标準差
cumulative:取值為邏輯值,即false 或true,決定了函數的形式,為TRUE的時候函數結果為累積分布;為false的時候,結果為機率密度
使用**NORMDIST(180,179.5,3.697,0)=0.1069**,同時計算得男性體重為120的機率為0.000382324,男性鞋碼為41的機率是0.120304111
是以**P(A1A2A3|C1)=0.1069*0.000382324*0.120304111=4.9169e-6**,該人為女的可能性為:P(A1A2A3|C2)=2.7244e-9
P(A1A2A3|C1)>P(A1A2A3|C2)
是以該資料為**男的機率大于分類為女的機率**
樸素貝葉斯分類器工作流程
常用于文本分類,尤其是對于英文來說效果很好,用于垃圾文本過濾、情感預測、推薦系統等,流程為:

***第一階段:準備階段***
需要确定特征屬性,比如上文的“身高”“體重”“鞋碼”等,并對每個**特征**屬性進行适當**劃分**,然後由人工對一部分**資料進行分類**,形成訓練樣本
分類器的品質很大程度上由特征屬性、特征屬性劃分及訓練樣本品質決定
***第二階段:訓練階段***
生成**分類器**,工作是**計算**每個**類别**在訓練樣本中的出現**頻率**及每個**特征屬性**劃分對每個類别的**條件機率**,
**輸入**是特征屬性和訓練樣本,**輸出**是分類器
***第三階段:應用階段***
使用分類器對新資料進行分類,
**輸入**是分類器和新資料,**輸出**是新資料的分類結果
## 1.離散型變量和連續變量在樸素貝葉斯模型中的處理有什麼差别?
離散型變量可以直接計算機率,連續型變量需要看成正态分布然後計算期望和标準差來計算機率
2.如果你女友在你的手機裡面發現了你和其他女人的暧昧短信,于是她開始思考3個機率問題,你來判斷下面3個機率分别屬于哪種機率:
你在沒有任何情況下,出軌的機率
如果你出軌了,那麼你的手機裡有暧昧短信的機率
在你的手機裡發現了暧昧短信,認為你出軌的機率
三種機率分别屬于先驗機率、後驗機率和條件機率的哪一種?
2.暧昧短信的出現為觀測變量,在出軌的條件下求出現暧昧短信的機率,即在隐變量的條件下計算對應觀測變量的機率為條件機率
的機率
如果你出軌了,那麼你的手機裡有暧昧短信的機率
在你的手機裡發現了暧昧短信,認為你出軌的機率
三種機率分别屬于先驗機率、後驗機率和條件機率的哪一種?
2.暧昧短信的出現為觀測變量,在出軌的條件下求出現暧昧短信的機率,即在隐變量的條件下計算對應觀測變量的機率為條件機率