贝叶斯定理
贝叶斯定理:已知某条件下的概率,如何得到两条件交换后的概率,也就是在已知P(A|B)的情况下如何求得P(B|A)的概率。P(A|B)是后验概率(posterior probability),也就是我们常说的条件概率,即在条件B下,事件A发生的概率。相反P(A)或P(B)称为先验概率(prior probability·)。
![6606641b487a923c147a2b70885b9df0.png](https://i-blog.csdnimg.cn/blog_migrate/ab751e446549a6789cb6e8cbad83f8dd.png)
朴素贝叶斯分类
朴素贝叶斯分类的思想真的很朴素,它的思想基础是这样的:对于给出的待分类项,求解此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类属于哪个类别。
朴素贝叶斯分类的工作过程如下:
(1)、设D是训练元组和它们相关联的类标号的集合。每个元组用一个n维属性向量X={x1,x2,...,xn}表示。
(2)、假定有m个类C1 ,C2,...Cm。给定元组X,分类法将预测X属于具有最高后验概率的类。也就是说,朴素贝叶斯分类法预测X属于类Ci,当且仅当
P(Ci|X)>P(Cj|X) 1≤j≤m, j≠i
这样,P(Ci|X)最大的类C1称为最大后验概率。根据贝叶斯定理
![b187682648844e4c30961bff748d2171.png](https://i-blog.csdnimg.cn/blog_migrate/fe3946dbe703444b1fe09c0715c0ba28.png)
(3)、由于P(X)对所有类为常数,所以只需要P(Ci|X)P(Ci)最大即可。若类的先验概率未知,则通常假定这些类是等概率的,即P(C1)=P(C2)=...=P(Cm),并据此对P(Ci|X)最大化,否则最大化P(Ci|X)P(Ci)
(4)、给定具有很多属性的数据集,计算P(Ci|X)的开销非常大。为了降低计算开销,可以做类条件独立的朴素假定。给定元组的类标号,假定属性值有条件地相互独立。因此,
![9ce9b5e2c7a0c95756649e8d91085c9a.png](https://i-blog.csdnimg.cn/blog_migrate/eb3a7be0f2893d6e6a6c5c94a62fee00.png)
考察该属性是分类的还是连续值的,例如为了计算P(X|Ci),考虑如下两种情况:
(a)、如果Ak是分类属性,则P(xk|Ci)是D中属性Ak的值为xk的Ci类的元组数除以D中Ci类的元组数|Ci,D|
(b)、如果Ak是连续值属性,则假定连续值属性服从均值为η、标准差为σ的高斯分布,由下式定义:
![1cd8275c4c8987c8133c8a555d6a9fe8.png](https://i-blog.csdnimg.cn/blog_migrate/00cb3cc4604dc7d90f1541fabeac5414.png)
即P(xk |Ci)=g(xk,ηci,σci)
(5)、为了预测X得类标号,对每个类Ci,计算P(Ci|X)P(Ci)。该分类法预测输入元组X的类为Ci,当且仅当,P(X|Ci)P(Ci)>P(X|Cj)P(Cj), 1≤j≤m, j≠i。即是,被预测的类标号是使P(X|Ci)P(Ci)最大的类Ci。
sk-learn
import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(X, Y)
print(clf.predict([[-0.8, -1]]))
clf_pf = GaussianNB()
clf_pf.partial_fit(X, Y, np.unique(Y))
print(clf_pf.predict([[-0.8, -1]]))
Parameters
priorsarray-like, shape (n_classes,)
类的先验概率。如果指定,则不根据数据调整优先级。
var_smoothing:float, optional (default=1e-9)
所有特征的最大方差的一部分,添加到方差中以保持计算稳定性。
Attributes
class_count_:array, shape (n_classes,)
每个类观察到的训练样本数。
class_prior_:array, shape (n_classes,)
方差绝对附加值
classes_:array, shape (n_classes,)
已知分类器标签
sigma_:array, shape (n_classes, n_features)
每类特征的方差
theta_:array, shape (n_classes, n_features)
每类特征的平均数