背景介绍
朴素贝叶斯分类器是一个简单而强大的分类算法,基于贝叶斯定理,用于估计给定特征集合下类别的概率。它的核心思想是“朴素”地假设各个特征之间是条件独立的。尽管这种假设在很多实际场景中并不成立,但朴素贝叶斯分类器在许多问题上表现依然非常出色。
在本篇文章中,我们将深入探讨一种常见的朴素贝叶斯分类器——高斯朴素贝叶斯(Gaussian Naive Bayes,GNB)。高斯朴素贝叶斯假设特征在每个类别内服从高斯分布,因此它特别适用于特征值是连续型数据的分类问题。
代码实现
1. 数据准备
首先,我们需要准备好我们的数据。为了确保模型能够快速收敛,我们将对特征进行标准化处理。
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 生成数据集
X, y = make_classification(n_samples=500, n_features=10, n_redundant=2, n_informative=4,
n_clusters_per_class=2, random_state=14)
# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
2. 计算均值和标准差
接下来,我们计算每个类别中各个特征的均值和标准差。
def mean_std(X_train, y_train):
n = X_train.shape[1]
mean = np.zeros((2, n))
std = np.zeros((2, n))
for label in [0, 1]:
mean[label, :] = X_train[y_train==label].mean(axis=0)
std[label, :] = X_train[y_train==label].std(axis=0)
return mean, std
mean, std = mean_std(X_train, y_train)
3. 定义概率密度函数
为了计算每个特征的条件概率,我们需要定义一个高斯概率密度函数。
def gaussian_pdf(X, mean, std):
left = 1 / (np.sqrt(2 * np.pi) * std)
e = (X - mean) ** 2 / (2 * (std ** 2))
right = np.exp(-e)
return left*right
4. 计算似然函数和后验概率
通过上面的概率密度函数,我们可以计算测试数据在每个类别下的似然函数,并结合先验概率计算后验概率。
# 计算似然函数
likelihood0 = gaussian_pdf(X_test, mean[0, :], std[0, :])
likelihood1 = gaussian_pdf(X_test, mean[1, :], std[0, :])
# 计算总似然
total_likelihood0 = np.prod(likelihood0, axis=1)
total_likelihood1 = np.prod(likelihood1, axis=1)
# 计算先验概率
m0 = len(X_train[y_train==0])
m1 = len(X_train[y_train==1])
prior0 = m0 / (m0 + m1)
prior1 = m1 / (m0 + m1)
# 计算后验概率
posterior0 = prior0 * total_likelihood0
posterior1 = prior1 * total_likelihood1
5. 预测
通过比较每个类别的后验概率大小,我们可以做出预测。
yhat = 1 * (posterior1 > posterior0)
6. 计算模型的准确性
最后,我们使用分类报告来评估模型的性能。
from sklearn.metrics import classification_report
print("=========Classification report=======")
print("Report: ", classification_report(y_test, yhat))
结论
朴素贝叶斯分类器是一种高效且解释性强的分类算法,尤其是在数据分布符合独立同分布(i.i.d)假设的情况下表现出色。高斯朴素贝叶斯特别适合处理连续数据,在很多实际应用中都有广泛的应用。
与逻辑回归相比,朴素贝叶斯更侧重于生成模型的思想,通过计算数据在每个类别下的概率来进行分类,而逻辑回归则是一种判别模型,直接对类别的边界进行建模。逻辑回归的优势在于它无需假设特征独立性,因此在处理特征相关性强的数据时可能表现更好。然而,朴素贝叶斯的简单性和高效性使它在处理高维数据时具有一定的优势。
在下一篇文章中,我们将探讨如何使用朴素贝叶斯分类器的另一种形式——多项式模式。敬请期待!
如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!
欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。
谢谢大家的支持!