概率课程在人工智能领域的应用——以朴素贝叶斯分类为例

概率课程在人工智能领域的应用

——以朴素贝叶斯分类为例

前言

人工智能的许多理论在上个世纪就早已提出,囿于计算机硬件性能而迟迟不得发展。而作为其主流算法的“深度学习”,可以说是概率论与数理统计、微积分、线性代数融合的产物。借助于计算机相关理论与计算能力,让计算机能够利用数字来认识和分析世界,并作出自己的判断与决策。人工智能算法,可以说是很多数学理论的计算机学科应用。
概率论是用于表示不确定性声明的数学框架。它提供了量化不确定性的方法,我们可以用概率和统计理论上分析我们提出的 AI系统的行为。

概率论是众多科学学科和工程学科的基本工具。概率论与数理统计在人工智能种的作用渗透到各个方面,从偏差、方差分析以更好的拟合到计算概率以实现预测,从随机初始化以加快训练速度到正则化、归一化数据处理以避免过拟合……概率为人工智能提供随机性,为预测提供基础;而统计则对数据进行处理与分析,让结果更好的满足我们的要求,更具有普适性和一般性,以便于我们的应用。
统计学的各种理论应用之广,让人们不禁感叹人工智能就是统计学的一种应用,尽管略有片面,但统计学方法的确在人工智能领域发挥了空前的作用。

简介

朴素贝叶斯是一种构建分类器的简单方法。该分类器模型会给问题实例分配用特征值表示的类标签,类标签取自有限集合。它不是训练这种分类器的单一算法,而是一系列基于相同原理的算法:所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关。举个例子,如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。

对于某些类型的概率模型,在监督式学习的样本集中能获取得非常好的分类效果。在许多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法;换而言之,在不用到贝叶斯概率或者任何贝叶斯模型的情况下,朴素贝叶斯模型也能奏效。

尽管是带着这些朴素思想和过于简单化的假设,但朴素贝叶斯分类器在很多复杂的现实情形中仍能够获取相当好的效果。2004年,一篇分析贝叶斯分类器问题的文章揭示了朴素贝叶斯分类器获取看上去不可思议的分类效果的若干理论上的原因。尽管如此,2006年有一篇文章详细比较了各种分类方法,发现更新的方法(如决策树随机森林)的性能超过了贝叶斯分类器。

朴素贝叶斯分类器的一个优势在于只需要根据少量的训练数据估计出必要的参数(变量的均值和方差)。由于变量独立假设,只需要估计各个变量的方法,而不需要确定整个协方差矩阵

(摘自 Wikipedia )

朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入\(X\)求出使得后验概率最大的输出\(Y\)

朴素贝叶斯算法在文字识别, 图像识别方向有着较为重要的作用。 可以将未知的一种文字或图像,根据其已有的分类规则来进行分类,最终达到分类的目的。

现实生活中朴素贝叶斯算法应用广泛,如文本分类,垃圾邮件的分类,信用评估,钓鱼网站检测等等。

相关的概率学知识

贝叶斯定理

贝叶斯定理是关于随机事件A和B的条件概率的一则定理

贝叶斯定理(Bayes' theorem)是概率论中的一个定理,描述在已知一些条件下,某事件的发生概率。比如,如果已知某人妈妈得癌症与寿命有关,使用贝叶斯定理则可以通过得知某人年龄,来更加准确地计算出他妈妈罹患癌症的概率。

通常,事件A在事件B已发生的条件下发生的概率,与事件B在事件A已发生的条件下发生的概率是不一样的。然而,这两者是有确定的关系的,贝叶斯定理就是这种关系的陈述。贝叶斯公式的一个用途,即透过已知的三个概率而推出第四个概率。贝叶斯定理跟随机变量的条件概率以及边际概率分布有关。

和我们课堂上的所学不同,课堂上的概率统计学是我们通过条件概率公式推导出来的,而在概率统计学中每个名词都有约定俗成的名称。

  • \(P(A|B)\)是已知\(B\)发生后,\(A\)的条件概率。也称作\(A\)的后验概率.
  • \(P(A)\)\(A\)的先验概率(或边缘概率)。其不考虑任何\(B\)方面的因素。
  • \(P(B\mid A)\)}是已知\(A\)发生后,\(B\)的条件概率。也可称为\(B\)的后验概率。
  • \(P(B)\)\(B\)的先验概率。
推导

根据条件概率的定义。在事件\(B\)发生的条件下事件\(A\)发生的概率是

\[P(A|B)=\frac{P(A \cap B)}{P(B)} \]

其中\(A\)\(B\)的联合概率表示为\(P(A\cap B)\)或者\(P(AB)\),同样的,在事件\(A\)发生的条件下事件\(B\)发生的概率

\[P(B|A)=\frac{P(A\cap B)}{P(A)} \]

整理合并两个方程,我们得到

\[P(A|B)P(B)=P(A\cap B)=P(B|A)P(A) \]

上式两边同时除以\(P(B)\)\(P(B)\)是非0的,我们可以得到贝斯叶定理:

\[P(A|B)=\frac{P(B|A)P(A)}{P(B)} \]

朴素贝叶斯分类

朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。通俗来说,就好比这么个道理,你在街上看到一个黑人,如果要猜他来自哪里的,十有八九猜非洲。为什么呢?因为黑人中非洲人的比率最高,当然人家也可能是美洲人或亚洲人,但在没有其它可用信息下,我们会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。

既然是朴素贝叶斯分类算法,它的核心算法又是什么呢?

下面这个贝叶斯公式:

\[P(A|B)=\frac{P(B|A)P(A)}{P(B)} \]

换个表达形式就会明朗很多,如下:

\[P(类别|特征)=\frac{P(特征|类别)P(类别)}{P(特征)} \]

我们最终求的\(P(类别|特征)\)即可!

朴素贝叶斯分类的正式定义如下:

1、设\(x=\{a_1,a_2,...,a_m\}\)为一个待分类项,而每个a为x的一个特征属性。

2、有类别集合\(C=\{y_1,y_2,...,y_n\}\)

3、计算\(P(y_1|x),P(y_2|x),...,P(y_n|x)\)

4、如果\(P(y_k|x)=max\{P(y_1|x),P(y_2|x),...,P(y_n|x)\}\),则\(x \in y_k\)

那么现在的关键就是如何计算第3步中的各个条件概率。我们可以这么做:

1、找到一个已知分类的待分类项集合,这个集合叫做训练样本集。

2、统计得到在各类别下各个特征属性的条件概率估计。即\(P(a_1|y_1),P(a_2|y_1),...,P(a_m|y_1);P(a_1|y_2),P(a_2|y_2),...,P(a_m|y_2);...;P(a_1|y_n),P(a_2|y_n),...,P(a_m|y_n)\)

3、如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导:

\(P(y_i|x)=\frac{P(x|y_i)P(y_i)}{P(x)}\)

因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:

\(P(x|y_i)P(y_i)=P(a_1|y_i)P(a_2|y_i)...P(a_m|y_i)P(y_i)=P(y_i)\prod^m_{j=1}P(a_j|y_i)\)

整个朴素贝叶斯分类分为三个阶段:

第一阶段——准备工作阶段,这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。

第二阶段——分类器训练阶段,这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。

第三阶段——应用阶段。这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成。

朴素贝叶斯分类的应用

性别分类

问题描述:通过一些测量的特征,包括身高、体重、脚的尺寸,判定一个人是男性还是女性。

训练

训练数据如下:

性别 身高(英尺) 体重(磅) 脚的尺寸(英寸)
6 180 12
5.92 190 11
5.58 170 12
5.92 165 10
5 100 6
5.5 150 8
5.42 130 7
5.75 150 9

假设训练集样本的特征满足高斯分布,得到下表:

性别 均值(身高) 方差(身高) 均值(体重) 方差(体重) 均值(脚的尺寸) 方差(脚的尺寸)
男性 5.855 3.5033e-02 176.25 1.2292e+02 11.25 9.1667e-01
女性 5.4175 9.7225e-02 132.5 5.5833e+02 7.5 1.6667e+00

我们认为两种类别是等概率的,也就是\(P(male)= P(female) = 0.5\)。在没有做辨识的情况下就做这样的假设并不是一个好的点子。但我们通过数据集中两类样本出现的频率来确定\(P(C)\),我们得到的结果也是一样的。

测试

以下给出一个待分类是男性还是女性的样本。

性别 身高(英尺) 体重(磅) 脚的尺寸(英寸)
未知性别的样本 6 130 8

我们希望得到的是男性还是女性哪类的后验概率大。男性的后验概率通过下面式子来求取

\[posterior(male)={\frac {P(male)\,p(height|male)\,p(weight|male)\,p(footsize|male)}{evidence}} \]

女性的后验概率通过下面式子来求取

\[posterior(female)={\frac {P(female)\,p(height|female)\,p(weight|female)\,p(footsize|female)}{evidence}} \]

证据因子(通常是常数)用来对各类的后验概率之和进行归一化.

\[evidence=P(male)\,p(height|male)\,p(weight|male)\,p(footsize|male)+P(female)\,p(height|female)\,p(weight|female)\,p(footsize|female) \]

证据因子是一个常数(在正态分布中通常是正数),所以可以忽略。接下来我们来判定这样样本的性别。

\(P(male)=0.5\)

\(p({\mbox{height}}|{\mbox{male}})={\frac {1}{\sqrt {2\pi \sigma ^{2}}}}e^ \left({\frac {-(6-\mu )^{2}}{2\sigma ^{2}}}\right)\approx 1.5789\),其中\(\mu =5.855\),是\(\sigma ^{2}=3.5033e^{-2}\)训练集样本的正态分布参数. 注意,这里的值大于1也是允许的 – 这里是概率密度而不是概率,因为身高是一个连续的变量.

\(P(weight|male)=5.9881e^{-6}\)

\(P(footsize|male)=1.3112e^{-3}\)

\(posteriornumerator(male)=6.1984e^{-9}\)

\(P(female)=0.5\)

\(P(height|female)=2.2346e^{-1}\)

\(P(weight|female)=2.8669e^{-2}\)

\(P(footsize|female)=2.8669e^{-1}\)

\(posteriornumerator(female)=5.3778e^{-4}\)

由于女性后验概率的分子比较大

\[$posteriornumerator(female)=5.3778e^{-4}>posteriornumerator(male)=6.1984e^{-9} \]

所以我们预计这个样本是女性。

其他应用

朴素贝叶斯算法在文字识别, 图像识别方向有着较为重要的作用。 可以将未知的一种文字或图像,根据其已有的分类规则来进行分类,最终达到分类的目的。现实生活中朴素贝叶斯算法应用广泛,如文本分类,垃圾邮件的分类,信用评估,钓鱼网站检测等等。

朴素贝叶斯的具体模型

参考:https://machinelearningmastery.com/naive-bayes-classifier-scratch-python/

高斯朴素贝叶斯

特征的可能性被假设为高斯

概率密度函数:

\[P(x_i | y_k)=\frac{1}{\sqrt{2\pi\sigma^2_{yk}}}exp(-\frac{(x_i-\mu_{yk})^2}{2\sigma^2_{yk}}) \]

数学期望(mean):\(\mu\)

方差:\(\sigma^2=\frac{\sum(X-\mu)^2}{N}\)

类实现:

class NaiveBayes:
    def __init__(self):
        self.model = None

    # 数学期望
    @staticmethod
    def mean(X):
        return sum(X) / float(len(X))

    # 标准差(方差)
    def stdev(self, X):
        avg = self.mean(X)
        return math.sqrt(sum([pow(x - avg, 2) for x in X]) / float(len(X)))

    # 概率密度函数
    def gaussian_probability(self, x, mean, stdev):
        exponent = math.exp(-(math.pow(x - mean, 2) /
                              (2 * math.pow(stdev, 2))))
        return (1 / (math.sqrt(2 * math.pi) * stdev)) * exponent

    # 处理X_train
    def summarize(self, train_data):
        summaries = [(self.mean(i), self.stdev(i)) for i in zip(*train_data)]
        return summaries

    # 分类别求出数学期望和标准差
    def fit(self, X, y):
        labels = list(set(y))
        data = {label: [] for label in labels}
        for f, label in zip(X, y):
            data[label].append(f)
        self.model = {
            label: self.summarize(value)
            for label, value in data.items()
        }
        return 'gaussianNB train done!'

    # 计算概率
    def calculate_probabilities(self, input_data):
        # summaries:{0.0: [(5.0, 0.37),(3.42, 0.40)], 1.0: [(5.8, 0.449),(2.7, 0.27)]}
        # input_data:[1.1, 2.2]
        probabilities = {}
        for label, value in self.model.items():
            probabilities[label] = 1
            for i in range(len(value)):
                mean, stdev = value[i]
                probabilities[label] *= self.gaussian_probability(
                    input_data[i], mean, stdev)
        return probabilities

    # 类别
    def predict(self, X_test):
        # {0.0: 2.9680340789325763e-27, 1.0: 3.5749783019849535e-26}
        label = sorted(
            self.calculate_probabilities(X_test).items(),
            key=lambda x: x[-1])[-1][0]
        return label

    def score(self, X_test, y_test):
        right = 0
        for X, y in zip(X_test, y_test):
            label = self.predict(X)
            if label == y:
                right += 1

        return right / float(len(X_test))

结语

经过了一学期的概率统计的学习,收获许多,但总体课时较少,没有涉及后半部分内容,如马尔科夫链等人工智能需要使用到的基础理论没有讲到。下学期专业开设人工智能课程,可以将我们在这学期学到的概率论与数理统计的知识很好的运用到其中去,也就是写大作业的目的,看到概率论在后续专业课程中的应用。概率论是众多科学学科和工程学科的基本工具。概率论与数理统计在人工智能种的作用渗透到各个方面,从偏差、方差分析以更好的拟合到计算概率以实现预测。从我的理解来看,人工智能目前的发展离不开概率论以及线性代数的内容,数学的发展制约着计算机科学的发展。在学习了概率统计之后,我也会继续学习数理,将其运用到自己的专业课程。

参考文献

[1]唐晓彬.说说贝叶斯统计与人工智能[J].中国统计,2021(05):43-44.

[2]Goodfellow I, Bengio Y, Courville A. Deep learning[M]. MIT press, 2016.

[3]Bertsekas D, Tsitsiklis J. 概率导论[J]. 2009.

概率图模型

贝叶斯分类算法——百度百科

贝叶斯定理——维基百科

朴素贝叶斯分类器

带你理解朴素贝叶斯分类算法

算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

posted @ 2022-05-05 16:25  melodit  阅读(2596)  评论(0)    收藏  举报