贝叶斯是一种概率算法,根据先验概率和观测数据得出后验概率,也就是从结果找原因。贝叶斯概率公式
P ( C ∣ X ) = P ( X ∣ C ) ⋅ P ( C ) P ( X ) P(C|X) = \frac{P(X|C) \cdot P(C)}{P(X)} P(C∣X)=P(X)P(X∣C)⋅P(C)
- P(C|X) : 后验概率,满足 B 的条件下, A的概率。
- P(X|C) : 拟然函数,满足 A 的条件下, B的概率。
- P ( C ) P(C) P(C) : 先验概率.
- P(X) : 全概率.
朴素贝叶斯算法假设各个样本之间的概率是独立的,通过以下公式可以分解为各个特征的概率。
P ( X ∣ C ) = P ( x 1 ∣ C ) ⋅ P ( x 2 ∣ C ) ⋅ … ⋅ P ( x n ∣ C ) P(X|C) = P(x_1|C) \cdot P(x_2|C) \cdot \ldots \cdot P(x_n|C) P(X∣C)=P(x1∣C)⋅P(x2∣C)⋅…⋅P(xn∣C)
转换后的公式为,P(X) 全概率是一个固定值,对最终结果没有影响:
P ( C ∣ X ) ∝ P ( C ) ⋅ ∏ i = 1 n P ( x i ∣ C ) P(C|X) \propto P(C) \cdot \prod_{i=1}^n P(x_i|C) P(C∣X)∝P(C)⋅∏i=1nP(xi∣C)
代码实现
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
gnb = GaussianNB()
y_pred = gnb.fit(X_train, y_train).predict(X_test)
print("Accuracy of GaussianNB in iris data test:",
accuracy_score(y_test, y_pred))
总结
朴素贝叶斯假设特征是独立事件,降低了计算复杂度,可以应用与简单的分类场景。