Python_实现简单贝叶斯分类
来源:互联网 发布:梵高传 知乎 编辑:程序博客网 时间:2024/06/16 08:55
import numpy#先生成原始数据n1=200;n2=40;m=4;h=6#n1代表总样品数,n2是测试样品数,m是种类数,h是特征数S1=numpy.zeros((200,7))#最后一列代表类别S1[0:30,0:6]=numpy.random.randn(30,6)S1[0:30,6]=1S1[30:60,0:6]=numpy.random.randn(30,6)*3+10S1[30:60,6]=2S1[60:140,0:6]=numpy.random.randn(80,6)*5+20S1[60:140,6]=3S1[140:,0:6]=numpy.random.randn(60,6)*10+30S1[140:,6]=4S2=numpy.zeros((40,6))S2[0:10,:]=numpy.random.randn(10,6)S2[10:20,:]=numpy.random.randn(10,6)*3+10S2[20:30,:]=numpy.random.randn(10,6)*5+20S2[30:,:]=numpy.random.randn(10,6)*10+30#si为样本,X为test数据#单个数据在模板空间Si中出现的概率def beiyesi(X,Si):S=numpy.cov(Si.T)S=numpy.mat(S);m,n=Si.shapea=1/((2*numpy.pi)**(n/2)*numpy.linalg.det(S)**0.5)X=X-numpy.mean(Si,axis=0)ans=numpy.dot(X,S.I)ans=numpy.dot(ans,X.T)p=numpy.log(a*(numpy.exp(-0.5*ans)))return pdef many_beiyesi(X,Si):#多个数据在模板空间Si中出现的概率a,b=X.shapeP=[beiyesi(X[i,:],Si) for i in range(a)]return Pdef final(X,S,m):li=[]w=[]a,b=X.shapen1,h=S.shapeh=h-1#P[i,j]代表第j个数据在第i个模板空间中出现的概率P=numpy.zeros((m,a))Q=numpy.zeros((m,a))#Q[i,j]代表第j个数据属于第i个模板的概率for i in range(m):li.append(numpy.argwhere(S==i+1)[:,0])w.append(len(li[i]))Si=S[li[i],0:h]p=many_beiyesi(X,Si)for j in range(a):P[i,j]=p[j]for i in range(m):w[i]=float(w[i])/sum(w)for i in range(m):for j in range(a):Q[i,j]=P[i,j]*w[i]/numpy.dot(w,P[:,j])return P,QP,Q=final(S2,S1,m)
0 0
- Python_实现简单贝叶斯分类
- 朴素贝叶斯分类原理及Python实现简单文本分类
- Python_排序算法实现
- python_简单的ssh客户端
- ibsvm实现简单线性分类
- 数据挖掘笔记-分类-贝叶斯-原理与简单实现
- 最简单的贝叶斯分类器MATLAB实现
- 贝叶斯分类器的简单应用-拼写检查的实现
- 朴素贝叶斯分类器简单实现文本情感分析
- python_
- python_简单的声音播放功能
- python_使用email模块发送简单邮件
- PHP无限级分类简单实现方法
- 简单三部实现导航分类二级菜单
- 简单实现一个Android ListView分类
- 简单实现一个Android ListView分类
- Jquery仿京东分类导航层简单实现
- 使用php分页类实现简单分类
- linux多线程
- 关于跨域(补充并添加comet和web sockets知识)
- 网狐棋牌游戏用户数据库QPAccountsDB开发文档
- 20161101临界知识修订建议
- Java常用类库
- Python_实现简单贝叶斯分类
- 每日一shell之route
- HDU 5933 ArcSoft's Office Rearrangement(模拟)
- 读深入理解Linux内核 (第9章 进程地址空间, 第二部分 ---- 内存区域)
- linux指令 -- find
- 去掉tableView多余的空白行分割线
- C#安装和基础学习
- Java学习笔记
- 自动登录:Filter,Session,Cookie综合例子