统计学习方法 - 朴素贝叶斯

引入问题:一机器在良好状态生产合格产品几率是 90%,在故障状态生产合格产品几率是 30%,机器良好的概率是 75%。若一日第一件产品是合格品,那么此日机器良好的概率是多少。

贝叶斯模型

生成模型与判别模型

  • 判别模型,即要判断这个东西到底是哪一类,也就是要求y,那就用给定的x去预测。
  • 生成模型,是要生成一个模型,那就是谁根据什么生成了模型,谁就是类别y,根据的内容就是x
  • 以上述例子,判断一个生产出来的零件是模块手还是模块脚,那么就是拿生产出零件去对照过去生产出的零件模块。生成模型是给了一个零件手,研究手的特征,然后生成判断研究新产出的是不是手模块。
    判断一个新生产出的模块就是将新生产的模块放入两个模块中,哪个概率大就是哪个类别。

贝叶斯理论

贝叶斯观点是先主观有自己的判断做为一个初始的概率,然后根据每次出现的情况对初始的概率进行修正,随着信息的增多,慢慢接近真是的概率。
例如领导寻班时问:“今天机器运行怎么样?”,你拿着刚生产出好的模块说:“今天做出来的模块是好的,机器应该也是好的。”这个就是基于主观的初始概率,当然机器也有可能不是在良好运行状态下生产的,生产出的模块是支持机器运行良好的假设。

贝叶斯公式
在这里插入图片描述
在这里,我们想要看产品合格的情况下,机器良好运行的概率,那么:
A是要考察的目标事件:机器是否运行良好。
P(A) 是这个目标事件的先验概率,又叫初始概率:机器运行良好的概率。
B 是新出现的一个新事件:生产出的产品是否良好。
P(A|B) 的意思是当B出现时A的概率,在这里就是我们需要的后验概率:产品合格时机器运行良好的概率。
P(B|A) 是当A出现时B的概率:机器运行良好时,产品良好的概率。
P(B) 是B出现的概率:即产品合格的先验概率是多少,这里一定要注意不能因为你手上拿了一件合格产品,就说P(B)是100%,实际上这个概率是要根据以下这个公式(即全概率公式)计算出来的:
P(B) = P(B|A) * P(A) + P(B|A_) * P(A_)。
P(B|A) / P(B) 可以看作一个修正因子。

对贝叶斯公式的理解可以看做:

后验概率 = 先验概率 x 修正因子

使用条件概率
想像一个矩形,它代表所有的情况。在其中用一个圆a表示A事件发生的情况。圆b表示B事件。他们的相交部分就是AB同时发生的情况。
在这里插入图片描述
在事件B发生的情况下,事件A发生的概率就是P(A∩B)除以P(B)
在这里插入图片描述
因此,
在这里插入图片描述
同理可得,
在这里插入图片描述
所以,
在这里插入图片描述

贝叶斯准则告诉我们如何交换条件概率中的条件与结果,即如果已知 P(x|c),要求 P(c|x),那么可以使用下面的计算方法
在这里插入图片描述

朴素贝叶斯
我们假设特征之间 相互独立 。所谓 独立(independence) 指的是统计意义上的独立,即一个特征或者单词出现的可能性与它和其他单词相邻没有关系,比如说,“我们”中的“我”和“们”出现的概率与这两个字相邻没有任何关系。这个假设正是朴素贝叶斯分类器中 朴素(naive) 一词的含义。朴素贝叶斯分类器中的另一个假设是,每个特征同等重要。

极大似然估计
在这里插入图片描述
总结起来,最大似然估计的目的就是:利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。

原理:极大似然估计是建立在极大似然原理的基础上的一个统计方法,是概率论在统计学中的应用。极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。通过若干次试验,观察其结果,利用试验结果得到某个参数值能够使样本出现的概率为最大,则称为极大似然估计。

贝叶斯估计

用极大似然估计可能会出现索要估计的概率值为0的情况。这时会影响到后验概率的计算结果,使分类产生偏差。解决这一问题的方法是采用贝叶斯估计。具体地,条件概率的贝叶斯估计是:
在这里插入图片描述
式子 入>=0 等价于在随机变量各个取值的频数上赋予一个正数 入>0。当 入 = 0时就是极大似然估计。常取 入 = 1,这时称为拉普拉斯平滑。

### 朴素贝叶斯算法的原理 朴素贝叶斯是一种基于贝叶斯定理和特征条件独立假设的分类方法,在机器学习领域具有广泛的应用价值。其核心思想是通过已知的数据分布计算未知数据属于某一类别的概率,并以此作为分类依据[^1]。 #### 贝叶斯定理 贝叶斯定理描述了如何根据先验概率更新得到后验概率,具体表达式如下: \[ P(C|X) = \frac{P(X|C) P(C)}{P(X)} \] 其中: - \(P(C)\) 表示类别\(C\)的先验概率; - \(P(X|C)\) 是给定类别下样本\(X\)的概率密度函数; - \(P(X)\) 是样本\(X\)在整个空间中的边缘概率; - \(P(C|X)\) 则表示在观察到样本\(X\)的情况下,它属于类别\(C\)的后验概率[^2]。 为了简化模型复杂度,朴素贝叶斯引入了一个重要的假设——**特征条件独立性**,即认为各个特征之间相互独立。这一假设使得联合概率可以分解为各特征单独概率的乘积形式,从而极大地降低了参数估计难度[^3]。 --- ### 实现过程 以下是朴素贝叶斯算法的一个典型实现流程: 1. **准备训练集与测试集** 将原始数据划分为用于构建模型的训练部分以及验证性能的测试部分。 2. **统计各类别下的频率** 对于每一个可能的目标标签(或称为类别),分别记录它们各自出现的比例作为初始的先验概率估计值。 3. **计算似然项** 针对每种属性组合情况,测量该组特性对应不同目标标记的可能性大小。如果某些特定条件下某变量取某个固定数值几乎不可能发生,则可通过拉普拉斯平滑技术加以调整避免零概率问题的发生影响最终结果准确性。 4. **预测新实例所属类别** 当遇到一个新的输入向量时,按照上述公式逐一求解针对所有候选分类的结果并选取最大者所指示的方向完成判定操作。 下面给出一段简单的 Python 示例代码展示如何手动创建一个基本版本的 Naïve Bayes Classifier: ```python import numpy as np from collections import defaultdict, Counter class GaussianNB: def __init__(self): self.class_prior_ = None # 存储每个类别的先验概率 self.theta_ = {} # 各个特征均值字典 {label: [mean_feature0,...]} self.sigma_ = {} # 方差同上结构 def fit(self, X_train, y_train): n_samples, n_features = X_train.shape labels = set(y_train) # 计算先验概率 counts = dict(Counter(y_train)) total_count = sum(counts.values()) self.class_prior_ = {k:v/total_count for k,v in counts.items()} # 初始化theta 和 sigma 字典 for label in labels: indices = (y_train == label) subset_X = X_train[indices] means = [] variances = [] for col_idx in range(n_features): feature_values = subset_X[:,col_idx] mean_val = np.mean(feature_values) variance_val = np.var(feature_values)+1e-9 means.append(mean_val) variances.append(variance_val) self.theta_[label]=means self.sigma_[label]=variances def predict_proba(self,X_test): results=[] for sample in X_test: posteriors={} for label,(mu,sigma_sq)in zip(self.theta_.keys(),zip(self.theta_.values(),self.sigma_.values())): prior=np.log(self.class_prior_[label]) posterior=prior+sum(-((sample-mu)**2)/(2*sigma_sq)-np.log(np.sqrt(sigma_sq*(2*np.pi)))) posteriors[label]=posterior results.append(posteriors) return results def predict(self, X_test): probas=self.predict_proba(X_test) predictions=[max(proba,key=proba.get)for proba in probas] return predictions ``` 此段程序定义了一款适用于连续型随机变量的标准高斯分布版朴素贝叶斯分类器[Gaussian Naive Bayes], 它能够接收二维数组格式化后的特征矩阵及其对应的离散型响应变量列表进行拟合运算;之后再接受待测个体集合执行批量推测作业返回最有可能归属哪一类别的答案序列. --- ### § 1. 如何处理当实际应用场景中存在违反“特征间互相独立”假定时的情况? 2. 在面对稀疏数据或者极端不平衡数据集的时候,有哪些改进措施可以帮助提升朴素贝叶斯的表现效果呢? 3. 是否可以通过集成多个弱分类器的方式来增强单一朴素贝叶斯模型的能力?如果有,请举例说明具体的方案设计思路. 4. 假设我们正在做一个多分类任务而不是传统的二元对立判断场景下,那么相应的数学建模逻辑会发生怎样的变化吗? 如果会的话又该如何修改现有的框架去适应新的需求呢 ? 5. 探讨一下除了常见的文本挖掘之外还有哪些新兴领域也开始逐渐采纳起这种经典却依然有效的传统监督学习策略来进行探索研究工作 ?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值