机器学习第三篇:详解朴素贝叶斯算法

机器学习第三篇:详解朴素贝叶斯算法

一、统计知识

01|随机事件:

1、概念

随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件)。随机事件通常用大写英文字母A、B、C等表示。随机试验中的每一个可能出现的试验结果称为这个试验的一个样本点,记作ωi。全体样本点组成的集合称为这个试验的样本空间,记作Ω.即Ω={ω1,ω2,…,ωn,…}

随机事件中的事件形式可能由各种形式,比如{"正面","反面"},{"优","良","差"}。

2、条件概率

P(A|B)=P(AB)/P(B)表示在事件B发生的情况下事件A发生的概率。

3、一些性质

概率的有限可加性:若事件A1、A2、......、Ai.....、Aj这些事件两两互斥,则P(∑Ai)=∑P(Ai),表示所有事件发生的概率等于各个事件发生的概率之和。

概率的乘法公式:P(AB)=P(A)P(B|A)=P(B)P(A|B)。若事件A与B相互独立,则P(AB)=P(A)P(B),推广到有限多个事件时可表示为:P(A1A2A3.....An)=P(A1)P(A2|A1)P(A3|A1A2)......P(An|A1A2......An-1)。

4、全概率公式

对于比较复杂的概率事件的计算,经常会把它分解成若干个简单事件的和,通过分别计算这些简单事件的概率,然后利用概率的可加性计算出所求事件的概率。假设事件A1、A2、......、An是Ω的一个划分,即两两互斥,且

∑Ai=Ω,则B=B∑Ai,再由概率的有限可加性得,P(B)=P(B∑Ai)=P(∑BAi)。

再由概率得乘法公式得P(B)=P(∑BAi)=∑P(Ai)P(B|Ai),这就是全概率公式。

5、贝叶斯公式

假设事件A1、A2、......、An是Ω的一个划分,B=B∑Ai=∑BAi,则B发生条件下Ai发生得概率为:P(Ai|B)=P(AiB)/P(B)。由乘法公式和全概率公式得P(Ai|B)=P(Ai)P(B|Ai)/∑P(Ai)P(B|Ai)。该公式就是贝叶斯公式。

02|一维随机变量:

1、概念

一般意义上概率是针对于某一随机事件而言得,为更深入得研究随机试验得结果,我们引入随机变量得概念,随机变量得基本思想是把随机试验的结果数量化,从而可用一个变量去描述随机事件。对于随机事件中出现的某一事件我们用变量的形式去表示。比如{"正面","反面"}可以表示为{1,0},{"优","良","差"}可以表示为{1,2,3}。

2、随机变量分布

假设X是一随机变量,他可能取值为X1,X2,....,Xk,并且取各个值对应的概率分别为P1,P2,......Pk,即P(X=Xk)=Pk,K=1,2,....,该式称为随机变量X的概率分布。

03|多维随机变量:

1、概念

通过随机变量来描述某一随机事件时,有时候仅用一个维度上的变量去表示是不够的,比如描述平面的某一个点的位置就需要用X,Y两条轴(即两个维度)去表示才可以,如果是描述空间中某个点可能需要X,Y,Z三个维度去表示才可以,我们把一个随机变量需要从n个维度去表示的变量称为n维随机变量。

一般地,当n=2时,称(X,Y)为二维随机变量,二维随机变量的联合分布为:

F(x,y)=P(X≤x,Y≤y),其中P(X≤x,Y≤y)表示随机事件{X≤x},{Y≤y}同时发生的概率。

若事件X与Y相互独立,则P(X≤x,Y≤y)=P(X≤x)P(Y≤y)。

条件分布:P(X≤x|Y≤y)=P(X≤x,Y≤y)/P(Y≤y)。

二、算法知识

01|原理:

朴素贝叶斯算法就是根据贝叶斯公式来对未知事物进行分类,通过已知条件(X=x)计算未知事物分别属于各个类别(Y=ck)时对应的概率,然后把未知事物判别为概率最大的那一类。

贝叶斯公式:P(Y=ck|X=x)=P(Y=ck)P(X=x|Y=ck)/∑P(Y=ck)P(X=x|Y=ck)。

02|学习过程:

我们要想计算出未知事物属于哪一个类别的概率较大,即P(Y=ck|X=x)在x等于多少时概率最大,需要先算出P(Y=ck)和P(X=x|Y=ck)。这两个值可以通过训练集求得。在具体的求取过程中需要用到一种估计方法就是极大似然估计

极大似然估计是一种概率论在统计中的应用,说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值,一般把这个结果作为估计值。

在这里我们用极大似然估计的方法来给P(Y=ck)以及P(X=x|Y=ck)估值,把训练集中的所有值当成是若干次试验以后得到的结果,利用极大似然估计的思想,则P(Y=ck)=该类别的频数/集合总数。P(Y=ck)=∑I(Y=ck)/N,k=1,2,...,K,

N为集合总数。

P(X=x|Y=ck)=ck类下满足条件x的值的频数/属于ck类值的总数。

P(X=x|Y=ck)=∑I(X=x,Y=ck)/∑I(Y=ck),k=1,2,....,K

上面的I为指示函数,是定义在某一集合X上的函数,表示其中有哪些元素属于某一子集A,常用于次数的统计,即满足某一条件的个数。

预估出P(Y=ck)和P(X=x|Y=ck)的值以后,我们就可以利用贝叶斯公式对在X=x的条件下P(Y=ck|X=x)对应的分类是哪一类。


上面的学习过程都只是针对于一维变量进行求取的,在实际的算法应用中,往往是多维的,即多个特征,于是乎:P(X=x|Y=ck)=P(X=x1,X=x2,...,X=xi|Y=ck),xi表示变量x的第i个特征

P(X=x|Y=ck)=P(X=x1,X=2,...,X=xi|Y=ck)=P(X=x1,X=2,...,X=xi)/P(Y=ck)

因为朴素贝叶斯对条件概率做了独立性假设,所以P(X=x1,X=x2,...,X=xi)/P(Y=ck)=P(X=x1)P(X=x2)...P(X=xi)/P(Y=ck)=

∏P(X=xi|Y=ck)

将上式代入贝叶斯公式中可得出:

P(Y=ck|X=x)=P(Y=ck)∏P(X=xi|Y=ck)/∑P(Y=ck)∏P(X=xi|Y=ck),因为分母∑P(Y=ck)∏P(X=xi|Y=ck)对每个分类ck来说,其值都是相等的,而我们最后是要比较每个ck对应的P(Y=ck|X=x)的大小,所以可以把分母去掉,最后学习到的模型为:y=f(x)=P(Y=ck)∏P(X=xi|Y=ck)。(其中∏P(X=xi|Y=ck)需要让i取不同的值(即不同的特征)然后用极大似然估计去估计。)

03|测试过程:

将测试数据集代入到学到的模型y=f(x)=P(Y=ck)∏P(X=xi|Y=ck)然后看不同分类所对应的概率,选择概率最大的分类为待测数据的分类。然后判断其预测的准确性。

04|贝叶斯估计:

在前面我们估计P(Y=ck)和P(X=x|Y=ck)的值的时候用的是极大似然估计,使用这种方法很有可能出现估计值为0的情况,因为有些特征可能不存在,所以其概率为0,但是P(X=x|Y=ck)=∏P(X=xi|Y=ck),只要有一个特征为0,整个P(X=x|Y=ck)就会为0,这将影响到后续的概率计算,所以这种估计方法有的时候是行不通的,我们需要换另外的估计方法,就是贝叶斯估计。

www.zeeklog.com  - 机器学习第三篇:详解朴素贝叶斯算法

K为类的个数。

www.zeeklog.com  - 机器学习第三篇:详解朴素贝叶斯算法

Lj是第j维特征的最大取值。

贝叶斯估计是在极大似然估计的基础上给分子分母分别加一个常数,当λ=1时称为拉普拉斯平滑。

05|利用python对留言性质进行判断:

本实例以及代码均来自于书籍《机器学习实战》第4章。

1、背景

某社区为了屏蔽掉一些侮辱性留言,需要构建一个快速过滤器,只要某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当。

2、准备数据

www.zeeklog.com  - 机器学习第三篇:详解朴素贝叶斯算法

3、数据处理

www.zeeklog.com  - 机器学习第三篇:详解朴素贝叶斯算法
www.zeeklog.com  - 机器学习第三篇:详解朴素贝叶斯算法

4、计算先验概率

www.zeeklog.com  - 机器学习第三篇:详解朴素贝叶斯算法
www.zeeklog.com  - 机器学习第三篇:详解朴素贝叶斯算法
www.zeeklog.com  - 机器学习第三篇:详解朴素贝叶斯算法

5、调试算法

在前面我们讲过采用极大似然估计中可能会出现概率为0的情况,在上面的结果代码中我们也可以看出,确实有一些结果为0的概率,为了避免这种情况,我们将采用拉普拉斯平滑。

www.zeeklog.com  - 机器学习第三篇:详解朴素贝叶斯算法

6、应用算法

最后就可利用模型y=f(x)=P(Y=ck)∏P(X=xi|Y=ck)对具体某一条留言的是否包含侮辱性评论进行判断了。

Read more

决策树算法介绍:原理与案例实现

决策树算法介绍:原理与案例实现

决策树算法介绍:原理与案例实现 决策树算法介绍:原理与案例实现 一、决策树算法概述 决策树是一种基本的分类与回归方法,它基于树形结构进行决策。决策树的每一个节点都表示一个对象属性的测试,每个分支代表该属性测试的一个输出,每个叶节点则代表一个类别或值。决策树学习通常包括三个步骤:特征选择、决策树的生成和决策树的剪枝。 二、决策树算法原理 1. 特征选择 特征选择是决策树学习的核心。它决定了在树的每个节点上选择哪个属性进行测试。常用的特征选择准则有信息增益、增益比和基尼不纯度。 * 信息增益:表示划分数据集前后信息的不确定性减少的程度。选择信息增益最大的属性作为当前节点的测试属性。 * 增益比:在信息增益的基础上考虑了属性的取值数量,避免了对取值数量较多的属性的偏好。 * 基尼不纯度:在CART(分类与回归树)算法中,使用基尼不纯度作为特征选择的准则。基尼不纯度越小,表示纯度越高。 2. 决策树的生成 根据选择的特征选择准则,从根节点开始,递归地为每个节点选择最优的划分属性,并根据该属性的不同取值建立子节点。直到满足停止条件(如所有样本属于同一类,

By Ne0inhk
他给女朋友做了个树莓派复古相机,算法代码可自己编写,成本不到700元

他给女朋友做了个树莓派复古相机,算法代码可自己编写,成本不到700元

手机拍照不够爽,带个单反又太重? 试试做个树莓派复古相机,还能自己编写处理算法的那种—— 成本不到700元。 没错,颜值很高,拍出来的照片也能打: 你也可以快速上手做一个。 如何制作一个树莓派复古相机 目前,这部相机的代码、硬件清单、STL文件(用于3D打印)和电路图都已经开源。 首先是硬件部分。 这部复古相机的硬件清单如下: 树莓派Zero W(搭配microSD卡)、树莓派高清镜头模组、16mm 1000万像素长焦镜头、2.2英寸TFT显示屏、TP4056微型USB电池充电器、MT3608、2000mAh锂电池、电源开关、快门键、杜邦线、3D打印相机外壳、黑色皮革贴片(选用) 至于3D打印的相机外壳,作者已经开源了所需的STL文件,可以直接上手打印。 材料齐全后,就可以迅速上手制作了~ 内部的电路图,是这个样子的: 具体引脚如下: 搭建好后,整体电路长这样: 再加上3D外壳(喷了银色的漆)和镜头,一部简易的树莓派复古相机就做好了。 至于软件部分,

By Ne0inhk
🚀Zeek.ai一款基于 Electron 和 Vite 打造的跨平台(支持 Windows、macOS 和 Linux) AI 浏览器

🚀Zeek.ai一款基于 Electron 和 Vite 打造的跨平台(支持 Windows、macOS 和 Linux) AI 浏览器

是一款基于 Electron 和 Vite 打造的跨平台(支持 Windows、macOS 和 Linux) AI 浏览器。 集成了 SearXNG AI 搜索、开发工具集合、 市面上最流行的 AI 工具门户,以及代码编写和桌面快捷工具等功能, 通过模块化的 Monorepo 架构,提供轻量级、可扩展且高效的桌面体验, 助力 AI 驱动的日常工作流程。

By Ne0inhk
LibreChat 集成 Stripe 支付的奶妈级教程

LibreChat 集成 Stripe 支付的奶妈级教程

我们假设你已经熟悉基本的 React 和 Node.js 开发,并且正在使用 LibreChat 的默认技术栈(React 前端、Node.js 后端、Vite 构建工具,可能还有 Electron 桌面应用)。教程会特别考虑 Electron 环境下的适配问题(例如 macOS 中文路径或路由错误)。“奶妈级”带你从零开始实现支付功能(包括一次性支付和添加高级会员订阅) 教程目标 * 在 LibreChat 中添加支付页面,支持用户通过信用卡付款。 * 实现 Stripe 的一次性支付功能。 * (可选)扩展到订阅功能,管理高级会员状态。 * 解决 Electron 环境下的常见问题(如路由和路径解析)。 * 生成可公开推送的 Markdown 教程,方便社区参考。 前提条件 在开始之前,请确保你已准备好以下内容:

By Ne0inhk