机器学习-分类模型-朴素贝叶斯分类(3)

朴素贝叶斯分类原理:

朴素贝叶斯分类是一种依据统计概率理论而实现的一种分类方式。

天气情况穿衣风格约女朋友==》心情
0(晴天)0(休闲)0(约了)==》0(高兴)
01(社会)1(没约)==》0
1(多云)10==》0
02(破旧)1==》1(郁闷)
2(下雨)20==》0
.........==》...
010==》

通过上述的数据预测:晴天,穿衣社会,约了女朋友的心情        

1. 由决策树的思想,可以整理相同特征值的样本,计算属于某类型的概率就行

2. 如果样本空间内,没有完全匹配的数据呢?

答:# 贝叶斯定理
P(A):A事件发生的概率
P(A, B):A,B同时发生的概率(联合概率)
P(B|A):A出现的情况下,B出现的概率(条件概率)
P(A, B) = P(A)*P(B|A)
贝叶斯定理: P(A|B)= P(B|A)*P(A)  /  P(B)  《==  P(A, B) = P(A)*P(B|A)

假设一个学校有60%男和40%女。女生穿裤子的人数和穿裙子的人数相等,所有男生都穿裤子。随机看到一个穿裤子的学生,是女生的概率是多少?

P(女) = 0.4                                                                                                                                          P(裤子|女) = 0.5                                                                                                                                  P(裤子) = 0.6 + 0.2 = 0.8                                                                                                                    P(女|裤子) = P(裤子|女) * P(女)        /      P(裤子) =  0.25

可见通过训练样本的特征概率统计,可以推出没有完全匹配的数据的概率大小。

一般这种概率统计的方法是通过概率密度函数统计的,所以数据要满足一些分布(比如高斯分布)

代码实现:

import numpy as np
import matplotlib.pyplot as plt
import sklearn.naive_bayes as nb

x = np.array([[4, 7],
              [3.5, 8],
              [3.1, 6.2],
              [0.5, 1],
              [1, 2],
              [1.2, 1.9],
              [6, 2],
              [5.7, 1.5],
              [5.4, 2.2]])
y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])

# 构建高斯朴素贝叶斯模型
model = nb.GaussianNB()

model.fit(x, y)

# 获取样本集的边界
l, r = x[:, 0].min() - 1, x[:, 0].max() + 1
b, t = x[:, 1].min() - 1, x[:, 1].max() + 1

# 把可视区间划分为500 * 500的二维坐标矩阵
n = 500
# np.linspace(l, r, n)从 l到r 之间拆 500份
# np.meshgrid() 相当于一个500*500的点阵,grid_x 横坐标(500*500)  grid_y 纵坐标(500*500)
grid_x, grid_y = np.meshgrid(np.linspace(l, r, n), np.linspace(b, t, n))

# 使用模型,得到点阵中每个坐标的类别
# grid_x.ravel() 500*500变成1行 1*250000
# np.column_stack() 两个矩阵按照列合并 (25000*2)
mesh_x = np.column_stack((grid_x.ravel(), grid_y.ravel()))
mesh_z = model.predict(mesh_x) # mesh_z (250000*1)
grid_z = mesh_z.reshape(grid_x.shape)

# 画图
plt.figure('LR Classifcation', facecolor='lightgray')
plt.title('LR Classifcation', fontsize=16)
plt.scatter(x[:, 0], x[:, 1], c=y, cmap = 'jet', label='Sample Points', s=70, zorder=3) # c=y 按照结果y划分颜色,cmap = 'jet'颜色工具包, zorder=3提高图层层面
# 调用plt.pcolormesh()绘制分类边界
# 原理: 根据参数,把可是区间拆分成坐标网格,由于每个网格都有相应的类别,可以使用cmap为每个网格填充颜色
plt.pcolormesh(grid_x, grid_y, grid_z, cmap='gray')
plt.legend()
plt.show()

输出:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值