最近在看Udacity上关于Machine Learning的初级课程,学习并记录一下相关的知识点。
1.1 Naive Bayes
第一部分讲了朴素贝叶斯的基本原理,以及如何使用Python sklearn建立朴素贝叶斯分类器。
下面的介绍主要来自sklearn上关于朴素贝叶斯分类方法的介绍
http://scikit-learn.org/stable/modules/naive_bayes.html
Naive Bayes methods are a set of supervised learning algorithms based on applying Bayes’ theorem with the “naive” assumption of independence between every pair of features.
朴素贝叶斯方法是一组基于贝叶斯原理的监督学习方法,这类方法假设样本特征之间是相互独立的。给定一个类变量 y 和与之相关的一组特征向量,从 x1 到 xn ,则贝叶斯定理定义了如下关系:
使用朴素贝叶斯的独立性假设可以得到
对于所有的 i ,上述关系可以简化为
由于输入给定的条件下 P(x1,…,xn) 是常数,我们可以使用下面的分类规则:
我们可以使用最大后验估计(Maximum A Posteriori estimation, MAP)方法来估计 P(y) 和 P(xi∣y) ,前者是训练集中类别 y 的相对频率。
不同朴素贝叶斯分类器之间的差别主要在于,对
尽管假设过于简单,朴素贝叶斯分类器在许多实际问题中的处理效果却非常好,比如文本分类和垃圾邮件检测,这类分类器需要少量的训练数据来估计参数。(朴素贝叶斯分类器工作效果好的原因以及在什么类型的数据上效果比较好,针对这些问题的理论解释可以参考文末给出的文献。)
相比其他更复杂的方法,朴素贝叶斯方法学习和分类的运算速度都非常快。类别条件下特征分布的解耦意味着每个特征的分布可以独立地估计为一维分布,这反过来也有助于减轻维数灾难引起的问题。
另一面,虽然朴素贝叶斯是一个不错的分类器,但是对类概率的估计往往并不准确,所以不必过于在意 predict_proba 输出的概率值。
References:
H. Zhang (2004). The optimality of Naive Bayes. Proc. FLAIRS.
1.2 Gaussian Naive Bayes
朴素贝叶斯分类器最常用的分布假设是正态分布假设,下面使用 sklearn.naive_bayes 中的 GaussianNB 构建高斯朴素贝叶斯分类器。特征的条件似然函数假定服从正态分布:
参数 σy and μy 使用极大似然法进行估计。
下面是使用Python的sklearn包构建高斯朴素贝叶斯分类器的小例子:
>>> from sklearn import datasets
>>> iris = datasets.load_iris() # 使用样例数据
>>> from sklearn.naive_bayes import GaussianNB # 导入模块
>>> gnb = GaussianNB() # 初始化分类器
>>> gnb.fit(iris.data, iris.target) # 使用训练数据进行模型训练
>>> y_pred = gnb.predict(iris.data) # 对测试数据进行预测
>>> print("Number of mislabeled points out of a total %d points : %d"
... % (iris.data.shape[0],(iris.target != y_pred).sum()))
Number of mislabeled points out of a total 150 points : 6