贝叶斯简单学习

import numpy as np
class Bayes:
#初始化类
def init(self):
#初始化长度参数
self.length=-1
#存储标签
self.labelcount=dict()
#存储向量
self.vectorcount=dict()
#训练函数,训练集为列表,标签也为列表
def fit(self,dataset:list,labels:list):
#判断特征长度是否一致
if(len(dataset)!=len(labels)):
raise ValueError(“测试数据跟类别数组长度不一致”)
#测试数据特征值长度
self.length=len(dataset[0])
labelsnum=len(labels)#得到所有类别数量,类别数量等于测试数据数量。有重复
norlabels=set(labels)#用set去重,得到不重复类别数量
for item in norlabels:#遍历类别
thislabel=item #遍历每个类别
self.labelcount[thislabel]= labels.count(thislabel) / labelsnum#当前类别占总类别比例
for vector,label in zip(dataset,labels):#整合数据
if(label not in self.vectorcount):#如果label不在向量列表里,为第一次出现
self.vectorcount[label]=[]#初始化
self.vectorcount[label].append(vector)#当前类别所有向量
print(“训练结束”)
return self
def btest(self,testdata,labelsset):#测试数据输入
if(self.length==-1):
raise ValueError(“没训练”)
#计算testdata分别为各个类别的概率
lbdict=dict() #初始化空字典
for thislb in labelsset: #遍历类别
p=1
alllabel=self.labelcount[thislb]#统计当前类别占总类别比例
allvector=self.vectorcount[thislb]#当前类别所有向量
vnum=len(allvector)#求向量数
allvector=np.array(allvector).T #转置
for index in range(0,len(testdata)):#遍历各个特征,计算属于类别的概率
vector=list(allvector[index])
p*=vector.count(testdata[index])/vnum #特征占比
lbdict[thislb]=p*alllabel #特征占比乘以类别占比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值