【统计学习方法】朴素贝叶斯

本文深入介绍了朴素贝叶斯算法的核心概念,包括贝叶斯定理、特征条件独立假设以及如何计算先验概率和条件概率。通过实例展示了如何在Python中实现离散数据和连续数据的朴素贝叶斯分类,并提供了高斯朴素贝叶斯的代码实现。此外,还讨论了拉普拉斯修正在处理训练集中未出现属性值问题时的作用。

一、前言

首先介绍朴素贝叶斯的核心公式:

P A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) PA|B) = \frac{ {P(A)P(B|A)}}{ {P(B)}} PAB)=P(B)P(A)P(BA)
在这里插入图片描述

Wikipedia贝叶斯定理

朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法。”朴素贝叶斯“之”朴素“之名即来源于其特征条件独立的假设。对于给定的数据集,首先基于特征条件独立假设学习输入输出的联合概率分布,而后基于此模型,对于给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。具体地,条件独立性假设是:
P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , . . . , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X = {\rm{x}}|Y = {c_k}) = P({X^{(1)}} = {x^{(1)}},...,{X^{(n)}} \\= {x^{(n)}}|Y = {c_k}) = \prod\limits_{j = 1}^n {P({X^{(j)}} = {x^{(j)}}|Y = {c_k})} P(X=xY=ck)=P(X(1)=x(1),...,X(n)=x(n)Y=ck)=j=1nP(X(j)=x(j)Y=ck)

二、朴素贝叶斯算法

对于训练数据:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( n ) ) T , x i ( j ) ∈ { a j 1 , a j 2 , . . . , a j S j } T = \{ ({x_1},{y_1}),({x_2},{y_2}),...,({x_N},{y_N})\} ,\\{x_i} = {(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T} ,x_i^{(j)} \in \{ {a_{j1}},{a_{j2}},...,{a_{j{S_j}}}\} T={ (x1,y1),(x2,y2),...,(xN,yN)},xi=(xi(1),xi(2),..

统计学习方法是一种基于统计理论和机器学习方法,用于从数据中学习模型并进行预测和决策。朴素贝叶斯统计学习方法中的一种经典算法,它基于贝叶斯定理和特征条件独立假设,常用于文本分类、垃圾邮件过滤等任务。 下面是一个简单的朴素贝叶斯分类器的代码示例: ```python import numpy as np class NaiveBayes: def __init__(self): self.classes = None self.class_priors = None self.feature_probs = None def fit(self, X, y): self.classes = np.unique(y) self.class_priors = np.zeros(len(self.classes)) self.feature_probs = [] for i, c in enumerate(self.classes): X_c = X[y == c] self.class_priors[i] = len(X_c) / len(X) feature_probs_c = [] for j in range(X.shape[1]): feature_values = np.unique(X[:, j]) feature_prob = {} for v in feature_values: feature_prob[v] = len(X_c[X_c[:, j] == v]) / len(X_c) feature_probs_c.append(feature_prob) self.feature_probs.append(feature_probs_c) def predict(self, X): y_pred = [] for x in X: class_scores = [] for i, c in enumerate(self.classes): class_score = np.log(self.class_priors[i]) for j, feature_value in enumerate(x): class_score += np.log(self.feature_probs[i][j].get(feature_value, 1e-10)) class_scores.append(class_score) y_pred.append(self.classes[np.argmax(class_scores)]) return y_pred ``` 这段代码实现了一个简单的朴素贝叶斯分类器。`fit`方法用于训练模型,接受特征矩阵`X`和标签向量`y`作为输入。`predict`方法用于进行预测,接受特征矩阵`X`作为输入,并返回预测的标签向量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值