sklearn基础--『监督学习』之贝叶斯分类

贝叶斯分类 是一种统计学分类方法,基于贝叶斯定理,对给定的数据集进行分类。

它的历史可以追溯到18世纪,当时英国统计学家托马斯·贝叶斯发展了贝叶斯定理,这个定理为统计决策提供了理论基础。

不过,贝叶斯分类在实际应用中的广泛使用是在20世纪80年代,当时计算机技术的进步使得大规模数据处理成为可能。

1. 算法概述

贝叶斯分类基于贝叶斯公式,通过已知样本信息来计算未知样本属于各个类别的概率,然后选择概率最大的类别作为未知样本的分类结果。

贝叶斯公式 的简化公式: P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)

其中:

  1. P ( A ) P(A) P(A):事件A发生的概率
  2. P ( B ) P(B) P(B):事件A发生的概率
  3. P ( A ∣ B ) P(A|B) P(A∣B):在事件B出现的前提下,A发生的概率
  4. P ( B ∣ A ) P(B|A) P(B∣A):在事件A出现的前提下,B发生的概率

贝叶斯分类 就是基于这个公式扩展而来。

比如,一个具有 n n n个特征的样本 x = ( x 1 , x 2 , . . . , x n ) x = (x_1, x_2, ..., x_n) x=(x1,x2,...,xn),该样本属于K个 可能的类别 y 1 , y 2 , . . . , y k y_1,y_2,...,y_k y1,y2,...,yk。

那么,任一个样本 x x x属于某个类别 y k y_k yk的概率为: P ( y k ∣ x ) = P ( X ∣ y k ) P ( y k ) P ( x ) P(y_k|x) = \frac{P(X|y_k)P(y_k)}{P(x)} P(yk∣x)=P(x)P(X∣yk)P(yk)

根据这个模型,训练样本之后,就可以根据模型来预测某个样本 属于哪个类别概率最大

这里讨论的贝叶斯分类算法,并没有考虑特征之间的关联关系,我们假设每个特征之间是相互独立的。

所以,这个算法也叫做朴素贝叶斯分类

2. 创建样本数据

贝叶斯分类可以

这次用scikit-learn中的样本生成器make_classification来生成分类用的样本数据。

python 复制代码
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification

# 分类数据的样本生成器
X, y= make_classification(n_samples=1000, n_classes=4, n_informative=3)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)

plt.show()

关于样本生成器 的详细内容,请参考:sklearn基础--『数据加载』之样本生成器

3. 模型训练

训练之前,为了减少算法误差,先对数据进行标准化 处理(将数据缩放到0~100之间)。

python 复制代码
from sklearn import preprocessing as pp

# 数据标准化
X = pp.minmax_scale(X, feature_range=(1, 100))
y = pp.minmax_scale(y, feature_range=(1, 100))

然后,分割训练集测试集

python 复制代码
from sklearn.model_selection import train_test_split

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

按照8:2的比例来划分训练集和测试集。

scikit-learn中的朴素贝叶斯算法支持多种不同的分类器,

这些分类器基于不同的先验概率分布,适用于不同的数据类型和问题场景。

我们训练模型的时候要根据数据情况选择合适的分类器。

python 复制代码
from sklearn.naive_bayes import (
    GaussianNB,
    MultinomialNB,
    ComplementNB,
    BernoulliNB,
    CategoricalNB,
)

reg_names = [
    "高斯朴素贝叶斯",
    "多项式朴素贝叶斯",
    "补码朴素贝叶斯",
    "伯努利朴素贝叶斯",
    "分类朴素贝叶斯",
]

# 定义
regs = [
    GaussianNB(),
    MultinomialNB(),
    ComplementNB(),
    BernoulliNB(),
    CategoricalNB(min_categories=101),
]

# 训练模型
for reg in regs:
    reg.fit(X_train, y_train)

各个分类器的简要说明:

  1. GaussianNB:基于高斯分布的朴素贝叶斯分类器。它假设每个特征服从高斯分布,即正态分布。这种分类器适用于连续型数据,特别是对于数值型特征。
  2. MultinomialNB:基于多项式分布的朴素贝叶斯分类器。它假设每个特征服从多项式分布,适用于离散型数据,特别是对于类别型特征。
  3. ComplementNB:基于互补分布的朴素贝叶斯分类器。它适用于离散型数据,特别是对于二元分类问题。
  4. BernoulliNB:基于伯努利分布的朴素贝叶斯分类器。它适用于二元分类问题,特别是对于二元特征或者二元输出。
  5. CategoricalNB:基于分类分布的朴素贝叶斯分类器。它适用于离散型数据,特别是对于类别型特征。

最后验证各个分类器的模型的训练效果:

python 复制代码
# 在测试集上进行预测
y_preds = []
for reg in regs:
    y_pred = reg.predict(X_test)
    y_preds.append(y_pred)

for i in range(len(y_preds)):
    correct_pred = np.sum(y_preds[i] == y_test)
    print("【{}】 预测正确率:{:.2f}%".format(reg_names[i],
                                      correct_pred / len(y_pred) * 100))

# 运行结果
【高斯朴素贝叶斯】 预测正确率:82.50%
【多项式朴素贝叶斯】 预测正确率:75.00%
【补码朴素贝叶斯】 预测正确率:72.50%
【伯努利朴素贝叶斯】 预测正确率:22.00%
【分类朴素贝叶斯】 预测正确率:50.50%

这里虽然高斯朴素贝叶斯 分类器的正确率最高,但不能就认为这种分类器是最好的。

只能说明高斯朴素贝叶斯 分类器最适合 分类上面随机生成的样本数据。

换成其他的样本数据,高斯朴素贝叶斯分类器的正确率就不一定是最高的了。

4. 总结

总的来说,贝叶斯分类 是一种有效的分类方法,适用于对未知样本进行分类的问题。

它的应用范围广泛,可以处理多分类问题,也可以用于连续变量的分类。

贝叶斯分类算法的主要优势在于:

  1. 是一种概率模型,可以给出分类结果的概率,因此更加可靠和稳定。
  2. 可以处理多分类问题 ,也可以用于连续变量的分类
  3. 实现相对简单,可以在较短的时间内训练出模型并进行预测。

贝叶斯分类算法也有其不足之处:

  1. 假设所有特征之间相互独立,但在实际应用中这个假设往往不成立,因此会影响分类结果的准确性。
  2. 对于大规模的数据集,训练时间和预测时间可能会较长
  3. 对于数据的缺失和异常值处理不够鲁棒,可能会对分类结果产生影响。
相关推荐
湘美书院--湘美谈教育2 小时前
湘美谈教育AI系列经验集锦:赋能整理聊斋志异大寓言
大数据·人工智能·深度学习·神经网络·机器学习
大模型最新论文速读3 小时前
小红书提出 RedKnot:分头处理 kv 缓存,延时降低 60%效果还提升
论文阅读·人工智能·深度学习·机器学习·缓存·自然语言处理
一楼的猫5 小时前
茄子写作助手——品牌搜索突破9万后的技术型品牌认知与官网入口指南
人工智能·学习·机器学习·chatgpt·ai写作
苏州邦恩精密5 小时前
江苏三维扫描仪厂家如何选择合适的工业测量方案?
人工智能·科技·机器学习·3d·自动化·制造
叫我:松哥5 小时前
基于深度卷积神经网络的水果图片分类算法设计与实现,有ResNet50的迁移学习模型,准确率达95%
人工智能·python·神经网络·机器学习·分类·cnn·迁移学习
装不满的克莱因瓶6 小时前
PyTorch 与它的自动微分工具:Autograd
人工智能·pytorch·python·深度学习·神经网络·机器学习·ai
2601_954971136 小时前
2026财务岗位个人能力提升计划
机器学习
哦哦~9217 小时前
AI 赋能 CFD :从 Fluent 仿真到物理信息机器学习的智能流体工程实战
人工智能·机器学习·cfd·fluent
EQUINOX17 小时前
【ch03】Coding-attention-mechanisms
人工智能·深度学习·机器学习