【大数据】机器学习-----------贝叶斯分类器

ops/2025/1/18 13:22:50/

1. 贝叶斯决策论

贝叶斯决策论的核心是基于贝叶斯定理来计算后验概率 (P(c|x)),根据贝叶斯定理:

在这里插入图片描述

其中:

  • (P(c|x)) 是后验概率,即在特征 (x) 出现的情况下,样本属于类别 (c) 的概率。
  • (P(x|c)) 是类条件概率,即类别 (c) 中出现特征 (x) 的概率。
  • (P©) 是类先验概率,即类别 © 的先验概率。
  • (P(x)) 是特征 (x) 的先验概率。

2. 极大似然估计 (MLE)

假设样本在这里插入图片描述
是独立同分布的,对于参数为 (\theta) 的概率分布 在这里插入图片描述
,极大似然估计是寻找一个 (\theta) 使得似然函数在这里插入图片描述最大。

通常为了计算方便,对似然函数取对数得到对数似然函数:
在这里插入图片描述

3. 朴素贝叶斯分类器

假设特征 (x=(x_1, x_2, \cdots, x_d)) 相互独立,朴素贝叶斯分类器计算后验概率:

(P(c|x)=\frac{P©\prod_{i = 1}^{d}P(x_i|c)}{P(x)})

通常使用最大后验概率 (MAP) 来预测类别:

(y=\arg\max_{c}P©\prod_{i = 1}^{d}P(x_i|c))

4. 半朴素贝叶斯分类器

在朴素贝叶斯的基础上,假设部分特征之间存在依赖关系,常见的有SPODE(Super-Parent ODE)方法,假设每个特征最多依赖一个父特征 (x_j),则:
**加粗样式
**

5. 贝叶斯网

贝叶斯网是一个有向无环图 (DAG),其中节点表示随机变量,边表示变量之间的依赖关系,联合概率分布可以表示为:
在这里插入图片描述

6. EM 算法 (Expectation-Maximization)

对于含有隐变量 (Z) 的模型,目标是最大化似然函数 (L(\theta)=\sum_{i = 1}^{n}\log\sum_{z}P(x_i,z|\theta))。

EM 算法分为两步:

  • E 步:计算期望

  • 在这里插入图片描述

  • M 步:更新参数

在这里插入图片描述

代码示例

朴素贝叶斯分类器(使用 Python 和 scikit-learn
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建朴素贝叶斯分类器
nb_classifier = GaussianNB()
nb_classifier.fit(X_train, y_train)# 预测
y_pred = nb_classifier.predict(X_test)# 计算准确率
print("Accuracy:", accuracy_score(y_test, y_pred))

在这里插入图片描述

代码解释:
  • datasets.load_iris():加载鸢尾花数据集。
  • train_test_split:将数据集划分为训练集和测试集。
  • GaussianNB():创建高斯朴素贝叶斯分类器,假设特征服从高斯分布。
  • nb_classifier.fit(X_train, y_train):使用训练集训练分类器。
  • y_pred = nb_classifier.predict(X_test):使用测试集进行预测。
  • accuracy_score(y_test, y_pred):计算预测的准确率。
手动实现朴素贝叶斯分类器
import numpy as npclass NaiveBayes:def fit(self, X, y):n_samples, n_features = X.shapeself.classes = np.unique(y)n_classes = len(self.classes)# 计算先验概率 P(c)self.priors = np.zeros(n_classes)self.mean = np.zeros((n_classes, n_features))self.var = np.zeros((n_classes, n_features))for idx, c in enumerate(self.classes):X_c = X[y == c]self.priors[idx] = len(X_c) / n_samplesself.mean[idx] = X_c.mean(axis=0)self.var[idx] = X_c.var(axis=0)def predict(self, X):y_pred = []for x in X:posteriors = []for idx, c in enumerate(self.classes):prior = np.log(self.priors[idx])posterior = np.sum(np.log(self._pdf(idx, x)))posterior = prior + posteriorposteriors.append(posterior)y_pred.append(self.classes[np.argmax(posteriors)])return np.array(y_pred)def _pdf(self, class_idx, x):mean = self.mean[class_idx]var = self.var[class_idx]numerator = np.exp(-((x - mean) ** 2) / (2 * var))denominator = np.sqrt(2 * np.pi * var)return numerator / denominator# 示例使用
X = np.array([[1, 2], [2, 3], [3, 4], [6, 7], [7, 8], [8, 9]])
y = np.array([0, 0, 0, 1, 1, 1])
nb = NaiveBayes()
nb.fit(X, y)
print(nb.predict(np.array([[2, 2], [7, 7]])))

在这里插入图片描述

代码解释:
  • fit 方法:
    • 计算每个类别的先验概率 (P©)。
    • 计算每个类别下每个特征的均值和方差,用于计算 (P(x_i|c)) 假设为高斯分布。
  • predict 方法:
    • 计算每个类别的后验概率 (P(c|x)) 的对数,使用对数是为了避免数值下溢。
    • 选择后验概率最大的类别作为预测结果。
  • _pdf 方法:
    • 计算高斯分布的概率密度函数。

EM 算法代码示例

import numpy as npdef em_algorithm(X, n_components, max_iter=100, tol=1e-4):n_samples, n_features = X.shape# 初始化参数pi = np.ones(n_components) / n_componentsmeans = np.random.randn(n_components, n_features)covs = np.array([np.eye(n_features)] * n_components)responsibilities = np.zeros((n_samples, n_components))for iteration in range(max_iter):# E 步for k in range(n_components):responsibilities[:, k] = pi[k] * multivariate_gaussian(X, means[k], covs[k])responsibilities /= responsibilities.sum(axis=1, keepdims=True)# M 步Nk = responsibilities.sum(axis=0)pi = Nk / n_samplesfor k in range(n_components):means[k] = (responsibilities[:, k].dot(X)) / Nk[k]diff = X - means[k]covs[k] = (responsibilities[:, k] * diff.T).dot(diff) / Nk[k]# 计算似然函数likelihood = np.sum(np.log(responsibilities.dot(pi)))if iteration > 0 and np.abs(likelihood - prev_likelihood) < tol:breakprev_likelihood = likelihoodreturn pi, means, covsdef multivariate_gaussian(X, mean, cov):n = X.shape[1]diff = X - meaninv_cov = np.linalg.inv(cov)det_cov = np.linalg.det(cov)exponent = -0.5 * np.sum(diff @ inv_cov * diff, axis=1)return (1 / np.sqrt((2 * np.pi) ** n * det_cov)) * np.exp(exponent)# 示例使用
X = np.random.randn(100, 2)
pi, means, covs = em_algorithm(X, 2)
print("Pi:", pi)
print("Means:", means)
print("Covariances:", covs)

在这里插入图片描述

代码解释:
  • em_algorithm 函数:
    • 初始化参数 (\pi)(混合系数)、(\mu)(均值)和 (\Sigma)(协方差矩阵)。
    • E 步:计算每个样本属于每个组件的责任(responsibility)。
    • M 步:更新参数。
    • 计算似然函数并检查收敛。
  • multivariate_gaussian 函数:计算多元高斯分布的概率密度函数。

在这里插入图片描述


http://www.ppmy.cn/ops/151100.html

相关文章

某国际大型超市电商销售数据分析和可视化

完整源码项目包获取→点击文章末尾名片&#xff01; 本作品将从人、货、场三个维度&#xff0c;即客户维度、产品维度、区域维度&#xff08;补充时间维度与其他维度&#xff09;对某国际大型超市的销售情况进行数据分析和可视化报告展示&#xff0c;从而为该超市在弄清用户消费…

ubuntu的截图工具有哪些

在 Ubuntu 上&#xff0c;有多种截图工具可供选择&#xff0c;以下是一些常用的工具及其使用方法&#xff1a; 1. 内置截图工具 Ubuntu 自带了一个简单的截图工具&#xff0c;可以通过快捷键或应用程序启动。 快捷键&#xff1a; 全屏截图&#xff1a;Print Screen&#xff08…

使用FineBI进行数据分析(入门级)

使用FineBI进行数据分析&#xff08;入门级&#xff09; 实验背景 哔哩哔哩&#xff0c;简称 B 站&#xff0c;现为中国年轻世代高度聚集的文化社区和视频平台&#xff0c;该网站于 2009 年 6 月 26 日创建&#xff0c; 2018 年 3 月 28 日在美国纳斯达克上市。早期 B 站是一…

CCLINKIE转ModbusTCP网关,助机器人“掀起”工业智能的“惊涛骇浪”

以下是一个稳联技术CCLINKIE转ModbusTCP网关&#xff08;WL-CCL-MTCP&#xff09;连接三菱PLC与机器人的配置案例&#xff1a;设备与软件准备设备&#xff1a;稳联技术WL-CCL-MTCP网关、三菱FX5UPLC、支持ModbusTCP协议的机器人、网线等。 稳联技术ModbusTCP转CCLINKIE网关&…

C++并发编程之异常安全性增强

在并发编程中&#xff0c;异常安全是一个非常重要的方面&#xff0c;因为并发环境下的错误处理比单线程环境更加复杂。当多个线程同时执行时&#xff0c;异常不仅可能影响当前线程&#xff0c;还可能影响其他线程和整个程序的稳定性。以下是一些增强并发程序异常安全性的方法&a…

Kafka 控制生产者流量

在 Apache Kafka 中&#xff0c;控制生产者流量&#xff08;即控制生产者的发送速率和负载&#xff09;通常涉及以下几个方面&#xff1a;流量控制、速率限制、缓冲区管理等。Kafka 生产者有一些内置配置&#xff0c;可以帮助我们限制数据的生产速率&#xff0c;从而防止过高的…

C++ QT 自绘呼吸灯

功能 使用QLabel生成一个呼吸灯的效果&#xff0c;用于显示某个状态的变化h #ifndef CUELIGHTLABEL_H #define CUELIGHTLABEL_H#include <QLabel> #include <QPropertyAnimation>class CueLightLabel : public QLabel {Q_OBJECTQ_PROPERTY(QColor color READ get…

算法(蓝桥杯)贪心算法7——过河的最短时间问题解析

一、题目描述 在漆黑的夜里&#xff0c;N位旅行者来到了一座狭窄且没有护栏的桥边。他们只带了一只手电筒&#xff0c;且桥窄得只够让两个人同时过。如果各自单独过桥&#xff0c;N人所需的时间已知&#xff1b;若两人同时过桥&#xff0c;则所需时间是走得较慢的那个人单独行动…