贝叶斯分类器:
贝叶斯分类器是一种基于贝叶斯定理的统计分类技术,它被广泛应用于机器学习和数据挖掘领域。该分类器基于特征之间的条件独立性假设,即给定类别下,特征之间相互独立。贝叶斯分类器通过计算每个类别下观察到的特征的条件概率来进行分类。
贝叶斯分类器的工作流程如下:
- 学习阶段:根据给定的训练数据集,计算每个类别的先验概率以及每个类别下各个特征的条件概率。
- 预测阶段:对于新的未知样本,计算其在每个类别下的后验概率,然后选择具有最高后验概率的类别作为预测结果。
贝叶斯分类器的优点包括:
- 简单易懂:基于概率和简单的数学原理。
- 鲁棒性:对噪声数据不敏感。
- 高效性:计算量相对较小,适用于大规模数据集。
贝叶斯分类器的局限性包括:
- 条件独立性假设可能不成立:在现实世界中,特征之间可能存在相关性。
- 数据稀疏性问题:当某些特征值在训练数据中未出现时,会导致条件概率为零,进而影响分类结果。
- 需要足够的训练样本:对于复杂的分类任务,需要大量的训练数据以获得准确的模型。
举例:
import numpy as np
# 定义高斯分布函数
def gaussian(x, mean, var):
return 1 / np.sqrt(2 * np.pi * var) * np.exp(-0.5 * (x - mean)**2 / var)
# 计算先验概率
def prior_prob(y):
n = len(y)
pos = sum(y == 1)
neg = n - pos
return pos / n, neg / n
# 计算条件概率
def conditional_prob(x, y):
n, m = x.shape
pos_mean = np.mean(x[y == 1], axis=0)
pos_var = np.var(x[y == 1], axis=0)
neg_mean = np.mean(x[y == 0], axis=0)
neg_var = np.var(x[y == 0], axis=0)
return pos_mean, pos_var, neg_mean, neg_var
# 预测新样本
def predict(x_test, prior, cond):
pos_prior, neg_prior = prior
pos_mean, pos_var, neg_mean, neg_var = cond
pos_prob = gaussian(x_test, pos_mean, pos_var) * gaussian(x_test, pos_mean, pos_var) * pos_prior
neg_prob = gaussian(x_test, neg_mean, neg_var) * gaussian(x_test, neg_mean, neg_var) * neg_prior
return 1 if pos_prob > neg_prob else 0
# 测试数据集
x_train = np.array([[180, 80], [160, 60], [170, 70], [175, 65], [172, 68], [168, 65]])
y_train = np.array([1, 0, 1, 1, 1, 0])
x_test = np.array([176, 75])
# 计算先验概率和条件概率
prior = prior_prob(y_train)
cond = conditional_prob(x_train, y_train)
# 预测新样本
y_pred = predict(x_test, prior, cond)
print('预测结果:', '男性' if y_pred == 1 else '女性')