朴素贝叶斯法(Naive Bayes)

来源:互联网 发布:小游戏制作软件下载 编辑:程序博客网 时间:2024/06/05 01:55

综述

朴素贝叶斯法是基于贝叶斯定理与条件独立假设的分类方法。
首先要知道一些基本统计学的知识:
1、条件概率
2、联合概率
3、独立性
4、独立同分布
5、贝叶斯定理
定理公式不好敲,这里偷懒就不写了,查看概率论的书,就知道了。

代码实现

版本1:DIY版本

# coding:utf-8import numpy as npX = np.array([[1,1],[1,2],[1,2],[1,1],[1,1],[2,1],[2,2],[2,2],[2,3],[2,3],[3,3],[3,2],[3,2],[3,3],[3,3]]) # print(np.shape(X))Y = np.array([-1,-1,1,1,-1,-1,-1,1,1,1,1,1,1,1,-1])input_x = np.array([2,1])class NB(object):    def __init__(self,X,Y):        self.X = X        self.Y = Y        self.N = len(Y)  #实例的个数        self.K = len(X[0])  #特征的维数        self.M = len(set(self.Y))   #类别的个数    def cal_pri_prb(self):  # 计算先验概率        p_p = dict()  #先验概率        p_n = dict() #记录频数        for y in set(self.Y):            sum = 0            for y_i in self.Y:                if y==y_i:                    sum = sum+1                else:                    pass            p_p[y] = sum/self.N            p_n[y] = sum         return p_p,p_n    def cond_prb(self,p_p,p_n):   # 计算条件概率           p = list()   #用来存放条件概率乘积            for y in set(self.Y):  # y=(1,-1)            p1 =1            for j in range(self.K): # j = 0,1                sum = 0                for i,x in enumerate(self.X):                    if (x[j]==input_x[j] and self.Y[i]==y):                        sum = sum+1                           pred = sum/p_n[y]                p1 = p1*pred            p.append(p1)        y_result = dict()                             for i,y in enumerate(list(set(self.Y))):                y_result[y] = p_p[y]*p[i]        result = sorted(y_result.values())[-1]        return y_result,result    def show_result(self,y_result,result):        show_dict = {v:k for k,v in  y_result.items()}        print("预测结果为",show_dict[result])nb = NB(X,Y)p_p,p_n = nb.cal_pri_prb()y_result,result =  nb.cond_prb(p_p,p_n)nb.show_result(y_result,result) >>>预测结果为 -1           

版本2:使用sklearn版本

#coding:utf-8import numpy as npfrom sklearn.naive_bayes import GaussianNBX = np.array([[1,1],[1,2],[1,2],[1,1],[1,1],[2,1],[2,2],[2,2],[2,3],[2,3],[3,3],[3,2],[3,2],[3,3],[3,3]]) Y = np.array([-1,-1,1,1,-1,-1,-1,1,1,1,1,1,1,1,-1])input_x = np.array([[2,1]])gnb = GaussianNB()y_pred = gnb.fit(X,Y).predict(input_x)print(y_pred) >>>[-1]

参考:《统计学习方法》–李航

原创粉丝点击