0
点赞
收藏
分享

微信扫一扫

使用Python实现贝叶斯分类器-------文章中有源码


一、实验目的

使用Python实现贝叶斯分类器。

二、实验原理

算法原理

假设y 的取值有y1,y2……yn.

x的特征有x1,x2 ……xm.

则朴素贝叶斯及当x={x1i, x2i, ……xmi}时比较y取值概率的大小。

即max(p(y|{x1i, x2i, ……xmi}))

而p(y|{x1i, x2i, ……xmi}) = p(y{x1i, x2i, ……xmi})/p({x1i, x2i, ……xmi})

=p({x1i, x2i, ……xmi}|y)p(y)/p({x1i, x2i, ……xmi})

而各个x相互独立,(类似于有放回)

则原式=p(x1i|y)p(x2i|y)……*p(xmi|y)p(y)/p({x1i, x2i, ……xmi})

各式都将除以p({x1i, x2i, ……xmi})

因此即比较max(p({x1i, x2i, ……xmi}|y)p(y))

三、Python包

(1)numpy

四、实验内容

数据如下,x1, x2 为特征,y为标签

预测当x=[2, S]T时,y的取值。

代码:

import numpy as np


def getData():
x = [[1, 'S'], [1, 'M'], [1, 'M'], [1, 'S'], [1, 'S'],
[2, 'S'], [2, 'M'], [2, 'M'], [2, 'L'], [2, 'L'],
[3, 'L'], [3, 'M'], [3, 'M'], [3, 'L'], [3, 'L']]
y = [-1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1]
return np.array(x), np.array(y)


def Bayes(x, y, x1, x2):
Y = list(set(y))
a, a1, b, b1, c, c1 = 0,0,0,0,0,0
for i in range(15):
if y[i] == Y[0]: # Y[0]=1
c += 1
if x[i][0] == x1: # x1=X[0]=2
a += 1
if x[i][1] == x2: # x2=X[1]=S
a1 += 1
if y[i] == Y[1]: # Y[1]=-1
c1 += 1
if x[i][0] == x1:
b += 1
if x[i][1] == x2:
b1 += 1
P1 = (c / len(y)) * (a / c) * (a1 / c)
P2 = (c1 / len(y)) * (b / c1) * (b1 / c1)
if P1 > P2:
return Y[0]
if P1 < P2:
return Y[1]


if __name__ == '__main__':
x, y = getData()
X = ['2', 'S']
print(X)
result = Bayes(x, y, X[0], X[1])
print( result)

截图:使用Python实现贝叶斯分类器-------文章中有源码_python



举报

相关推荐

0 条评论