首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 为何选择机器学习
1.1.1 机器学习能够解决的问题
1.1.2 熟悉任务和数据
1.2 为何选择Python
1.3 scikit-learn
1.4 必要的库和工具
1.4.1 Jupyter Notebook
1.4.2 NumPy
1.4.3 SciPy
1.4.4 matplotlib
1.4.5 pandas
1.4.6 mglearn
1.5 Python 2 与Python 3 的对比
1.7 第 一个应用:鸢尾花分类
1.7.1 初识数据
1.7.2 衡量模型是否成功:训练数据与测试数据
1.7.3 要事第 一:观察数据
1.7.4 构建第 一个模型:k 近邻算法
1.7.5 做出预测
1.7.6 评估模型
2.1 分类与回归
2.2 泛化、过拟合与欠拟合
2.3 监督学习算法
2.3.1 一些样本数据集
2.3.2 k 近邻
2.3.3 线性模型
2.3.4 朴素贝叶斯分类器
2.3.5 决策树
2.3.6 决策树集成
2.3.7 核支持向量机
2.3.8 神经网络(深度学习)
2.4 分类器的不确定度估计
2.4.1 决策函数
2.4.2 预测概率
2.4.3 多分类问题的不确定度
3.1 无监督学习的类型
3.2 无监督学习的挑战
3.3 预处理与缩放
3.3.1 不同类型的预处理
3.3.2 应用数据变换
3.3.3 对训练数据和测试数据进行相同的缩放
3.3.4 预处理对监督学习的作用
3.4 降维、特征提取与流形学习
3.4.1 主成分分析
3.4.2 非负矩阵分解
3.4.3 用t-SNE 进行流形学习
3.5 聚类
3.5.1 k 均值聚类
3.5.2 凝聚聚类
3.5.3 DBSCAN
3.5.4 聚类算法的对比与评估
3.5.5 聚类方法小结
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(上)
小册名称:Python机器学习基础教程(上)
### 2.3.4 朴素贝叶斯分类器 在Python机器学习的基础旅程中,朴素贝叶斯分类器(Naive Bayes Classifier)无疑是一个既基础又强大的工具。它不仅原理简单易懂,而且在许多实际应用场景中展现出惊人的分类效果,尤其是在文本分类、垃圾邮件过滤等领域。本章将深入探讨朴素贝叶斯分类器的基本原理、算法实现、以及如何在Python中使用它来解决实际问题。 #### 2.3.4.1 朴素贝叶斯分类器的基本原理 朴素贝叶斯分类器基于贝叶斯定理,并假设特征之间相互独立(尽管这一假设在现实中往往不成立,但它在很多情况下仍然能够工作得很好,因此得名“朴素”)。贝叶斯定理描述了条件概率之间的关系,即如何根据已知的条件概率来推导出未知的条件概率。 **贝叶斯定理公式**: $$ P(A|B) = \frac{P(B|A)P(A)}{P(B)} $$ 在分类问题中,我们可以将$A$视为类别,$B$视为数据点(或特征集合)。我们的目标是计算在给定数据点$B$的条件下,属于某个类别$A$的概率$P(A|B)$,这通常被称为后验概率。 朴素贝叶斯分类器通过以下步骤进行工作: 1. **收集数据**:收集用于训练模型的数据集。 2. **计算先验概率**:对于每个类别,计算其出现的概率$P(A)$。 3. **计算条件概率**:对于每个类别和每个特征,计算特征在该类别下出现的条件概率$P(B_i|A)$,其中$B_i$是数据点的一个特征。 4. **应用朴素假设**:假设所有特征之间相互独立,即$P(B_1, B_2, ..., B_n|A) = \prod_{i=1}^{n} P(B_i|A)$。 5. **计算后验概率**:利用贝叶斯定理和上述条件概率,计算每个类别的后验概率$P(A|B)$。 6. **分类**:将数据点分配给后验概率最高的类别。 #### 2.3.4.2 朴素贝叶斯分类器的类型 根据特征的不同类型,朴素贝叶斯分类器有多种变体,常见的有: - **多项式朴素贝叶斯(MultinomialNB)**:适用于离散特征,尤其是文本数据。它计算每个类别下,每个特征(词项)出现的次数。 - **伯努利朴素贝叶斯(BernoulliNB)**:同样适用于二值化特征,但假设所有特征都是二元的,常用于文本数据,其中词项出现与否被视为特征。 - **高斯朴素贝叶斯(GaussianNB)**:适用于连续特征,它假设每个特征都服从高斯(正态)分布,并计算每个类别下每个特征的均值和方差。 #### 2.3.4.3 Python中实现朴素贝叶斯分类器 在Python中,我们可以使用`scikit-learn`库来方便地实现和应用朴素贝叶斯分类器。`scikit-learn`提供了上述所有类型的朴素贝叶斯分类器。 ##### 示例:使用多项式朴素贝叶斯进行文本分类 假设我们有一个简单的文本数据集,需要将文本分为两类(例如,正面评论和负面评论)。 ```python from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import accuracy_score # 加载数据集 newsgroups = fetch_20newsgroups(subset='all', categories=['alt.atheism', 'soc.religion.christian']) X, y = newsgroups.data, newsgroups.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33) # 特征提取:将文本转换为词频矩阵 vectorizer = CountVectorizer() X_train_vec = vectorizer.fit_transform(X_train) X_test_vec = vectorizer.transform(X_test) # 创建并训练多项式朴素贝叶斯分类器 clf = MultinomialNB() clf.fit(X_train_vec, y_train) # 预测测试集 y_pred = clf.predict(X_test_vec) # 评估模型 print("Accuracy:", accuracy_score(y_test, y_pred)) ``` 在上述示例中,我们首先加载了一个包含两个类别的新闻组数据集,然后将其划分为训练集和测试集。接着,我们使用`CountVectorizer`将文本数据转换为词频矩阵,这是多项式朴素贝叶斯分类器所需要的输入格式。之后,我们创建了一个`MultinomialNB`实例,并使用训练数据对其进行训练。最后,我们使用训练好的模型对测试集进行预测,并计算了分类的准确率。 #### 2.3.4.4 注意事项与优化 尽管朴素贝叶斯分类器在许多情况下表现良好,但在实际应用中仍需注意以下几点: - **特征独立性假设**:虽然朴素贝叶斯分类器假设特征之间相互独立,但这一假设往往不成立。在实际应用中,如果特征之间存在较强的相关性,可能会影响分类效果。 - **数据预处理**:对于文本数据,适当的预处理(如停用词移除、词干提取、词形还原等)可以显著提高分类性能。 - **特征选择**:选择合适的特征对分类器的性能至关重要。在特征数量较多时,可以考虑使用特征选择技术来减少特征空间的大小。 - **超参数调优**:对于某些类型的朴素贝叶斯分类器(如多项式朴素贝叶斯),可以调整超参数(如平滑参数`alpha`)来优化模型性能。 综上所述,朴素贝叶斯分类器作为一种简单而有效的分类方法,在Python机器学习的基础教程中占有重要地位。通过了解其基本原理、实现方式以及在实际应用中的注意事项,读者可以更加深入地掌握这一工具,并将其应用于更广泛的场景中。
上一篇:
2.3.3 线性模型
下一篇:
2.3.5 决策树
该分类下的相关小册推荐:
Python3网络爬虫开发实战(上)
剑指Python(万变不离其宗)
Python合辑8-变量和运算符
Python3网络爬虫开发实战(下)
Python合辑11-闭包函数
Python合辑10-函数
Python与办公-玩转Excel
Python自动化办公实战
Python数据分析与挖掘实战(上)
Python合辑12-面向对象
Python甚础Django与爬虫
Python合辑1-Python语言基础