机器学习算法(伍)Naive Bayes 算法

引言

朴素贝叶斯(Naive Bayes)算法是机器学习中常见的基本算法之一,它主要被用来做分类任务。其理论基础是基于贝叶斯定理和条件独立性假设的一种分类方法。对于给定的训练数据集:
image.png
基于以上的解释,我们知道:(1)该算法的理论核心是贝叶斯定理;(2)它是基于条件独立性假设这个强假设基础之上的,这也是它为什么被称为“朴素”的主要原因。

本文将从以下的角度讲解朴素贝叶斯算法:

  1. Naive Bayes 的数学原理;
  2. Naive Bayes 的参数估计;
  3. 贝叶斯估计;
  4. Naive Bayes 实战。

Naive Bayes 算法的数学原理

由于该算法的基本思想是基于朴素贝叶斯定理的,所以本节首先介绍一下朴素贝叶斯算法背后的数学原理。

贝叶斯定理
image.png
后验概率最大化的意义

由上述的推导可知,朴素贝叶斯分类是将实例分到后验概率最大的类中。这等价于期望风险最小化。这就是朴素贝叶斯法所采用的原理。

Naive Bayes 算法的参数估计

image.png
特征值为离散型变量时的参数估计
image.png
特征值为连续型变量时的参数估计
image.png

贝叶斯估计

image.png

Naive Bayes 算法实战

在 scikit-learn 中,GaussianNB 实现了基于高斯贝叶斯算法的分类器。此时特征值为连续型变量,并且假设其服从高斯分布。

from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn import datasets

# 加载iris数据集
iris = datasets.load_iris()

X = iris.data
y = iris.target

print('Sample num: ', len(y))

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

clf = GaussianNB()

# 训练模型
clf.fit(X_train, y_train)

# 预测结果
ans = clf.predict(X_test)

# 计算准确率
cnt = 0
for i in range(len(y_test)):
    if ans[i] - y_test[i] < 1e-1:
        cnt += 1
    # print(ans[i], ' ', y_test[i])

print("Accuracy: ", (cnt * 100.0 / len(y_test)), "%")

运行结果

Sample num:  150
Accuracy:  97.77777777777777 %

猜你喜欢

转载自blog.csdn.net/datawhale/article/details/81206420