前言
提醒:
文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。
其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。
文章目录
分类与回归算法
机器学习中的分类与回归算法是两种主要的监督学习任务,它们分别用于解决不同类型的问题。以下是这两种算法的总结:
分类算法:
分类算法用于将数据分成不同的类别,适用于输出为离散标签的问题。常见的分类算法包括:
- 逻辑回归:使用逻辑函数来估计概率,用于二分类问题,也可以扩展到多分类问题。
- 支持向量机(SVM):通过找到最优的决策边界来最大化样本的分类准确率,适用于高维数据。
- 决策树:通过树结构来进行决策,每个节点代表一个特征的选择,叶子节点代表分类结果。
- 随机森林:由多个决策树组成的集成学习方法,通过投票来决定最终分类结果。
- 梯度提升决策树(GBDT):通过构建和结合多个弱学习器来形成强学习器,适用于分类和回归问题。
- 朴素贝叶斯:基于贝叶斯定理,假设特征之间相互独立,适用于文本分类等场景。
- K近邻(KNN):根据样本之间的距离进行分类,适用于小规模数据集。
- 神经网络:通过多层感知机学习数据的复杂模式,适用于图像、语音等复杂分类问题。
回归算法:
回归算法用于预测连续数值输出,适用于输出为连续变量的问题。常见的回归算法包括:
- 线性回归:通过拟合一条直线来预测目标变量的值,是最简单的回归方法。
- 岭回归:线性回归的扩展,通过引入L2正则化项来防止过拟合。
- Lasso回归:线性回归的另一种扩展,通过引入L1正则化项来进行特征选择。
- 弹性网回归:结合了岭回归和Lasso回归,同时引入L1和L2正则化项。
- 决策树回归:使用决策树结构来进行回归预测,适用于非线性关系。
- 随机森林回归:由多个决策树组成的集成学习方法,通过平均来决定最终回归结果。
- 梯度提升决策树回归(GBDT回归):通过构建和结合多个弱学习器来形成强学习器,适用于回归问题。
- 支持向量回归(SVR):支持向量机在回归问题上的应用,通过找到最优的决策边界来最大化样本的回归准确率。
- 神经网络回归:通过多层感知机学习数据的复杂模式,适用于复杂的回归问题。
分类与回归算法的比较:
- 输出类型:分类算法输出离散标签,回归算法输出连续数值。
- 评估指标:分类算法常用准确率、召回率、F1分数等指标,回归算法常用均方误差(MSE)、均方根误差(RMSE)等指标。
- 问题类型:分类算法适用于类别预测问题,如垃圾邮件检测;回归算法适用于数值预测问题,如房价预测。 在实际应用中,选择分类还是回归算法取决于问题的性质和需求。有时,可以将回归问题转化为分类问题,或者将分类问题转化为回归问题,具体取决于问题的特点和目标。
朴素贝叶斯
1. 贝叶斯定理
贝叶斯定理用于计算在已知某些条件下,某个事件发生的概率。公式如下:
P
(
C
∣
X
)
=
P
(
X
∣
C
)
P
(
C
)
P
(
X
)
P(C|X) = \frac{P(X|C)P(C)}{P(X)}
P(C∣X)=P(X)P(X∣C)P(C)
其中:
- P ( C ∣ X ) P(C|X) P(C∣X):在特征向量 X X X 已知的情况下,类别 C C C 的后验概率。
- P ( X ∣ C ) P(X|C) P(X∣C):在类别 C C C 已知的情况下,特征向量 X X X 的条件概率。
- P ( C ) P(C) P(C):类别 C C C 的先验概率(即在没有观察到特征时,该类别出现的概率)。
- P ( X ) P(X) P(X):特征向量 X X X 的边缘概率。
2. 特征条件独立假设
朴素贝叶斯的核心假设是:在给定类别 C C C 的情况下,各个特征 X 1 , X 2 , … , X n X_1, X_2, \ldots, X_n X1,X2,…,Xn 是相互独立的。这大大简化了条件概率 P ( X ∣ C ) P(X|C) P(X∣C) 的计算。
条件独立假设下,条件概率可以分解为:
P
(
X
∣
C
)
=
∏
i
=
1
n
P
(
X
i
∣
C
)
P(X|C) = \prod_{i=1}^{n} P(X_i|C)
P(X∣C)=i=1∏nP(Xi∣C)
其中:
- X i X_i Xi 是样本的第 i i i 个特征。
- P ( X i ∣ C ) P(X_i|C) P(Xi∣C) 是第 i i i 个特征在类别 C C C 下的条件概率。
3. 分类过程
朴素贝叶斯分类的具体步骤如下:
步骤 1:计算先验概率 P ( C ) P(C) P(C)
先验概率
P
(
C
)
P(C)
P(C) 通常通过训练数据中各个类别的频率来估计:
P
(
C
k
)
=
类别
C
k
的样本数量
总样本数量
P(C_k) = \frac{\text{类别 } C_k \text{ 的样本数量}}{\text{总样本数量}}
P(Ck)=总样本数量类别 Ck 的样本数量
步骤 2:计算条件概率 P ( X i ∣ C ) P(X_i|C) P(Xi∣C)
条件概率 P ( X i ∣ C ) P(X_i|C) P(Xi∣C) 的计算方法取决于特征的类型:
- 离散特征:如果
X
i
X_i
Xi 是离散变量,可以通过频率统计来估计:
P ( X i = x i ∣ C ) = 在类别 C 中,特征 X i = x i 的出现次数 类别 C 的总样本数量 P(X_i = x_i|C) = \frac{\text{在类别 } C \text{ 中,特征 } X_i = x_i \text{ 的出现次数}}{\text{类别 } C \text{ 的总样本数量}} P(Xi=xi∣C)=类别 C 的总样本数量在类别 C 中,特征 Xi=xi 的出现次数 - 连续特征:如果
X
i
X_i
Xi 是连续变量,通常假设其服从某种概率分布(如高斯分布),并估计分布参数(如均值和方差):
P ( X i = x i ∣ C ) = 1 2 π σ k 2 e − ( x i − μ k ) 2 2 σ k 2 P(X_i = x_i|C) = \frac{1}{\sqrt{2\pi\sigma_k^2}}e^{ -\frac{(x_i - \mu_k)^2}{2\sigma_k^2} } P(Xi=xi∣C)=2πσk21e−2σk2(xi−μk)2
其中, μ k \mu_k μk 和 σ k 2 \sigma_k^2 σk2 是类别 C k C_k Ck 中特征 X i X_i Xi 的均值和方差。
步骤 3:计算后验概率
根据贝叶斯定理和特征条件独立假设,后验概率可以表示为:
P
(
C
∣
X
)
∝
P
(
C
)
∏
i
=
1
n
P
(
X
i
∣
C
)
P(C|X) \propto P(C) \prod_{i=1}^{n} P(X_i|C)
P(C∣X)∝P(C)i=1∏nP(Xi∣C)
由于分母
P
(
X
)
P(X)
P(X) 对所有类别来说是相同的,分类时可以忽略它。
步骤 4:选择最大后验概率的类别
对于新的样本,计算每个类别的后验概率,并选择概率最大的类别作为预测结果:
C
^
=
arg
max
C
P
(
C
)
∏
i
=
1
n
P
(
X
i
∣
C
)
\hat{C} = \arg\max_{C} P(C) \prod_{i=1}^{n} P(X_i|C)
C^=argCmaxP(C)i=1∏nP(Xi∣C)
4. 实际应用示例
问题背景
假设我们要构建一个简单的垃圾邮件分类器,将电子邮件分为“垃圾邮件(Spam)”和“非垃圾邮件(Ham)”。我们根据邮件内容中的特定单词来判断邮件的类别。
训练数据
以下是几封邮件的样本数据:
邮件编号 | 邮件内容 | 类别 |
---|---|---|
1 | “free lottery win” | Spam |
2 | “meeting tomorrow” | Ham |
3 | “free trial offer” | Spam |
4 | “urgent meeting” | Ham |
5 | “buy now save money” | Spam |
特征提取
假设我们选择以下单词作为特征:free
, lottery
, win
, meeting
, trial
, offer
, urgent
, buy
, now
, save
, money
。
步骤 1:计算先验概率 P ( C ) P(C) P(C)
根据训练数据,统计各类别邮件的数量:
- Spam: 3 封邮件
- Ham: 2 封邮件
先验概率:
- P ( Spam ) = 3 5 = 0.6 P(\text{Spam}) = \frac{3}{5} = 0.6 P(Spam)=53=0.6
- P ( Ham ) = 2 5 = 0.4 P(\text{Ham}) = \frac{2}{5} = 0.4 P(Ham)=52=0.4
步骤 2:计算条件概率 P ( X i ∣ C ) P(X_i|C) P(Xi∣C)
统计每个特征单词在各个类别的出现次数:
- 特征单词:
free
- 在 Spam 中出现次数:2 次(邮件 1 和 3)
- 在 Ham 中出现次数:0 次
条件概率:
- P ( free ∣ Spam ) = 2 3 P(\text{free}|\text{Spam}) = \frac{2}{3} P(free∣Spam)=32
- P ( free ∣ Ham ) = 0 2 = 0 P(\text{free}|\text{Ham}) = \frac{0}{2} = 0 P(free∣Ham)=20=0
- 特征单词:
meeting
- 在 Spam 中出现次数:0 次
- 在 Ham 中出现次数:2 次(邮件 2 和 4)
条件概率:
- P ( meeting ∣ Spam ) = 0 3 = 0 P(\text{meeting}|\text{Spam}) = \frac{0}{3} = 0 P(meeting∣Spam)=30=0
- P ( meeting ∣ Ham ) = 2 2 = 1 P(\text{meeting}|\text{Ham}) = \frac{2}{2} = 1 P(meeting∣Ham)=22=1
- 其他特征单词
类似地,计算其他单词的条件概率:
- P ( lottery ∣ Spam ) = 1 3 P(\text{lottery}|\text{Spam}) = \frac{1}{3} P(lottery∣Spam)=31
- P ( win ∣ Spam ) = 1 3 P(\text{win}|\text{Spam}) = \frac{1}{3} P(win∣Spam)=31
- P ( trial ∣ Spam ) = 1 3 P(\text{trial}|\text{Spam}) = \frac{1}{3} P(trial∣Spam)=31
- P ( offer ∣ Spam ) = 1 3 P(\text{offer}|\text{Spam}) = \frac{1}{3} P(offer∣Spam)=31
- P ( urgent ∣ Ham ) = 1 2 P(\text{urgent}|\text{Ham}) = \frac{1}{2} P(urgent∣Ham)=21
- P ( buy ∣ Spam ) = 1 3 P(\text{buy}|\text{Spam}) = \frac{1}{3} P(buy∣Spam)=31
- P ( now ∣ Spam ) = 1 3 P(\text{now}|\text{Spam}) = \frac{1}{3} P(now∣Spam)=31
- P ( save ∣ Spam ) = 1 3 P(\text{save}|\text{Spam}) = \frac{1}{3} P(save∣Spam)=31
- P ( money ∣ Spam ) = 1 3 P(\text{money}|\text{Spam}) = \frac{1}{3} P(money∣Spam)=31
步骤 3:拉普拉斯平滑
为了避免某些特征概率为 0 的问题,我们需要使用拉普拉斯平滑(Laplace Smoothing)。公式如下:
P
(
X
i
=
x
i
∣
C
)
=
计数
+
1
类别 C 中的单词总数
+
V
P(X_i = x_i|C) = \frac{\text{计数} + 1}{\text{类别 C 中的单词总数} + V}
P(Xi=xi∣C)=类别 C 中的单词总数+V计数+1
其中
V
V
V 是特征单词的数量。
在本例中, V = 11 V = 11 V=11(共有 11 个特征单词)。
修正后的条件概率
例如,对于 free
在 Spam 中的条件概率:
P
(
free
∣
Spam
)
=
2
+
1
3
+
11
=
3
14
P(\text{free}|\text{Spam}) = \frac{2 + 1}{3 + 11} = \frac{3}{14}
P(free∣Spam)=3+112+1=143
同样,对于 free
在 Ham 中的条件概率:
P
(
free
∣
Ham
)
=
0
+
1
2
+
11
=
1
13
P(\text{free}|\text{Ham}) = \frac{0 + 1}{2 + 11} = \frac{1}{13}
P(free∣Ham)=2+110+1=131
其他特征单词的条件概率也按照相同的方式计算。
步骤 4:分类新邮件
假设我们收到一封新邮件,内容为:
新邮件内容:
free money save
我们需要将其分类为 Spam 或 Ham。
计算后验概率
首先,计算 Spam 的后验概率:
P
(
Spam
∣
free
,
money
,
save
)
∝
P
(
Spam
)
×
P
(
free
∣
Spam
)
×
P
(
money
∣
Spam
)
×
P
(
save
∣
Spam
)
P(\text{Spam}|\text{free}, \text{money}, \text{save}) \propto P(\text{Spam}) \times P(\text{free}|\text{Spam}) \times P(\text{money}|\text{Spam}) \times P(\text{save}|\text{Spam})
P(Spam∣free,money,save)∝P(Spam)×P(free∣Spam)×P(money∣Spam)×P(save∣Spam)
代入修正后的概率值:
P
(
Spam
)
=
0.6
P
(
free
∣
Spam
)
=
3
14
P
(
money
∣
Spam
)
=
1
+
1
3
+
11
=
2
14
P
(
save
∣
Spam
)
=
1
+
1
3
+
11
=
2
14
P(\text{Spam}) = 0.6 \\ P(\text{free}|\text{Spam}) = \frac{3}{14} \\ P(\text{money}|\text{Spam}) = \frac{1 + 1}{3 + 11} = \frac{2}{14} \\ P(\text{save}|\text{Spam}) = \frac{1 + 1}{3 + 11} = \frac{2}{14} \\
P(Spam)=0.6P(free∣Spam)=143P(money∣Spam)=3+111+1=142P(save∣Spam)=3+111+1=142
因此:
P
(
Spam
∣
free
,
money
,
save
)
∝
0.6
×
3
14
×
2
14
×
2
14
≈
0.6
×
0.214
×
0.143
×
0.143
≈
0.0027
P(\text{Spam}|\text{free}, \text{money}, \text{save}) \propto 0.6 \times \frac{3}{14} \times \frac{2}{14} \times \frac{2}{14} \approx 0.6 \times 0.214 \times 0.143 \times 0.143 \approx 0.0027
P(Spam∣free,money,save)∝0.6×143×142×142≈0.6×0.214×0.143×0.143≈0.0027
接下来,计算 Ham 的后验概率:
P
(
Ham
∣
free
,
money
,
save
)
∝
P
(
Ham
)
×
P
(
free
∣
Ham
)
×
P
(
money
∣
Ham
)
×
P
(
save
∣
Ham
)
P(\text{Ham}|\text{free}, \text{money}, \text{save}) \propto P(\text{Ham}) \times P(\text{free}|\text{Ham}) \times P(\text{money}|\text{Ham}) \times P(\text{save}|\text{Ham})
P(Ham∣free,money,save)∝P(Ham)×P(free∣Ham)×P(money∣Ham)×P(save∣Ham)
代入修正后的概率值:
P
(
Ham
)
=
0.4
P
(
free
∣
Ham
)
=
1
13
P
(
money
∣
Ham
)
=
0
+
1
2
+
11
=
1
13
P
(
save
∣
Ham
)
=
0
+
1
2
+
11
=
1
13
P(\text{Ham}) = 0.4 \\ P(\text{free}|\text{Ham}) = \frac{1}{13} \\ P(\text{money}|\text{Ham}) = \frac{0 + 1}{2 + 11} = \frac{1}{13} \\ P(\text{save}|\text{Ham}) = \frac{0 + 1}{2 + 11} = \frac{1}{13} \\
P(Ham)=0.4P(free∣Ham)=131P(money∣Ham)=2+110+1=131P(save∣Ham)=2+110+1=131
因此:
P
(
Ham
∣
free
,
money
,
save
)
∝
0.4
×
1
13
×
1
13
×
1
13
≈
0.4
×
0.077
×
0.077
×
0.077
≈
0.0002
P(\text{Ham}|\text{free}, \text{money}, \text{save}) \propto 0.4 \times \frac{1}{13} \times \frac{1}{13} \times \frac{1}{13} \approx 0.4 \times 0.077 \times 0.077 \times 0.077 \approx 0.0002
P(Ham∣free,money,save)∝0.4×131×131×131≈0.4×0.077×0.077×0.077≈0.0002
比较两个后验概率:
- P ( Spam ∣ free , money , save ) ≈ 0.0027 P(\text{Spam}|\text{free}, \text{money}, \text{save}) \approx 0.0027 P(Spam∣free,money,save)≈0.0027
- P ( Ham ∣ free , money , save ) ≈ 0.0002 P(\text{Ham}|\text{free}, \text{money}, \text{save}) \approx 0.0002 P(Ham∣free,money,save)≈0.0002
显然,Spam 的后验概率更高,因此这封新邮件被分类为 Spam。
总结
通过朴素贝叶斯分类算法,我们成功将新邮件分类为垃圾邮件(Spam)。这个例子演示了如何使用贝叶斯定理和特征条件独立假设进行分类,以及如何通过拉普拉斯平滑解决概率为 0 的问题。
朴素贝叶斯实现
手动实现
from collections import defaultdict
import math
import pandas as pd
class NaiveBayesClassifier:
def __init__(self):
self.log_class_priors = {} # 存储每个类别的对数先验概率
self.word_counts = {} # 存储每个类别中每个特征值的计数
self.vocab = set() # 存储所有特征值的词汇表
def fit(self, X, y):
n = len(X)
class_counts = defaultdict(int) # 存储每个类别的计数
word_counts = defaultdict(lambda: defaultdict(int)) # 存储每个类别中每个特征值的计数
# 统计每个类别和每个特征值在各个类别中的出现次数
for x, label in zip(X, y):
class_counts[label] += 1
for word in x:
word_counts[label][word] += 1
self.vocab.add(word)
# 计算每个类别的对数先验概率
for label, count in class_counts.items():
self.log_class_priors[label] = math.log(count / n)
# 计算每个类别中每个特征值的概率
self.word_counts = {label: defaultdict(lambda: 0) for label in class_counts}
for label, counts in word_counts.items():
total_words = sum(counts.values())
for word, count in counts.items():
self.word_counts[label][word] = count / total_words
def predict(self, X):
result = []
for x in X:
log_probs = {}
for label in self.log_class_priors:
log_probs[label] = self.log_class_priors[label]
for word in x:
if word in self.vocab:
# 使用对数概率和拉普拉斯平滑来避免概率为0
log_probs[label] += math.log(self.word_counts[label][word] + 1e-6)
else:
# 如果特征值不在词汇表中,则忽略(相当于添加0)
continue
# 选择对数概率最高的类别作为预测结果
predicted_label = max(log_probs, key=log_probs.get)
result.append(predicted_label)
return result
# 示例用法
data = {
'Weather': ['Sunny', 'Cloudy', 'Rainy', 'Sunny', 'Cloudy', 'Rainy', 'Sunny', 'Cloudy', 'Rainy', 'Sunny'],
'Temperature': ['High', 'High', 'High', 'Medium', 'Medium', 'Medium', 'Low', 'Low', 'Low', 'Medium'],
'PlayBasketball': ['Yes', 'Yes', 'No', 'Yes', 'Yes', 'No', 'No', 'Yes', 'No', 'Yes']
}
df = pd.DataFrame(data)
# 将特征转换为元组列表
X = list(zip(df['Weather'], df['Temperature']))
y = df['PlayBasketball']
# 训练分类器
clf = NaiveBayesClassifier()
clf.fit(X, y)
# 进行预测
predictions = clf.predict([('Sunny', 'High'), ('Rainy', 'Low'), ('Cloudy', 'Medium')])
predictions
运行结果:
python函数库实现
高斯朴素贝叶斯(GaussianNB)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data # 特征
y = iris.target # 标签
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建高斯朴素贝叶斯分类器
gnb = GaussianNB()
# 训练模型
gnb.fit(X_train, y_train)
# 进行预测
y_pred = gnb.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"高斯朴素贝叶斯准确率: {accuracy}")
运行结果:
伯努利朴素贝叶斯(BernoulliNB)
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNB
from sklearn.metrics import accuracy_score
# 生成一些二元特征的示例数据
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=0, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建伯努利朴素贝叶斯分类器
bnb = BernoulliNB()
# 训练模型
bnb.fit(X_train, y_train)
# 进行预测
y_pred = bnb.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"伯努利朴素贝叶斯准确率: {accuracy}")
运行结果:
多项式朴素贝叶斯(MultinomialNB)
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
import numpy as np
# 生成一些示例数据
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=0, random_state=42)
# 确保数据是非负的,因为多项式朴素贝叶斯要求特征值为非负
X = np.abs(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建多项式朴素贝叶斯分类器
mnb = MultinomialNB()
# 训练模型
mnb.fit(X_train, y_train)
# 进行预测
y_pred = mnb.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"多项式朴素贝叶斯准确率: {accuracy}")
运行结果:
多种朴素贝叶斯算法总结
朴素贝叶斯基本原理
朴素贝叶斯的核心思想是基于贝叶斯定理来计算给定特征下各个类别的后验概率,然后选择后验概率最大的类别作为样本的分类结果。
-
贝叶斯定理公式:
P ( c ∣ X ) = P ( X ∣ c ) P ( c ) P ( X ) P(c|X)=\frac{P(X|c)P(c)}{P(X)} P(c∣X)=P(X)P(X∣c)P(c)其中,
- P ( c ∣ X ) P(c|X) P(c∣X) 是在特征 X = ( x 1 , x 2 , ⋯ , x n ) X=(x_1,x_2,\cdots,x_n) X=(x1,x2,⋯,xn) 出现的条件下类别 c c c 发生的后验概率;
- P ( X ∣ c ) P(X|c) P(X∣c) 是在类别 c c c 发生的条件下特征 X X X 出现的似然概率;
- P ( c ) P(c) P(c) 是类别 c c c 的先验概率;
- P ( X ) P(X) P(X) 是特征 X X X 出现的概率。
-
朴素贝叶斯引入了特征条件独立假设,即假设各个特征之间相互独立,那么 P ( X ∣ c ) = ∏ i = 1 n P ( x i ∣ c ) P(X|c)=\prod_{i = 1}^{n}P(x_i|c) P(X∣c)=∏i=1nP(xi∣c)。由于对于所有类别 P ( X ) P(X) P(X) 是相同的,所以分类决策规则为: c ^ = arg max c P ( c ) ∏ i = 1 n P ( x i ∣ c ) \hat{c}=\arg\max_{c}P(c)\prod_{i = 1}^{n}P(x_i|c) c^=argcmaxP(c)i=1∏nP(xi∣c)
高斯朴素贝叶斯(Gaussian Naive Bayes)
-
适用场景: 用于处理连续型的特征数据,假设每个类别下的特征都服从高斯分布(正态分布)。例如,在预测一个人的身高、体重等连续特征来判断其所属类别时适用。
-
特征概率计算: 对于每个类别 c c c 和特征 x i x_i xi,需要估计其均值 μ c i \mu_{ci} μci 和方差 σ c i 2 \sigma_{ci}^2 σci2。特征概率 P ( x i ∣ c ) P(x_i|c) P(xi∣c) 根据高斯分布的概率密度函数来计算:
P ( x i ∣ c ) = 1 2 π σ c i 2 exp ( − ( x i − μ c i ) 2 2 σ c i 2 ) P(x_i|c)=\frac{1}{\sqrt{2\pi\sigma_{ci}^2}}\exp\left(-\frac{(x_i - \mu_{ci})^2}{2\sigma_{ci}^2}\right) P(xi∣c)=2πσci21exp(−2σci2(xi−μci)2) -
优缺点
- 优点: 对于符合正态分布的连续型数据有较好的分类效果,计算相对简单。
- 缺点: 对数据的分布有较强的假设,如果数据不服从正态分布,模型性能可能会受到影响。
伯努利朴素贝叶斯(Bernoulli Naive Bayes)
-
适用场景: 适用于特征为二元值(0 或 1)的离散数据,在文本分类中可以表示某个单词是否在文档中出现。
-
特征概率计算: 对于每个类别 c c c 和特征 x i x_i xi, P ( x i ∣ c ) P(x_i|c) P(xi∣c) 是一个伯努利分布。设 n c n_c nc 是类别 c c c 的样本数量, n c i n_{ci} nci 是类别 c c c 中特征 x i = 1 x_i = 1 xi=1 的样本数量,则:
P ( x i = 1 ∣ c ) = n c i + α n c + 2 α P(x_i = 1|c)=\frac{n_{ci}+\alpha}{n_c + 2\alpha} P(xi=1∣c)=nc+2αnci+α, P ( x i = 0 ∣ c ) = 1 − P ( x i = 1 ∣ c ) P(x_i = 0|c)=1 - P(x_i = 1|c) P(xi=0∣c)=1−P(xi=1∣c),其中 α \alpha α 是平滑参数。 -
优缺点
- 优点: 对二元特征数据处理简单有效,能够快速进行分类决策。
- 缺点: 只考虑特征是否出现,忽略了特征出现的频率信息;同样依赖于特征条件独立假设。
多项式朴素贝叶斯(Multinomial Naive Bayes)
-
适用场景: 适用于特征表示为计数或者频率的离散数据,在文本分类任务中应用广泛,比如可以将文本表示为词频向量,每个特征代表一个单词在文档中出现的次数。
-
特征概率计算: 假设特征 x i x_i xi 是一个离散变量,取值范围为 { 1 , 2 , ⋯ , k } \{1,2,\cdots,k\} {1,2,⋯,k}。对于每个类别 c c c, P ( x i = k ∣ c ) P(x_i = k|c) P(xi=k∣c) 可以通过计算类别 c c c 中特征 x i x_i xi 取值为 k k k 的样本比例来估计,并且通常会使用拉普拉斯平滑(Laplace smoothing)来避免概率为 0 的情况。
设 N c i N_{ci} Nci 是类别 c c c 中特征 x i x_i xi 所有取值的计数总和, N c i k N_{cik} Ncik 是类别 c c c 中特征 x i x_i xi 取值为 k k k 的计数, V V V 是特征 x i x_i xi 所有可能取值的数量,则:
P ( x i = k ∣ c ) = N c i k + α N c i + α V P(x_i = k|c)=\frac{N_{cik}+\alpha}{N_{ci}+\alpha V} P(xi=k∣c)=Nci+αVNcik+α,其中 α \alpha α 是平滑参数,通常取 1。 -
优缺点
- 优点: 对文本数据处理效果较好,训练和预测速度快,在大规模文本分类任务中表现出色。
- 缺点: 假设特征之间相互独立,在实际应用中可能不成立;对数据中的噪声和异常值比较敏感。