1. 贝叶斯准则
首先介绍一下基本概念(概率论基础就不多了):
- :d维特征向量
- :分类编号,对于二分类问题就是{0,1}或者{-1, +1}
- :先验概率
- :证据因子(d维特征空间的特征分布)
- :联合概率密度函数
- :类条件密度
- :后验概率
- 贝叶斯准则
设是一个损失函数,其中表示预测的分类, 表示真实的分类,那么这个损失函数就是:
我们想要寻找一个最优的判定准则,使得分类的平均损失最小:
计算可得贝叶斯最优分类器:
可以看到,对于一个分类模型,关键在于计算后验概率 。直接建模估计后验概率的被称为判别模型(discriminative model);而根据贝叶斯公式,估计先验概率和条件概率的模型被称为生成模型(generative model)。
常见的生成模型包括朴素贝叶斯,隐马可夫模型等;常见的判别模型有决策树、神经网络、SVM等。
2. 朴素贝叶斯
上面提到的贝叶斯分类器需要估计联合概率,在计算上会遇到组合爆炸的问题。而朴素贝叶斯假设特征之间相互独立,可以说是非常简单朴素的假设,又被叫做“Idiot's Bayes”。
特征向量的所有d个特征都是相互独立的,因此可以得到:
根据上面贝叶斯判定准则,可以得到朴素贝叶斯的判定准则:
朴素贝叶斯虽然很简单,但是应用仍然很广泛。
放一个调用sklearn的代码(调包真的快乐):
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
data = load_iris() #读入iris数据集
X, y, column_names = data['data'], data['target'], data['feature_names']
X = pd.DataFrame(X, columns=column_names)
X_train, X_val, y_train, y_val = train_test_split(X,y, random_state=44) #划分训练集和测试集
model = GaussianNB() #调用朴素贝叶斯模型
model.fit(X_train, y_train) #训练
acc = accuracy_score(y_val, model.predict(X_val)) #预测
print(acc)
# 0.9210526315789473
如果想自己实现朴素贝叶斯,也可以参考:https://towardsdatascience.com/implementing-naive-bayes-in-2-minutes-with-python-3ecd788803fe