一、贝叶斯原理
贝叶斯算法是基于贝叶斯公式的,其公式为:
其中叫做先验概率,叫做条件概率,叫做观察概率,叫做后验概率,也是我们求解的结果,通过比较后验概率的大小,将后验概率最大的类别作为真实类别。
二、朴素贝叶斯分类
朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的简单概率分类算法,适用于文本分类、垃圾邮件过滤等任务。
朴素贝叶斯的“朴素”之处在于它假设特征之间相互独立,即给定类别,一个特征的出现不影响其他特征的出现。这在现实世界中通常不成立,但在许多情况下,这种简化的假设仍然能够提供良好的分类性能。
三、自定义数据集 ,使用朴素贝叶斯对其进行分类
1、代码示例:
python">import numpy as np
from sklearn.naive_bayes import GaussianNB
# 1. 自定义数据集
# 生成 100 个样本,每个样本有 2 个特征
X = np.random.randn(100, 2).astype(np.float32)
# 根据特征的线性组合生成标签,大于 0 标记为 1,否则标记为 0
y = (2 * X[:, 0] + 3 * X[:, 1] > 0).astype(np.int32)
# 2. 初始化朴素贝叶斯模型
model = GaussianNB()
# 3. 训练模型
model.fit(X, y)
# 4. 输出训练结果
print("训练完成!")
print("模型参数:")
print("类别先验概率:", model.class_prior_)
print("类别数量:", model.class_count_)
print("每个类别的均值:", model.theta_)
print("每个类别的方差:", model.sigma_)
2、代码解释
① 数据集生成:
-
X = np.random.randn(100, 2).astype(np.float32)
:
生成 100 个样本,每个样本有 2 个特征。
使用 np.random.randn
生成符合标准正态分布的随机数。
astype(np.float32)
将数据类型转换为 32 位浮点数。
-
y = (2 * X[:, 0] + 3 * X[:, 1] > 0).astype(np.int32)
:
根据特征的线性组合生成标签。
公式 2 * X[:, 0] + 3 * X[:, 1] > 0
表示特征的线性组合是否大于 0。
大于 0 的样本标记为 1
,否则标记为 0
。
astype(np.int32)
将标签转换为 32 位整数。
② 初始化朴素贝叶斯模型:
-
model = GaussianNB()
:
使用高斯朴素贝叶斯模型(Gaussian Naive Bayes)。
适用于连续特征数据。
③ 训练模型:
-
model.fit(X, y)
:
使用数据集训练模型。
模型会计算每个类别的先验概率、均值和方差。
④ 输出训练结果:
-
model.class_prior_
:
输出每个类别的先验概率。
-
model.class_count_
:
输出每个类别的样本数量。
-
model.theta_
:
输出每个类别的均值。
-
model.sigma_
:
输出每个类别的方差。