判別三連之三 Spark 分布式實現貝葉斯判別

2021-09-11 19:01:43 字數 3152 閱讀 3402

假 設事

件b1,

b2..

.bn是

樣本空間

ω的乙個

分割,且

他們各自

的概率為

p(b1

),p(

b2),

p(bn

)假設事件 b_1,b_2...b_n 是樣本空間ω的乙個分割,且他們各自的概率為p(b_1),p(b_2),p(b_n)

假設事件b1

​,b2

​...

bn​是

樣本空間

ω的乙個

分割,且

他們各自

的概率為

p(b1

​),p

(b2​

),p(

bn​)

a是事件ω中的乙個事件,則在a給定的條件下,事件bi的條件概率如下:

bi 通常視為a發生的」原因「,p(bi)稱為先驗概率(主觀概率),表示各種原因發生的可能性大小;p(bi|a)(i=1,2…)則反映當出現結果a之後,再對各種「原因」概率的新認識,故稱後驗概率。

大家都知道狼來了的故事,我們就有貝葉斯的思想來解釋一下這個故事:

在最開始的時候,大家對於放羊娃的認識不夠深刻,主觀上認為放羊娃說真話(記為事件b1)和說假話(記為事件b2)的概率相同。即:

p (b

1)=p

(b2)

=0.5

p(b_1) = p(b_2) = 0.5

p(b1​)

=p(b

2​)=

0.5再假設狼來了(記為事件a),說謊話喊狼來了時,狼來的概率為1/3,說真話喊狼來了時,狼來的概率是2/3,即:

p (a

∣b1)

=1/3

;p(a

∣b2)

=2/3

p(a|b_1) = 1/3 ; p(a|b_2) =2/3

p(a∣b1

​)=1

/3;p

(a∣b

2​)=

2/3第一次

村民上山

打狼,狼

沒來(記

為事件a

‾),此

時村民們

對放羊娃

就有了新

的認識:

第一次村民上山打狼,狼沒來(記為事件\overline),此時村民們對放羊娃就有了新的認識:

第一次村民上

山打狼,

狼沒來(

記為事件

a),此

時村民們

對放羊娃

就有了新

的認識:

狼沒來的情況下小孩說謊了(在村民們的主觀印象上,小孩說謊的概率增加了):

p (b

1∣a‾

)=p(

a‾∣b

1)p(

b1)∑

k=1n

p(a‾

∣bi)

p(bi

)=811

p(b_1|\overline)=\frac|b_1)p(b_1)}^n p(\overline|b_i)p(b_i)} = \frac

p(b1​∣

a)=∑

k=1n

​p(a

∣bi​

)p(b

i​)p

(a∣b

1​)p

(b1​

)​=1

18​

隨著小孩說謊的次數增加,村民們對於小孩說謊的主觀概率也不斷增加,當這個概率增加到一定程度時計算小孩說真話,村民們就不會再相信他。

之前提到的兩種判別分析方法都非常簡單,實用,但是也存在著一定的缺點:一是判別方法與各個總體出現的概率大小無關,而是與錯判後造成的損失無關。貝葉斯判別則考慮了這兩種情況:貝葉斯判別假定對樣本有一定的認知(先驗概率),然後計算得出後驗概率並進行統計推斷的判別方法。

由於過程較長,公式比較多,直接上書

本案例使用的資料為鳶尾花資料集

def main(args: array[string]): unit = )

.reducebykey((d1, d2) => )

.mapvalues(tp => )

val covbroad = sc.broadcast(covmatrix.collect())

val predictudf = udf((seq: seq[double]) => )

val pm = dist.map(x => math.exp(x._2)).sum

// 計算後驗概率

dist.map(tp => )

})irisfeatrus

.withcolumn("prediction", predictudf($"features"))

.show(truncate = false)

spark.stop()

}

結果檢視:從結果看出,分類效果還是很好的

|class      |features            |prediction |

+-----------+--------------------+-----------+

|iris-setosa|[5.1, 3.5, 1.4, 0.2]|iris-setosa|

|iris-setosa|[4.9, 3.0, 1.4, 0.2]|iris-setosa|

|iris-setosa|[4.7, 3.2, 1.3, 0.2]|iris-setosa|

由於作者水平有限,在介紹及實現過程中難免有紕漏之處,歡迎細心的朋友指

判別三連之二 Spark 分布式實現距離判別分析

設有兩個總體g1,g2,從第乙個總體抽取n個樣本,從第二個總體中抽取m個樣本,每個樣本都有p個測量指標。取任一樣本實測指標為x x1,x2,xp 分別計算x到兩個總體的距離d1,d2,按距離最近準則判別歸類。距離計算公式 馬氏距離 判別公式 某商場從市場隨機抽取20中品牌的電視機進行調查,其中13中...

單身三連之三

這是最終章,永久的思念。題目大意 有n張牌,每張牌兩面都有數字,範圍都在1到2n之間,求最少的反轉次數,使得每張牌朝上的一面的數字各不相同,並求出達到這個效果的方案數。多測,初始時每張牌正面朝上,無解輸出 1 1 題解 20 資料 n 20 直接搜尋即可。100 資料 n 1 105 搜尋複雜度不允...

Redis之(三) 分布式鎖

分布式應用進行邏輯處理時經常會遇到併發問題。對於單程序的併發場景,我們可以使用語言或者類庫提供的鎖,而對於分布式場景,我們可以使用分布式鎖。分布式鎖的實現方法也有很多,memcached分布式鎖 zookeeper分布式鎖等等,當然,redis分布式鎖也是很有代表性的分布式鎖的實現方式。例子 某個操...