理论知识是参考的《统计学习方法》第四章
def bayes(X,y,y_set,xi): #X是训练数据的输入,y是训练数据的分类,y_set是所有的分类,xi是预测数据的输入
dictY = {} #记录每一个类的输入 dictY[Ck]包含了所有分类为Ck的输入数据
pY = {} #记录每一个类的出现次数 ∑I(y=Ck)
maxP = 0
pred = 0 #预测值
#依据不同的概率模型,P(x|y)的计算方式也不同,这里与书上的计算方法相同
for i in range(len(y)):
dictY.setdefault(y[i],[])
dictY[y[i]].append(X[i])
pY.setdefault(y[i],0)
pY[y[i]] += 1
for ck in y_set:
curP = pY[ck] / len(y) #每个类的概率等于出现次数除以总训练实例数
xs = dictY[ck] #所有分类为ck的输入数据
for i in range(len(xi)):
sumXi = sum(xs[x][i] == xi[i] for x in range(len(xs)))
curP *= sumXi / len(xs)
if curP > maxP:
maxP = curP
pred = ck
print(maxP) #后验概率最大化,注意这是后验概率的分子(分母都一样,所以不考虑)
return ck #预测的分类
课本例题测试:
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]
bayes(X,y,[1,-1],[2,'S'])
1694

被折叠的 条评论
为什么被折叠?



