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

朴素贝叶斯

基于贝叶斯定理与特征条件独立的假设的分类方法。

对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。

 

贝叶斯定理

P(A|B):在事件B发生条件 下的事件A发生的概率,在贝叶斯定理中,条件概率也被称为后验概率,在事件B发生之后,对事件A发生的概率的重新评估。

P(B|A):在事件A发生条件下的事件B发生的概率

P(A)与P(B)被称为先验概率(边缘概率):P(A)是指事件B发生之前,对事件A概率的一个推断。

P(B|A)/P(B)被称为标准相似度:它是一个调整因子,主要为保证预测概率更接近真实概率。

贝叶斯定理:后验概率=标准相似度*先验概率

加上全概率公式之后贝叶斯定理变为:

 

朴素贝叶斯

朴素贝叶斯法实际上学到的是生成数据的机制,属于生成模型。

朴素贝叶斯法分类时,对给定的输入x,通过学习到的模型计算后验概率分布

,将后验概率最大的类作为x的类输出。

后验概率计算由贝叶斯定理得:

那么朴素贝叶斯分类器就为:

 

 

朴素贝叶斯法的参数估计

训练数据学习后验概率和先验概率的估计

极大似然估计

在朴素贝叶斯法中,学习意味着估计先验概率已经后验概率,可以用极大似然估计的方法来估计相应的概率。

先验概率的极大似然估计为:

条件概率的极大似然估计是:

 

朴素贝叶斯的学习与分类算法:

(3)后验概率最大等价于0-1损失函数时的期望风险最小化。

 

贝叶斯估计

条件概率的贝叶斯估计:

拉姆达等于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、付费专栏及课程。

余额充值