Naive Bayes笔记

本文详细介绍了朴素贝叶斯分类器的基本原理及其应用过程。通过一个具体的医疗诊断案例,解释了如何利用贝叶斯定理计算不同疾病的可能性,并给出了特征独立假设下的分类器公式。此外,还提供了算法实现的伪代码。

1.贝叶斯定理

表示事件B发生的情况下,事件A发生的概率。其基本求解公式:


对于很容易直接推导出,但对于更加关心的,则很难直接推导。但是借助贝叶斯公式就很容易求解:


2.算法描述

下面用一个例子来描述Naive Bayes算法的过程。假设这里有一张最近统计的病例表,如下:

症状

职业

疾病

打喷嚏

护士

感冒

打喷嚏

农夫

过敏

头痛

建筑工人

脑震荡

头痛

建筑工人

感冒

打喷嚏

教师

感冒

头痛

教师

脑震荡

现在又来了一个病人,是一个打喷嚏的建筑工人,那么他患最可能患什么病?
根据贝叶斯定理可得:

假设“打喷嚏”和“建筑工人”两个特征相互独立,则上式可变为:


同理,可以算出其“过敏”和“脑震荡”的概率,从而得出其最可能患哪种病。

3.贝叶斯分类器公式

假设样本有n个特征(Feature),分别为 ,现有m个类别(Category),分别为 。则每个分类的概率是:

另外,假设n个特征相互独立,则:

最后,得到的最大概率的那个分类,即为所求。
当然,如果我们遇到的特征是连续值,不是离散值时,需要构建概率分布模型,比如说标准正态分布,然后用概率分布模型来求解概率。在Wikipedia上Naive Bayes Classifier中有一个这样的例子可以参考

4.伪代码

Native Bayes:
计算每个类别中记录的数目
每个样本训练记录

对每个类别

对每条记录

计算该记录的条件概率

返回每个类别的条件概率



参考文献:

http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html
http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html


<think>首先,用户要求使用中文回答问题。问题似乎是一个关于Python库的列表,包括numpy、matplotlib.pyplot、pandas、sqlite3、IPython.display.display、scipy.stats.entropy、sklearn.naive_bayes.MultinomialNB、sklearn.model_selection.cross_val_score、sklearn.linear_model.LogisticRegression、sklearn.svm.SVC、sklearn.preprocessing.normalize。用户没有明确的问题,所以我需要推断这是什么意思。 用户消息是:"numpy matplotlib.pyplot pandas sqlite3 IPython.display.display scipy.stats.entropy sklearn.naive_bayes.MultinomialNB sklearn.model_selection.cross_val_score sklearn.linear_model.LogisticRegression sklearn.svm.SVC sklearn.preprocessing.normalize"。这看起来像是一个Python导入语句的列表,但没有上下文。用户可能是在问这些库的用途,或者如何一起使用它们。 用户说:"请使用中文回答问题",所以我需要用中文回复。然后,在回答后,我必须提出3-5个相关问题,以"§§相关问题§§"开头,并且不能换行分散。 回顾用户消息:"numpy matplotlib.pyplot pandas sqlite3 IPython.display.display scipy.stats.entropy sklearn.naive_bayes.MultinomialNB sklearn.model_selection.cross_val_score sklearn.linear_model.LogisticRegression sklearn.svm.SVC sklearn.preprocessing.normalize"。这似乎是用户的问题本身,而不是一个具体的问题。可能用户是在列出一些Python库,并希望我解释或讨论它们。 用户消息的开头是:"请使用中文回答问题\n请在回答完问题后,必须根据用户的问题及你的回答提出3-5个 §§相关问题§§。\n§§相关问题§§ 必须输出在回答的末尾且不可缺少!\n 第一行必须完整且输出 \"§§相关问题§§\"!\n禁止换行分散。\n### 示例格式\n快速排序的基本思想是选择一个基准元素\n```python\ndef quick_sort(arr):\n if len(arr) <= 1:\n return arr\n else:\n # 选择基准值\n pivot = arr[len(arr) // 2]\n # 分别存放比基准小和大的元素\n left = [x for x in arr if x < pivot]\n middle = [x for x in arr if x == pivot]\n right = [x for x in arr if x > pivot]\n # 递归地对左右两边进行快排,并合并结果\n return quick_sort(left) + middle + quick_sort(right)```\n§§相关问题§§\n1. ···\n2. ···\n3. ···\n### 注意\n确保所有内容符合规则,否则回答将被视为无效。\n\numpy matplotlib.pyplot pandas sqlite3 IPython.display.display scipy.stats.entropy sklearn.naive_bayes.MultinomialNB sklearn.model_selection.cross_val_score sklearn.linear_model.LogisticRegression sklearn.svm.SVC sklearn.preprocessing.normalize" 用户消息的最后部分是:"numpy matplotlib.pyplot pandas sqlite3 IPython.display.display scipy.stats.entropy sklearn.naive_bayes.MultinomialNB sklearn.model_selection.cross_val_score sklearn.linear_model.LogisticRegression sklearn.svm.SVC sklearn.preprocessing.normalize",这似乎是用户的实际问题或主题。用户可能是在提供一个列表,并希望我解释这些库或如何在一个项目中一起使用它们。 由于用户没有指定一个具体的问题,我将假设用户想知道这些库的基本介绍或它们在机器学习或数据分析中的常见用途。因为这些库都与Python相关,尤其是数据科学和机器学习。 我的回答结构: 1. 用中文回答问题。 2. 回答后,提出3-5个相关问题。 3. 以"§§相关问题§§"开头相关问题部分。 4. 相关问题不能换行分散,所以可能用数字列表。 主题:这些Python库的简要介绍。 回答内容: - 解释每个库的作用。 - 因为列表很长,我可以分组或简要概述。 - 保持简洁,因为用户可能期待一个概述。 库列表: - numpy: 数值计算库。 - matplotlib.pyplot: 绘图库。 - pandas: 数据处理和分析库。 - sqlite3: SQLite数据库接口。 - IPython.display.display: IPython的显示功能。 - scipy.stats.entropy: 计算熵的函数。 - sklearn.naive_bayes.MultinomialNB: scikit-learn中的多项式朴素贝叶斯分类器。 - sklearn.model_selection.cross_val_score: 交叉验证得分计算。 - sklearn.linear_model.LogisticRegression: 逻辑回归分类器。 - sklearn.svm.SVC: 支持向量机分类器。 - sklearn.preprocessing.normalize: 数据归一化函数。 这些库常用于数据科学项目,涉及数据加载、处理、建模、评估和可视化。 我将用中文写一个概述。 然后,提出相关问题。相关问题应该基于我的回答和用户的问题。例如: 1. 如何安装这些库? 2. 如何在一个项目中一起使用它们? 3. 这些库在机器学习工作流中的角色是什么? 等等。 确保相关问题数量为3-5个。 回答格式: - 先回答问题。 - 然后,一行"§§相关问题§§" - 接着,1. 2. 3. ... 列出问题。 禁止换行分散,所以相关问题部分应该连续。 最终输出: [回答内容] §§相关问题§§ 1. ... 2. ... 3. ...</think>以下是您提供的Python库列表的简要中文介绍。这些库在数据科学、机器学习和数据分析中非常常用,它们各自承担不同的角色: - **numpy**: 用于高效的数值计算,提供多维数组对象和数学函数。 - **matplotlib.pyplot**: 用于数据可视化,支持创建各种图表(如折线图、散点图)。 - **pandas**: 用于数据处理和分析,提供DataFrame结构来处理表格数据。 - **sqlite3**: 用于与SQLite数据库交互,执行SQL查询和管理本地数据库。 - **IPython.display.display**: 在Jupyter笔记本中显示输出(如图像、HTML)。 - **scipy.stats.entropy**: 计算概率分布的熵(信息熵),常用于信息论和统计。 - **sklearn.naive_bayes.MultinomialNB**: scikit-learn中的多项式朴素贝叶斯分类器,适用于文本分类等任务。 - **sklearn.model_selection.cross_val_score**: 用于交叉验证评估模型性能,计算得分指标。 - **sklearn.linear_model.LogisticRegression**: 逻辑回归分类器,用于二分类或多分类问题。 - **sklearn.svm.SVC**: 支持向量机分类器,适用于分类任务,支持核技巧。 - **sklearn.preprocessing.normalize**: 用于数据归一化,将特征缩放至单位范数,提高模型稳定性。 这些库通常结合使用,例如在机器学习工作流中:pandas加载数据,numpy处理数值,scikit-learn构建模型,matplotlib可视化结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值