一. 朴素贝叶斯的原理
贝叶斯定理是概率论中的一个重要定理,用于计算在已知某个条件下的事件的概率。
概念:
贝叶斯定理是基于条件概率的一种计算方法。它描述了在已知事件B发生的条件下,事件A发生的概率。贝叶斯定理的核心思想是通过已知的条件信息,来更新我们对事件的概率估计。
数学表达式:
贝叶斯定理的数学表达式如下:
P(A|B) = (P(B|A) * P(A)) / P(B)
其中,P(A|B)表示在事件B发生的条件下,事件A发生的概率;P(B|A)表示在事件A发生的条件下,事件B发生的概率;P(A)和P(B)分别表示事件A和事件B的独立概率。
贝叶斯定理的计算过程如下:
1. 根据已知条件,计算事件A和事件B的独立概率P(A)和P(B)。
2. 根据已知条件,计算在事件A发生的条件下,事件B发生的概率P(B|A)。
3. 根据贝叶斯定理的数学表达式,计算在事件B发生的条件下,事件A发生的概率P(A|B)。
朴素贝叶斯是贝叶斯分类算法中最简单的一个,一般用于处理二分类或多分类任务,此算法围绕的核心是:贝叶斯定理。“朴素”二字体现的是特征与特征相互独立。
二. 朴素贝叶斯算法原理
朴素贝叶斯的基本思想:如果一个事物在一些属性条件发生的情况下,事物属于A的概率>属于B的概率,则判定事物属于A。
假设我们有一个数据集,它是由两类数据构成,数据分布如下图所示:
p1(x,y)表示数据点(x,y)属于类别1(图中用圆点表示的类别)的概率
p2(x,y)表示数据点(x,y)属于类别2(图中用三角形表示的类别)的概率
那么对于一个新数据点(x,y),可以用下面的规则来判断它的类别:
如果 p1(x,y) > p2(x,y),那么类别为1。
如果 p2(x,y) > p1(x,y),那么类别为2。
也就是说,我们会选择高概率对应的类别。这就是贝叶斯决策理论的核心思想,即选择具有 最高概率的决策。
2.1条件概率
条件概率是指在已知某个事件已经发生的情况下,另一个事件发生的概率。条件概率的计算公式如下:
对于两个事件A和B,条件概率P(A|B)(读作:在B发生的条件下A发生的概率)的计算公式是:
P(A|B) = P(A ∩ B) / P(B)
1.P(A|B) 表示事件B发生的条件下事件A发生的概率,也称为A在B条件下的后验概率。
2.P(A ∩ B) 表示事件A和事件B同时发生的概率,也称为A与B的交集的概率。
3.P(B) 表示事件B发生的概率,也称为B的先验概率。
2.2 朴素贝叶斯公式
朴素贝叶斯算法是一种基于贝叶斯定理的分类算法。它假设特征之间是条件独立的(朴素条件独立性假设),根据给定特征的条件概率来计算后验概率,从而进行分类。下面是朴素贝叶斯算法的公式表示:
假设有n个特征(或属性)x1, x2, …, xn,以及目标变量(类别)y。
1.计算先验概率(Prior Probability)P(y),即目标变量y在整个数据集中的概率分布。
2.对于给定的样本数据x = (x1, x2, …, xn),计算后验概率(Posterior Probability)P(y | x),即在给定特征变量x的情况下,目标变量y的概率分布。
根据贝叶斯定理,后验概率可以如下计算:
P(y | x) = (P(x | y) * P(y)) / P(x)
其中:
3.P(y | x) 是后验概率,表示在给定特征x的条件下,目标变量y的概率分布;
4.P(x | y) 是似然概率,表示目标变量y下给定特征x的条件概率;
5.P(y) 是先验概率,表示目标变量y的概率分布;
6.P(x) 是边缘概率,表示特征x的概率分布。
7.判定规则(Decision Rule):根据后验概率,选择具有最高概率的目标变量作为预测结果。即:
y_hat = argmax(P(y | x))
其中,y_hat 表示预测的目标变量值。
需要注意的是,朴素贝叶斯算法中的上述公式假设特征之间是条件独立的,这是朴素贝叶斯算法的一个简化假设。在实际应用中,这个假设可能不完全成立,但朴素贝叶斯算法仍然被广泛应用,并在许多领域取得不错的分类效果。
三. 朴素贝叶斯算法流程
1. 数据预处理:
· 收集训练数据集,包括特征和对应的类别标签。
· 对数据进行清洗和预处理,包括去除噪声、处理缺失值、归一化等。
2. 计算先验概率:
· 统计训练数据集中每个类别的样本数量,计算每个类别的先验概率P(C)。
3. 计算似然度:
· 对于每个特征,统计在每个类别下的特征值出现的次数或概率。
· 根据特征值的类型(离散或连续),计算似然度P(X|C)。
4. 计算后验概率:
· 对于给定的测试样本,根据先验概率和似然度计算后验概率P(C|X)。
· 根据贝叶斯定理,后验概率可以通过先验概率和似然度的乘积来计算。
5. 分类决策:
· 根据后验概率,选择具有最高后验概率的类别作为分类结果。
6. 模型评估:
· 使用测试数据集对模型进行评估,计算分类的准确率、精确率、召回率等指标。
四.代码实现
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
from sklearn.naive_bayes import GaussianNB
import numpy as np
import pandas as pd
shopping = pd.read_csv('D:\数据分析\机器学习\数据\\bayes.csv')
def change_csv(df):
df1 = df.apply(lambda x: x.replace('Yes', 1))
df2 = df1.apply(lambda x: x.replace('No', 0))
df3 = df2.apply(lambda x: x.replace('Male', 1))
df4 = df3.apply(lambda x: x.replace('Female', 0))
return df4
df = change_csv(shopping)
train = df.drop('sex', axis=1)
target = df['sex']
nb_clf = GaussianNB() # 高斯朴素贝叶斯,特征变量是连续变量,符合高斯分布
nb_clf.fit(train, target)
y_test = nb_clf.predict(train)
#绘制roc曲线
# 计算
fpr, tpr, thread = roc_curve(y_test, target)
roc_auc = auc(fpr, tpr)
# 绘制ROC曲线
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',
lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
运行结果:
五. 算法优缺点
朴素贝叶斯算法是机器学习中常用的分类算法,它有以下优点和缺点:
优点:
1. 算法简单且易于实现:朴素贝叶斯算法基于简单的概率统计原理,模型参数估计简单,算法实现相对容易。
2. 高效性:朴素贝叶斯算法具有高效的训练和预测速度,适用于大规模数据集。
3. 对小样本数据有效:朴素贝叶斯算法在处理小样本数据时表现良好,因为它通过特征条件独立假设来估计参数,减少了参数估计的不确定性。
4. 对缺失数据友好:朴素贝叶斯算法能够处理缺失数据,通过忽略缺失特征的条件概率来进行分类预测。
缺点:
1. 特征条件独立假设过于简单:朴素贝叶斯算法假设特征之间相互独立,这在实际应用中并不总是成立。特征之间的相关性可能会导致分类结果的偏差。
2. 对输入数据分布的假设:朴素贝叶斯算法假设特征的分布满足条件独立性,但在实际情况中,特征之间的关系可能是复杂的,导致模型的偏差。
3. 处理连续特征困难:朴素贝叶斯算法对连续特征的处理相对困难,通常需要进行离散化处理,这可能会导致信息损失。
4. 类别之间的类别比例影响结果:朴素贝叶斯算法对类别之间的类别比例敏感,如果训练样本中某个类别的样本数量远大于其他类别,可能会导致分类结果的偏差。
需要注意的是,朴素贝叶斯算法在很多实际问题中仍然表现出色,并且可以通过一些技巧和改进来克服其缺点。在具体应用中,需要根据问题的特点和数据的特征来选择合适的分类算法。