文章目录
什么是朴素贝叶斯算法
朴素贝叶斯算法是一种基于概率的分类算法。朴素就是假设特征与特征之间是相互独立,贝叶斯则为贝叶斯公式。
它的核心思想是通过已知的特征和类别信息,计算新样本属于不同类别的概率,从而将新样本分类到概率最大的类别中。该算法基于贝叶斯定理,并假设数据集中的特征是相互独立的,这一假设虽然在现实中往往不成立,但简化了计算过程,使得算法在实际应用中仍具有很好的表现。
核心思想:朴素贝叶斯算法 = 朴素 + 贝叶斯 ; 旨通过概率对新样本进行分类
概率基础
什么是概率?旨一件事情发生的可能性,概率分为三种。
- 联合概率
- 包含多个条件,且多个条件同时成立的概率。例如,事件 A 和事件 B 同时发生的概率可以表示为 P (A,B)。
- 条件概率
- 条件概率是在已知某个事件发生的条件下,另一个事件发生的概率。例如,在事件 B 已经发生的条件下,事件 A 发生的概率可以表示为 P (A|B)。
- 相互独立
- 如果两个事件 A 和 B 相互独立,事件A可以推出事件B,事件B可以推出事件A,即 P (A,B) <=> P (A) P (B)。
贝叶斯公式
贝叶斯公式是朴素贝叶斯算法的理论基础。它的公式为:
P(A|B)表示事件B发生的条件下事件A发生的概率
P(B|A)表示事件A发生的条件下事件B发生的概率
P(A)是事件A发生的先验概率,
P(B)是事件B发生的先验概率
案例
def nb_news():
"""
用朴素贝叶斯算法对新闻进行分类
:return:
"""
# 1)获取数据
news = fetch_20newsgroups(subset="all")
# 2)划分数据集
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)
# 3)特征工程:文本特征抽取-tfidf
transfer = TfidfVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4)朴素贝叶斯算法预估器流程
estimator = MultinomialNB()
estimator.fit(x_train, y_train)
# 5)模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
return None
if __name__ == "__main__":
nb_news()
运行结果:
总结
朴素贝叶斯算法
- 优点
- 算法简单高效
- 对小规模数据表现良好
- 对缺失数据不敏感
- 缺点
- 特征独立性假设不总是成立
- 对输入数据的表达形式敏感
- 可能会出现概率估计偏差
应用场景:适用于新闻分类、情感分析、垃圾邮件过滤等