使用Python实现贝叶斯分类器-------文章中有源码

一、实验目的
使用Python实现贝叶斯分类器。

二、实验原理
算法原理
假设y 的取值有y1,y2……yn.
x的特征有x1,x2 ……xm.
则朴素贝叶斯及当x={x1i, x2i, ……xmi}时比较y取值概率的大小。
即max(p(y|{x1i, x2i, ……xmi}))
而p(y|{x1i, x2i, ……xmi}) = p(y{x1i, x2i, ……xmi})/p({x1i, x2i, ……xmi})
=p({x1i, x2i, ……xmi}|y)p(y)/p({x1i, x2i, ……xmi})
而各个x相互独立,(类似于有放回)
则原式=p(x1i|y)p(x2i|y)……*p(xmi|y)p(y)/p({x1i, x2i, ……xmi})
各式都将除以p({x1i, x2i, ……xmi})
因此即比较max(p({x1i, x2i, ……xmi}|y)p(y))

三、Python包
(1)numpy

四、实验内容
数据如下,x1, x2 为特征,y为标签
预测当x=[2, S]T时,y的取值。

代码:

import numpy as np


def getData():
    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]
    return np.array(x), np.array(y)


def Bayes(x, y, x1, x2):
    Y = list(set(y))
    a, a1, b, b1, c, c1 = 0,0,0,0,0,0
    for i in range(15):
        if y[i] == Y[0]:  # Y[0]=1
            c += 1
            if x[i][0] == x1:  # x1=X[0]=2
                a += 1
            if x[i][1] == x2:  # x2=X[1]=S
                a1 += 1
        if y[i] == Y[1]:  # Y[1]=-1
            c1 += 1
            if x[i][0] == x1:
                b += 1
            if x[i][1] == x2:
                b1 += 1
    P1 = (c / len(y)) * (a / c) * (a1 / c)
    P2 = (c1 / len(y)) * (b / c1) * (b1 / c1)
    if P1 > P2:
        return Y[0]
    if P1 < P2:
        return Y[1]


if __name__ == '__main__':
    x, y = getData()
    X = ['2', 'S']
    print(X)
    result = Bayes(x, y, X[0], X[1])
    print( result)

截图:在这里插入图片描述

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不良使

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值