贝叶斯分类算法是基于一种古典概率统计学的一种非常简单的分类方法。废话不多说,尽快进入推导过程,因为很简单。假设 x1,x2... x3 是判断因素,y 是类别结果。那么我们做如下假设:
1. x1,x2 ... x3 是离散事件,即可以统计出 p(x1),p(x2).... p(x3) ,否则贝叶斯算法失效。
2.x1,x2, ... x3 互相独立,即 p(x1|x2) = p(x1)
3.x1,x2, ... x3 对类别的影响是同等重要的。
现在可以快速的推导公式 了
p(y|x1,x2,...x3) = p(y)*p(x1|y)*p(x2|x1,y)*... p(x3|x1,x2,y) / p(x1,x2,...x3)
由于 p(x1,x2,... x3) 是公因子,所以对结果不产生影响,所以我们去掉,后面 softmax 化即可。
p(y|x1,x2,...x3) = p(y)*p(x1|y)*p(x2|x1,y)*... p(x3|x1,x2,y) 利用 x1 ,x2, ... x3 的独立性,得出:
p(x3|x1,x2,y) = p(x1,x2,x3,y) / p(x1,x2,y) = p(x3,y) / p(y) = p(x3|y)
所以贝叶斯分类公式为:
p(y|x1,x2,...x3) = p(y)*p(x1|y)*p(x2|y) ... *p(x3|y) 公式后面的数据都可以从训练数据中统计出来概率。最后 softmax 即可。
代码实现如下:
'''
X_train 是数据集 Y_train 是对应的类别 X_test 是待分类数据
'''
# 导入贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
# 训练数据
gnb.fit(X_train, y_train)
# 使用贝叶斯分类模型
y_pred = gnb.predict(X_test)
但是,考虑到应用于 NLP 时,我们需要综合考虑词汇的 ITF 权重,以提高模型效果。
应用文本分类GitHub :https://github.com/ouprince/NBayes