贝式分类器(Bayesian Classifier)是一种基於机率模型的机器学习模型。它有很多名称,又叫做贝叶斯分类器、简单贝叶斯、朴素贝叶斯...等。其根据贝氏定理(Bayes' theorem)为基础,透过机率统计来判断未知的资料类别。
贝氏定理描述在一些已知的一些条件下,某件事发生的机率。就像是我们能透过过去的天气状况来预测明天的天气那样。
贝式定理公式为:
P(A)为 A 事件的出现机率;P(B)为 B 事件的出现机率;
P(A|B)代表在 B 事件发生的前提下, A 事件出现的机率;
P(B|A)代表在 A 事件发生的前提下, B 事件出现的机率;
A 和 B 为皆为随机事件,且P(B)机率不为。
打个比方吧。
假设某一间大学内大一、大二、大三、大四的学生分别占了22%、28%、24%、26%;
而大一至大四女学生的占比分别为 40%、30%、20%、15%。
假设我今天在大学内遇到一位女学生,该位女学生为大一的机率是多少?
此时我们套用公式,将P(B)视为遇到女学生的机率、P(A)视为遇到大一学生的机率,因此:
遇到女学生的机率:
遇到大一学生的机率:
在大一的学生中遇到女生的机率:
所以答案就是≈0.34
以此类推,我们是不是就能利用这种单纯的方法应用至其他领域,推测出其他领域的资料了呢?比如说:
从上面提出的例子我们可以知道贝式定理用来分析机率的方法。而贝式分类器就是这麽一个机率模型分类器。因此所有的模型参数都可以通过训练集的相关频率来估计。而不同的资料集自然会有不一样的训练架构,以下是几个比较常用的贝式分类架构:
1. 高斯贝式分类器 GaussianNB:
主要用於特徵为连续变数并符合符合常态分布时。像是年纪大小与罹患癌症的机率、体重大小与罹患心血管疾病的机率...等。
首先对资料进行类别分类,假设训练集中有一个连续属性 ,然後计算每个类别中 的均值和变异数。令 表示为 在 c 类上的均值,令 为 在 c 类上的变异数。
机率计算公式如下:
看不懂也没关系,总之你只要知道高斯贝式会透过这种方法将连续的数值离散化。而为什麽我们要把数值离散化?
因为当训练样本数量较少或者是已知精确分布时,通过机率分布的方法或许能表现的不错,但是在大量样本的情形下,我们可以学习到更多资料的分布,因此离散化的方法表现会更加优秀。所以单纯贝氏方法大多都会用离散化方法,而不是机率分布估计的方法。
2. 多项式贝氏分类器 MultinomialNB:
多项式贝氏分类器主要用在特徵为离散变数的情况,比方说次数、类别等等。像是公司人数与员工工作效能的关系、商品不良数与员工偷懒的机率...等。而在个模型中,会多一个 α 参数,也就是平滑化的处理。在不设定的情况下,α 预设为1.0,机率计算公式如下:
N 是总样本数、k 是总类别数、 是类别为 的数量、 n 是特徵的维数、 是类别为 的样本中,第 i 维特徵值为 的样本数。
3. 伯努力贝氏分类器 BernoulliNB:
与多项式的模型一样,伯努力贝氏分类器也适用於离散特徵的状况,但不同的是伯努力模型的特徵取值只能是 1 和 0 的二元特徵。比方说某个单字曾在该文章内出现过,则该篇文章特徵值为 1 ,没有出现则是 0 。
其条件计算的方式为:
一样透过iris资料集进行简单的分类实作:
from sklearn.naive_bayes import GaussianNB # 高斯贝氏分类器 GaussianNB
from sklearn.naive_bayes import MultinomialNB # 多项式贝氏分类器 MultinomialNB
from sklearn.naive_bayes import BernoulliNB # 伯努力贝氏分类器 Bernoulli NB
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris=datasets.load_iris()
X=iris.data
Y=iris.target
# 拆分成训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
model=GaussianNB() # 这里使用高斯贝氏分类器
model.fit(X_train,y_train)
print(model.predict(X_test)) # 印出测试的预测结果
print(y_test) # 印出测试答案
print(model.score(X_test,y_test)) # 印出预测准度
https://blog.csdn.net/u012162613/article/details/48323777
https://pyecontech.com/2020/03/06/python_bayesian_classifier/
那假设有一群尚未分类的资料,我们要怎麽分类呢?
那就是非监督式学习的问题了。
明天就让我们聊聊非监督式学习中的K-Means吧!
<<: Day 23 -资料库应用小程序 资料库设计(系统需求分析)
>>: Day 33 - 实作 S3 驱动 Lambda 函数进行镜像
来记录一下自己学习的历程及遇到的问题,应该有人会觉得是废话啦~,那麽就开始今天的主题,在一开始建完p...
大家好,我是乌木白,今天要和大家介绍 Mixin 和 RWD 搭配该如何使用? 原本 RWD 写法...
写在前面 placeholder for test placeholder for test pla...
上次的画完系统流程图後,接续开始着手画系统架构图。因之前是资讯管理系毕业,专题中有画过系统架构图,所...
文件 原文文件:Page migration 翻译: Non-LRU 分页迁移 ==========...