ML18: 朴素贝叶斯多分类

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
import sklearn.naive_bayes as nb
import matplotlib.pyplot as mp
x, y = [], []
with open('/Users/youkechaung/Desktop/算法/数据分析/AI/day02/day02/data/multiple1.txt', 'r') as f:
    for line in f.readlines():
        data = [float(substr)
                for substr in line.split(',')]
        x.append(data[:-1])
        y.append(data[-1])
x = np.array(x)
y = np.array(y, dtype=int)
# 创建朴素贝叶斯分类器模型
model = nb.GaussianNB()
model.fit(x, y)
l, r, h = x[:, 0].min() - 1, x[:, 0].max() + 1, 0.005
b, t, v = x[:, 1].min() - 1, x[:, 1].max() + 1, 0.005
grid_x = np.meshgrid(
    np.arange(l, r, h),
    np.arange(b, t, v))
flat_x = np.c_[grid_x[0].ravel(), grid_x[1].ravel()]
flat_y = model.predict(flat_x)
grid_y = flat_y.reshape(grid_x[0].shape)
mp.figure(num='Naive Bayes Classification',
          facecolor='lightgray')
mp.title('Naive Bayes Classification', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.pcolormesh(grid_x[0], grid_x[1], grid_y,
              cmap='brg')
mp.scatter(x[:, 0], x[:, 1], s=80, c=y, cmap='RdYlBu')
mp.show()

这里写图片描述
警察用劣质检测器测试酒驾,该检测器有5%的概率把一个正常司机判断为酒驾,已知有0.1%的司机会酒驾。假设警察拦下一个司机,做呼气测试,检测器显示酒驾,该司机究竟有多大概率真的酒驾?
1000个司机中有1个酒驾,另外999个正常
1/(1+999x5%)=1.96%
贝叶斯定理:
P(A|B)=P(A)P(B|A)/P(B)
P(A|B)P(B)=P(B|A)P(A)
P(A,B) = P(B,A)
B: 检测器显示酒驾的概率
A: 司机真正酒驾的概率
P(A|B)=0.1%x100%/(0.1%x100%+(1-0.1%)x5%)=1.96%
在B事件发生的条件下A事件发生的概率P(A|B),等于A事件发生的概率P(A)乘以A事件发生的条件下B事件发生的概率P(B|A)比上B事件发生的概率P(B)。
求输入样本x被标记为c类的概率p(c|x),当c取所有可能标记事,对应概率最大的就是x的所属的类别。
p(c|x)=p(c)p(x|c)/p(x)
p(c|x)&p(c)p(x|c)=p(c,x)
=p(c,x1,x2,…,xn)
=p(x1,x2,…,xn,c)
=p(x1|x2,…,xn,c)p(x2,…,xn,c)
=p(x1|x2,…,xn,c)p(x2|x3,…,xn,c)p(x3,…,xn,c)
=p(x1|x2,…,xn,c)p(x2|x3,…,xn,c)p(x3|x4,…,xn,c)…p(xn|c)p(c)
朴素:输入样本中的n个特征(x1,x2,…,xn)是条件独立的,其中任何一个特征都与其它特征无关。
=p(x1|c)p(x2|c)p(x3|c)…p(xn|c)p(c)
代码:nb.py

猜你喜欢

转载自blog.csdn.net/weixin_38246633/article/details/80596011