'''
朴素贝叶斯分类:朴素贝叶斯分类是一种依据统计概率理论而实现的一种分类方式。
观察这组数据:
天气情况 穿衣风格 约女朋友 ==> 心情
0(晴天) 0(休闲) 0(约了) ==> 0(高兴)
0 1(风骚) 1(没约) ==> 0
1(多云) 1 0 ==> 0
0 2(破旧) 1 ==> 1(郁闷)
2(下雨) 2 0 ==> 0
... ... ... ==> ...
0 1 0 ==> ?
通过上述训练样本如何预测:晴天、穿着休闲、没有约女朋友时的心情?可以整理相同特征值的样本,计算属于某类别的概率即可。
但是如果在样本空间没有完全匹配的数据该如何预测?
贝叶斯定理:P(A|B)=P(B|A)P(A)/P(B) <== P(A, B) = P(A) P(B|A) = P(B) P(A|B)
例如:
假设一个学校里有60%男生和40%女生.女生穿裤子的人数和穿裙子的人数相等,所有男生穿裤子.
一个人在远处随机看到了一个穿裤子的学生.那么这个学生是女生的概率是多少?
P(女) = 0.4
P(裤子|女) = 0.5
P(裤子) = 0.6 + 0.2 = 0.8
P(女|裤子) = P(裤子|女) * P(女) / P(裤子) = 0.5 * 0.4 / 0.8 = 0.25
根据贝叶斯定理,如何预测:晴天、穿着休闲、没有约女朋友时的心情?
P(晴天,休闲,没约,高兴)
= P(晴天|休闲,没约,高兴) P(休闲,没约,高兴)
= P(晴天|休闲,没约,高兴) P(休闲|没约,高兴) P(没约,高兴)
= P(晴天|休闲,没约,高兴) P(休闲|没约,高兴) P(没约|高兴)P(高兴)
( 朴素:条件独立,特征值之间没有因果关系)
= P(晴天|高兴) P(休闲|高兴) P(没约|高兴)P(高兴)
由此可得,统计总样本空间中晴天、穿着休闲、没有约女朋友时高兴的概率,
与晴天、穿着休闲、没有约女朋友时不高兴的概率,择其大者为最终结果。
高斯贝叶斯分类器相关API:
import sklearn.naive_bayes as nb
# 创建高斯分布朴素贝叶斯分类器
model = nb.GaussianNB()
model.fit(x, y)
result = model.predict(samples)
案例:multiple1.txt
'''
import numpy as np
import matplotlib.pyplot as mp
import sklearn.naive_bayes as nb
data = np.loadtxt(
'./ml_data/multiple1.txt', delimiter=
',', unpack=False, dtype=
'f8')
print(data.shape)
x = np.array(data[:, :-1
])
y = np.array(data[:, -1
])
# 训练NB模型,完成分类业务
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
n = 500
grid_x, grid_y =
np.meshgrid(np.linspace(l, r, n), np.linspace(b, t, n))
test_x =
np.column_stack((grid_x.ravel(), grid_y.ravel()))
test_y =
model.predict(test_x)
grid_z =
test_y.reshape(grid_x.shape)
# 画图
mp.figure(
'NB Classification', facecolor=
'lightgray')
mp.title('NB Classification', fontsize=16
)
mp.xlabel('X', fontsize=14
)
mp.ylabel('Y', fontsize=14
)
mp.tick_params(labelsize=10
)
mp.pcolormesh(grid_x, grid_y, grid_z, cmap=
'gray')
mp.scatter(x[:, 0], x[:, 1], s=80, c=y, cmap=
'jet', label=
'Samples')
mp.legend()
mp.show()
输出结果:
(400, 3)
转载于:https://www.cnblogs.com/yuxiangyang/p/11189256.html
相关资源:朴素贝叶斯文本分类python实现(含数据集)