統(tǒng)計學(xué)習(xí)方法——樸素貝葉斯法原理
1. 貝葉斯估計
1.1 為什么要用貝葉斯估計(極大似然的缺點(diǎn))
1.2 貝葉斯估計原理
貝葉斯估計的算法過程合極大似然估計的算法過程一模一樣,代碼也幾乎一模一樣,只是加了一個λ。
2. Python代碼
def
priorProbability
(
labelList
,
Lambda
)
:
# 加入一個lambda
labelSet
=
set
(
labelList
)
labelCountDict
=
{
}
for
label
in
labelList
:
if
label
not
in
labelCountDict
:
labelCountDict
[
label
]
=
0
labelCountDict
[
label
]
+=
1
priorProbabilityDict
=
{
}
for
label
in
labelSet
:
priorProbabilityDict
[
label
]
=
(
labelCountDict
[
label
]
+
Lambda
)
/
(
len
(
labelList
)
+
len
(
labelSet
)
*
Lambda
)
return
priorProbabilityDict
def
conditionProbability
(
dataSet
,
labelList
,
Lambda
)
:
dimNum
=
len
(
dataSet
[
0
]
)
characterVal
=
[
]
for
i
in
range
(
dimNum
)
:
temp
=
[
]
for
j
in
range
(
len
(
dataSet
)
)
:
if
dataSet
[
j
]
[
i
]
not
in
temp
:
temp
.
append
(
dataSet
[
j
]
[
i
]
)
characterVal
.
append
(
temp
)
probability
=
[
]
labelSet
=
list
(
set
(
labelList
)
)
for
dim
in
range
(
dimNum
)
:
tempMemories
=
{
}
for
val
in
characterVal
[
dim
]
:
for
label
in
labelSet
:
labelCount
=
0
mixCount
=
0
for
i
in
range
(
len
(
labelList
)
)
:
if
labelList
[
i
]
==
label
:
labelCount
+=
1
if
dataSet
[
i
]
[
dim
]
==
val
:
mixCount
+=
1
tempMemories
[
str
(
val
)
+
"|"
+
str
(
label
)
]
=
(
mixCount
+
Lambda
)
/
(
labelCount
+
len
(
characterVal
[
dim
]
)
*
Lambda
)
probability
.
append
(
tempMemories
)
return
probability
def
naiveBayes
(
x
,
dataSet
,
labelList
,
Lambda
)
:
priorProbabilityDict
=
priorProbability
(
labelList
,
Lambda
)
probability
=
conditionProbability
(
dataSet
,
labelList
,
Lambda
)
bayesProbability
=
{
}
labelSet
=
list
(
set
(
labelList
)
)
for
label
in
labelSet
:
tempProb
=
priorProbabilityDict
[
label
]
for
dim
in
range
(
len
(
x
)
)
:
tempProb
*=
probability
[
dim
]
[
str
(
x
[
dim
]
)
+
"|"
+
str
(
label
)
]
bayesProbability
[
label
]
=
tempProb
result
=
sorted
(
bayesProbability
.
items
(
)
,
key
=
lambda
x
:
x
[
1
]
,
reverse
=
True
)
return
result
[
0
]
[
0
]
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
