机器学习中的概率超能力:如何用朴素贝叶斯算法结合标注数据做出精准预测

举报
小馒头学Python 发表于 2024/11/22 22:09:24 2024/11/22
【摘要】 🍋1 引言机器学习中,概率模型常被用来进行分类、回归等任务。这些模型基于统计学原理,能够在不完全数据的情况下,提供合理的推断和预测。本文将深入探讨概率模型的基本概念,以及其中常见的几种模型,包括逻辑回归模型的概率分析和朴素贝叶斯分类。特别是在朴素贝叶斯分类部分,我们将进行详细的介绍,并附上公式和代码示例。 🍋2 概率模型在机器学习中,概率模型用于表示数据中不确定性的关系。这类模型利用概...

🍋1 引言

机器学习中,概率模型常被用来进行分类、回归等任务。这些模型基于统计学原理,能够在不完全数据的情况下,提供合理的推断和预测。本文将深入探讨概率模型的基本概念,以及其中常见的几种模型,包括逻辑回归模型的概率分析和朴素贝叶斯分类。特别是在朴素贝叶斯分类部分,我们将进行详细的介绍,并附上公式和代码示例。

🍋2 概率模型

在机器学习中,概率模型用于表示数据中不确定性的关系。这类模型利用概率论的基础概念,对数据进行建模,从而能够做出预测、分类和回归等任务。

概率模型的一个典型应用就是生成模型,生成模型通过建模数据的生成过程来推断数据的分布。例如,在图像分类任务中,生成模型会通过建立数据的生成分布来进行推断,而与之对比的判别模型则直接学习输入数据与类别标签之间的关系。

常见的概率模型包括:

  • 高斯混合模型(GMM)
  • 隐马尔可夫模型(HMM)
  • 朴素贝叶斯分类器(Naive Bayes)
  • 逻辑回归模型(Logistic Regression)

本节我们主要讨论朴素贝叶斯分类器的概念以及复现

🍋3 逻辑回归模型的概率分析

逻辑回归(Logistic Regression)是一种用于分类任务的广泛应用的概率模型。它通过一个Sigmoid函数将线性模型的输出转换为一个概率值,这个概率值代表某一类别的概率。

🍋3.1 逻辑回归模型

逻辑回归的目标是学习一个分类函数,将输入特征𝑋映射到一个二分类结果。假设我们有一个输入向量X=[x1,x2,x3,…xn],输出为0或1,表示类别标签。

模型的形式为:
image.png

对于二分类问题,我们可以使用最大似然估计(MLE)来拟合参数。
逻辑回归的对数似然函数为:
image.png

通过最小化对数似然的负值,我们可以学习到最优的参数image.png

🍋3.2 逻辑回归的概率分析

逻辑回归通过概率输出分类,每个输出值是一个概率,表示样本属于某一类别的可能性。当P(y=1∣X)大于0.5时,我们将样本归为类别1,否则归为类别0。这使得逻辑回归在处理二分类问题时,既能给出分类结果,也能给出该结果的概率。

🍋4 朴素贝叶斯分类

朴素贝叶斯分类(Naive Bayes)是一种基于贝叶斯定理的概率分类模型。它假设特征之间是条件独立的,这一假设简化了模型的计算复杂度,使其在实际应用中非常高效。

🍋4.1 朴素贝叶斯的理论基础

朴素贝叶斯分类器基于贝叶斯定理,贝叶斯定理的基本形式为:
image.png

其中:

  • P(y∣X) 是给定特征X时类别 ,y 的后验概率。
  • P(X∣y) 是给定类别 ,y 时特征 ,X 的条件概率。
  • P(y) 是类别 ,y 的先验概率。
  • P(X) 是特征 ,X 的边际概率。

为了简化计算,朴素贝叶斯做了条件独立假设,即认为所有特征在给定类别标签的条件下是独立的。因此,条件概率 P(X∣y) 可以被分解为每个特征的条件概率的乘积:
image.png

结合贝叶斯定理,朴素贝叶斯分类器的预测公式为:
image.png

🍋4.2 朴素贝叶斯的分类过程

朴素贝叶斯分类器通过最大化后验概率 P(y∣X) 来选择最可能的类别。由于 P(X) 对所有类别都是常数,因此可以忽略它,简化为:
image.png

也就是,对于每个类别,计算 P(y) 和每个特征 xi给定类别 y 的条件概率 P(x i​∣y) 的乘积,选择概率最大的类别作为预测结果。

🍋4.3 朴素贝叶斯的应用

朴素贝叶斯分类器通常用于文本分类、垃圾邮件过滤等领域,尤其适用于特征数量较多的任务,因为其假设特征之间条件独立,简化了模型的计算复杂度。

🍋4.4 朴素贝叶斯的实现代码

下面是一个简单的使用Python代码实现的小案例,使用scikit-learn库的朴素贝叶斯分类器,仅仅作为测试

from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
data = load_iris()
X = data.data
y = data.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建朴素贝叶斯分类器模型
model = GaussianNB()

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.4f}")

下图是Accuracy评估指标
image.png

🍋4.5 案例(泰坦尼克号数据集)

数据集概述

泰坦尼克号数据集包含了乘客的多个信息,目标是预测乘客是否幸存。以下是该数据集的主要列:

  • survived:乘客是否幸存(1 = 是,0 = 否)
  • pclass:舱位(1 = 一等舱,2 = 二等舱,3 = 三等舱)
  • sex:性别(male = 男,female = 女)
  • age:年龄(数值型)
  • sibsp:同胞/配偶数量
  • parch:父母/孩子数量
  • fare:票价
  • embarked:登船港口(C = Cherbourg, Q = Queenstown, S = Southampton)
# 导入所需的库
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import LabelEncoder

# 加载泰坦尼克号数据集
titanic = sns.load_dataset('titanic')

# 查看数据集的前几行
print(titanic.head())

# 预处理数据
# 选择特征列和目标列
features = ['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked']
X = titanic[features]
y = titanic['survived']

# 处理缺失值(例如,年龄和登船港口有缺失值)
X['age'] = X['age'].fillna(X['age'].mean())
X['embarked'] = X['embarked'].fillna(X['embarked'].mode()[0])

# 将类别变量('sex'和'embarked')转化为数值
le = LabelEncoder()
X['sex'] = le.fit_transform(X['sex'])
X['embarked'] = le.fit_transform(X['embarked'])

# 划分数据集为训练集和测试集(80%训练,20%测试)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化朴素贝叶斯分类器
nb_classifier = GaussianNB()

# 训练模型
nb_classifier.fit(X_train, y_train)

# 使用测试集进行预测
y_pred = nb_classifier.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)

print(f'模型的准确率:{accuracy * 100:.2f}%')
  • 数据加载:使用seaborn.load_dataset(‘titanic’)加载泰坦尼克号数据集。
  • 特征选择和预处理:
    • 选择了pclass(舱位)、sex(性别)、age(年龄)、sibsp(同胞/配偶数量)、parch(父母/孩子数量)、fare(票价)、embarked(登船港口)作为特征。
    • 对于缺失值,使用均值填充age列,使用众数填充embarked列。
    • 将类别特征sex和embarked通过LabelEncoder转换为数值。
  • 模型训练与预测:和之前的例子一样,使用GaussianNB()训练朴素贝叶斯模型,并在测试集上进行预测。
  • 准确率评估:计算预测结果的准确率

🍋4.6 朴素贝叶斯的优缺点

优点:

  • 简单易懂,计算效率高。
  • 对小样本和高维数据非常有效,特别适用于文本分类任务。
  • 对缺失数据不敏感。

缺点:

  • 条件独立性假设在许多实际问题中并不成立,可能导致性能下降。
  • 对于类别不平衡的情况,可能需要额外的技术来处理。

🍋5 经典论文

A Comparison of Event Models for Naive Bayes Text Classification

论文标题: A Comparison of Event Models for Naive Bayes Text Classification

作者: Andrew McCallum 和 Kamal Nigam

发表时间: 1998年

  1. 论文背景和问题
    朴素贝叶斯分类器(Naive Bayes Classifier)作为一种简单的概率模型,在文本分类领域有广泛的应用。尽管它的假设——特征之间条件独立——在很多情况下并不成立,但朴素贝叶斯在实际任务中仍然表现出了良好的效果。

这篇论文的核心目标是探索和比较不同的事件模型在朴素贝叶斯文本分类中的表现。作者探讨了不同的特征建模方式,尤其是如何将文本数据(通常是词袋模型)转换为适合朴素贝叶斯分类的“事件”形式。

  1. 主要贡献
    论文主要集中在以下几个方面:
  • ==事件模型的定义==
    作者提出了“事件模型”这个概念,用于描述如何将文本数据转化为适合分类的特征空间。具体而言,事件是一个词或词汇项与某个类别的关联。根据不同的假设,事件模型可以有不同的定义方式。

  • ==比较不同事件模型==
    论文对比了几种常见的事件模型,并分别评估了它们在朴素贝叶斯分类器中的表现:

    • 基于单词的事件模型:即假设每个词(词汇项)在每个类别下是独立的。
    • 基于上下文的事件模型:考虑单词及其周围词的上下文,增加了对词与词之间关系的考虑。
    • 其他变种:考虑如何处理长尾词、稀有词、词汇外数据等。

作者展示了这些模型在不同类型文本分类任务中的表现,并探讨了模型的优缺点。

  • ==朴素贝叶斯在文本分类中的优势==
    尽管朴素贝叶斯的条件独立性假设在实际数据中经常不成立,论文指出,朴素贝叶斯分类器在很多实际任务中仍然表现优越。其原因在于:

    • 简单有效:计算上非常高效,适合大规模数据。
    • 鲁棒性:即使特征间存在相关性,朴素贝叶斯通常仍能表现良好。
    • 适应性强:对于文本分类这种高维稀疏数据,朴素贝叶斯能够很好地处理。
  • ==实验与结果==

作者进行了大量实验,验证了不同事件模型在多个文本分类任务中的性能(包括垃圾邮件分类等)。实验结果表明,基于朴素贝叶斯的分类模型对于很多文本分类任务都能达到良好的效果,尤其是在数据稀疏的情况下,朴素贝叶斯常常超越其他复杂的模型。

  1. 结论与影响

论文得出了几个结论:朴素贝叶斯分类器是一个简单而有效的模型,尤其适合处理文本分类任务。基于单词的事件模型虽然简化了问题,但能够很好地适应实际数据,特别是在处理大规模数据时。尽管假设特征独立性不完全成立,朴素贝叶斯分类器通过对特征条件独立性的简化假设,能够高效且准确地进行文本分类。这篇论文为后来的文本分类研究奠定了理论基础,许多现代的文本分类算法(尤其是基于概率的分类器)仍然受到它的影响。

  1. 实际应用

朴素贝叶斯分类器在实际中广泛应用,特别是在:

  • 垃圾邮件分类:该算法能够根据电子邮件中的特征(如关键词)判断其是否为垃圾邮件。
  • 情感分析:根据文本中的单词或短语预测其情感倾向(正面、负面或中性)。
  • 新闻分类:将新闻文章按类别(如体育、娱乐、科技等)进行分类。
  1. 论文的核心思路总结

论文通过对比不同事件模型,验证了朴素贝叶斯在处理高维稀疏文本数据时的有效性。
即使在假设条件独立性不成立的情况下,朴素贝叶斯依然能够提供非常可靠的分类性能。
实验表明,朴素贝叶斯尤其适用于大规模、稀疏的文本数据集,在许多实际应用中都表现优异。

🍋6 结语

概率模型在机器学习中具有广泛的应用,尤其是在处理分类问题时,像逻辑回归和朴素贝叶斯这样的模型都展现了强大的性能和简洁的计算方法。通过对概率模型的深入理解,能够帮助我们更好地理解机器学习算法的内部机制,进而在实际应用中做出更好的选择。

image.png

挑战与创造都是很痛苦的,但是很充实。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。