Machine Learning 4 - Naive Bayes朴素贝叶斯算法

本文介绍了机器学习中的朴素贝叶斯算法,包括贝叶斯定理、条件概率、链式法则,以及在实际问题中的应用。适合初学者了解和入门。
摘要由CSDN通过智能技术生成

2017-11-23@erixhao技术极客TechBooster


AI

系列四,距上篇博文已经近一个半月之久了,是时候再动笔写一篇了,不然无法向几千个公众号读者粉丝交代,感谢大家不掉粉的同时还在增加。

本文将简单介绍在机器学习领域广为使用的朴素贝叶斯算法及其简单实现,属于较为基础普及,高手慎入。

目录

托马斯·贝叶斯(Thomas Bayes)

条件概率

条件概率定义

链式法则

贝叶斯公式

离散型

连续型

贝叶斯概率论

主观概率论

贝叶斯概率论意义

朴素贝叶斯(Naive Bayesian)

工作流程

机器学习中应用

小结

1 托马斯·贝叶斯(Thomas Bayes)


托马斯·贝叶斯(Thomas Bayes),18世纪英国的神学家、数学家;

有趣的是,贝叶斯当年发明发现概率论是为了证明上帝的存在。事实上,在18,19世纪的西方文明,当科学理论研究到一定程度,都会去信奉,投身,研究宗教,神学,究其原因,显然与其所处环境及从小接触宗教,神学有莫大关系,另外引申含义则是当科学研究越深入,到达一定高度后,越觉得大道至简,不可思议,与很多宗教,神学,佛教等观念接近或者一致,世界宇宙高度统一的“大统一场理论”。

2 条件概率

条件概率

条件概率是贝叶斯公式的基础,可以进行些许变换直接推导出贝叶斯公式,有必要仔细推敲研究一下。

数学定义: P(A|B) = P(AB) / P(B)(P(B) > 0)

条件概率指A, B 两个事件,随机事件A在另一个随机事件B已经发生的条件下(事实),其发生的概率,记作P(B|A),等式变换一下:

=> P(AB) = P(A|B) * P(B) = P(B|A) * P(A)

上述蓝色推导出的公式含义是指,事件A和事件B同时发生的概率等于在事件A发生的条件下B也发生的概率乘以事件A发生的概率;或者也等于事件B发生的条件下A也发生的概率乘以事件B发生的概率;

数学家都喜欢玩绕口令,我们还是看图说话吧,一图抵千言:


根据上面的文氏图,可以清楚的看到中间阴影部分表示事件A,B都发生的概率,即联合概率;对于条件概率在事件B发生的情况下,事件A也发生的概率,即P(A|B) 等于中间阴影面积除以B的面积(P(AB)/ P(B):

1) P(A|B)  = P(AB) / P(B)

反之亦然,对于条件概率在事件A发生下,事件B也发生的概率,即P(B|A),同理等于中间阴影面积大小除以A的面积(P(AB)/ P(A):

2) P(B|A) = P(AB) / P(A)

由1),2)变换即得到了我们上面推导出来条件概率公式

P(AB) = P(A) P(B|A) = P(B) P(A|B)

上面的文氏图A, B看起来大小面积一样,容易让人产生误解,我们再看下面一个图更容易理解体会条件概率的含义:


P(A|B), 表示若事件B已经发生,为使A也发生,试验结果必须满足既在B中有在A中的样本点,即此点必定属于AB:

P(A|B)  = P(AB) / P(B)

而中间的交集即联合概率,相对比条件概率,联合概率则要求更高:

P(X=a,Y=b)

首先包含多个条件,并且所有条件同时成立的概率。

链式法则/乘法公式

链式法则或称作乘法法则,通常用于计算多个随机变量的联合概率,特别是在变量之间相互为(条件)独立时会非常有用,我们随后的朴素贝叶斯算法就是借助链式法则展开的。

两个随机变量的联合概率:

对于上边的两个随机变量的联合概率

P(AB) = P(A) P(B|A)

对于N个随机变量的联合概率则如下展开:


即,简写为如下公式:


在实际中使用链式法则时,尤其在机器学习中,则可以较为妥善的选择随机变量的展开顺序,从而可以让概率计算变得更简单,快速

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于朴素贝叶斯算法模型涉及到数据预处理、特征选择、概率计算等复杂过程,因此整个模型的实现需要一定的编程基础和数据处理经验。下面给出一个简单的朴素贝叶斯算法模型的代码实现示例,供参考。 首先,我们需要导入需要用到的库: ```python 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 classification_report, confusion_matrix ``` 接下来,我们需要读取数据并进行预处理。这里以鸢尾花数据集为例: ```python # 读取数据 df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None) # 将类别标签转化为数字 df[4] = pd.Categorical(df[4]).codes # 将数据分为特征和标签 X = df.iloc[:, :4].values y = df.iloc[:, 4].values # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) ``` 接下来,我们需要选择合适的特征,并进行概率计算。这里使用高斯朴素贝叶斯算法: ```python # 创建高斯朴素贝叶斯分类器对象 gnb = GaussianNB() # 训练模型 gnb.fit(X_train, y_train) # 预测测试集结果 y_pred = gnb.predict(X_test) # 输出混淆矩阵和分类报告 print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred)) ``` 最后,我们可以通过调用预测函数预测新数据的分类: ```python # 预测新数据 new_data = np.array([[5.1, 3.5, 1.4, 0.2]]) print(gnb.predict(new_data)) ``` 完整代码如下: ```python 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 classification_report, confusion_matrix # 读取数据 df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None) # 将类别标签转化为数字 df[4] = pd.Categorical(df[4]).codes # 将数据分为特征和标签 X = df.iloc[:, :4].values y = df.iloc[:, 4].values # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 创建高斯朴素贝叶斯分类器对象 gnb = GaussianNB() # 训练模型 gnb.fit(X_train, y_train) # 预测测试集结果 y_pred = gnb.predict(X_test) # 输出混淆矩阵和分类报告 print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred)) # 预测新数据 new_data = np.array([[5.1, 3.5, 1.4, 0.2]]) print(gnb.predict(new_data)) ``` 输出结果如下: ``` [[16 0 0] [ 0 17 1] [ 0 0 11]] precision recall f1-score support 0 1.00 1.00 1.00 16 1 1.00 0.94 0.97 18 2 0.92 1.00 0.96 11 accuracy 0.98 45 macro avg 0.97 0.98 0.98 45 weighted avg 0.98 0.98 0.98 45 [0] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值