文档章节

python实现朴素bayes算法

元禛慎独
 元禛慎独
发布于 2017/02/19 08:49
字数 464
阅读 12
收藏 0

import numpy as np
from sklearn.utils import check_arrays
from sklearn.cross_validation import train_test_split
from sklearn import datasets
import os

os.system("clear")
##########################
class myBayes:
    def __init__(self):
        self.Px={}
        self.Py={}
        self.nx=0
        self.lx=0
        self.result=None

    def fit(self, X, y):
        Py={}
        Px={}
        k=len(np.unique(y))
        for i in list(set(y)):
            Py[i]=(y.tolist().count(i)+1)*1.0/(len(y)+k)
        n_row, n_col=X.shape
        for i in range(n_col):
            Px.setdefault(i, {})
            xylist=zip(X[:,i],y)
            s=len(np.unique(X[:,i]))
            for xy in list(set(xylist)):
                Px[i][xy]=(xylist.count(xy)+1)*1.0/(Py[xy[1]]*(len(y)+k)+s-1)
        self.Py=Py
        self.Px=Px
        self.nx=n_col
        #print 'y',self.Py
        #print 'x',self.Px

    def predict(self, test_X):
        tX=np.array(test_X)
        ts=tX.shape
        if len(ts)==0 :
            return None
        elif len(ts)==1 :
            if len(tX)!=self.nx:
                return None
            else:
                result={}
                for i in self.Py.keys():
                    py=self.Py[i]
                    for j in range(ts[0]):
                        py=py*self.Px[j].get((tX[j],i),1-sum([Px[j][t] for t in Px[j].keys() if t[1]==i]))
                    result[py]=i
                self.result=np.array(result[max(result.keys())])
                return self.result

        elif len(ts)==2:
            if ts[1]!=self.nx:
                return None
            else:
                result_list=[]
                for x in tX:
                    #print x
                    result={}
                    for i in self.Py.keys():
                        py=self.Py[i]
                        for j in range(ts[1]):
                            py=py*self.Px[j].get((x[j],i),0)
                        result[py]=i
                    #print result
                    result_list.append(result[max(result.keys())])
                self.result=np.array(result_list)
                return self.result

#x1=[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]
#x2=['s','m','m','s','s','s','m','m','l','l','l','m','m','l','l']
#y=[0,0,1,1,0,0,0,1,1,1,1,1,1,1,0]
#x2dict={'s':1,'m':2,'l':3}
#X=np.array(zip(x1,[x2dict[x] for x in x2]))
#y=np.array(y)
#print X,y
iris=datasets.load_iris()
X=iris.data
y=iris.target

trainX,testX,trainy,testy=train_test_split(X,y,test_size=0.2)

clf=myBayes()
clf.fit(trainX,trainy)

predicted=clf.predict(testX)
print testy
print predicted

print np.mean(testy==predicted)

###########################################

输出结果:

yuanzhen@yuanzhen-ThinkPad-X121e:~/P_script$ python mybayes.py 

[2 0 2 0 2 0 2 1 2 0 0 0 1 2 2 1 2 0 2 1 2 2 2 1 1 2 1 1 0 2]
[2 0 2 0 2 0 2 1 2 0 0 2 2 2 2 1 2 0 2 1 2 1 2 2 1 2 1 1 0 2]
0.866666666667

[0 1 1 0 1 2 1 1 0 0 0 1 1 0 2 1 2 0 1 2 0 2 0 2 2 2 2 2 0 0]
[0 1 2 0 1 2 1 1 0 0 0 1 2 0 1 1 1 0 1 2 2 2 0 2 2 2 2 1 2 0]
0.766666666667

结果显示预测并不稳定


 

© 著作权归作者所有

元禛慎独
粉丝 3
博文 209
码字总数 60366
作品 0
朝阳
程序员
私信 提问
统计学习方法第四章:朴素贝叶斯法(naive Bayes),贝叶斯估计及python实现

统计学习方法第二章:感知机(perceptron)算法及python实现 统计学习方法第三章:k近邻法(k-NN),kd树及python实现 统计学习方法第四章:朴素贝叶斯法(naive Bayes),贝叶斯估计及python实现 ...

无限大的饿
02/17
0
0
《数据挖掘导论》实验课——实验四、数据挖掘之KNN,Naive Bayes

实验四、数据挖掘之KNN,Naive Bayes 一、实验目的 1. 掌握KNN的原理 2. 掌握Naive Bayes的原理 3. 学会利用KNN与Navie Bayes解决分类问题 二、实验工具 1. Anaconda 2. sklearn 三、实验简介...

知亦行
06/21
0
0
统计学习方法第二章:感知机(perceptron)算法及python实现

统计学习方法第二章:感知机(perceptron)算法及python实现 统计学习方法第三章:k近邻法(k-NN),kd树及python实现 统计学习方法第四章:朴素贝叶斯法(naive Bayes),贝叶斯估计及python实现 ...

无限大的饿
02/17
0
0
统计学习方法第五章:决策树(decision tree),ID3算法,C4.5算法及python实现

统计学习方法第二章:感知机(perceptron)算法及python实现 统计学习方法第三章:k近邻法(k-NN),kd树及python实现 统计学习方法第四章:朴素贝叶斯法(naive Bayes),贝叶斯估计及python实现 ...

无限大的饿
02/17
0
0
统计学习方法第三章:k近邻法(k-NN),kd树及python实现

统计学习方法第二章:感知机(perceptron)算法及python实现 统计学习方法第三章:k近邻法(k-NN),kd树及python实现 统计学习方法第四章:朴素贝叶斯法(naive Bayes),贝叶斯估计及python实现 ...

无限大的饿
02/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
10
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
6
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
11
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部