sklearn之朴素贝叶斯

编程入门 行业动态 更新时间:2024-10-21 20:33:22

sklearn之<a href=https://www.elefans.com/category/jswz/34/1745003.html style=朴素贝叶斯"/>

sklearn之朴素贝叶斯

文章目录

    • 简介
    • CategoricalNB
    • 测试

简介

贝叶斯公式是条件概率中最经典的公式,表示为

P ( y ∣ x 1 , ⋯ , x n ) = P ( y ) P ( x 1 , ⋯ , x n ∣ y ) P ( x 1 , ⋯ , x n ) P(y|x_1,\cdots,x_n)=\frac{P(y)P(x_1,\cdots,x_n|y)}{P(x_1,\cdots,x_n)} P(y∣x1​,⋯,xn​)=P(x1​,⋯,xn​)P(y)P(x1​,⋯,xn​∣y)​

P ( x ∣ y ) P(x|y) P(x∣y)表示在 y y y已经发生的情况下 x x x发生的概率。

这个公式非常适合分类,假定某物有 x 1 , ⋯ , x n x_1,\cdots,x_n x1​,⋯,xn​个特征,每个特征都有不同的表现,记作 x n j x_n^j xnj​。现有的 M M M个样本,总共分为 Y Y Y类,记某一类为 y k y_k yk​。

那么现在又来了一个新成员,这个新成员的特征是 x 1 ∗ , ⋯ , x n ∗ x^*_1,\cdots,x^*_n x1∗​,⋯,xn∗​,如果每个特征之间是互不相关的,则

P ( x 1 ∗ , ⋯ , x n ∗ ) = P ( x 1 ∗ ) P ( x 2 ∗ ) ⋯ P ( x n ∗ ) P(x^*_1,\cdots,x^*_n)=P(x^*_1)P(x^*_2)\cdots P(x^*_n) P(x1∗​,⋯,xn∗​)=P(x1∗​)P(x2∗​)⋯P(xn∗​)

且 P ( x i ∗ ) P(x^*_i) P(xi∗​)就是样本中 x i ∗ x^*_i xi∗​出现的次数除以样本数。

相应地 P ( x 1 ∗ , ⋯ , x n ∗ ∣ y k ) = P ( x 1 ∗ ∣ y k ) ⋯ P ( x n ∗ ∣ y k ) P(x_1^*,\cdots,x_n^*|y_k)=P(x_1^*|y_k)\cdots P(x_n^*|y_k) P(x1∗​,⋯,xn∗​∣yk​)=P(x1∗​∣yk​)⋯P(xn∗​∣yk​),其中 P ( x n ∗ ∣ y k ) P(x_n^*|y_k) P(xn∗​∣yk​)表示在 y k y_k yk​类中, x n ∗ x_n^* xn∗​这个特征所占的比例。

这样一来,对于这个新样本来说,其属于第 y k y_k yk​类的概率就是

P ( y k ∣ x 1 ∗ , ⋯ , x n ∗ ) = P ( y k ) P ( x 1 ∗ ∣ y k ) ⋯ P ( x n ∗ ∣ y k ) P ( x 1 ∗ ) ⋯ P ( x n ∗ ) P(y_k|x^*_1,\cdots,x^*_n)=\frac{P(y_k)P(x^*_1|y_k)\cdots P(x^*_n|y_k)}{P(x^*_1)\cdots P(x^*_n)} P(yk​∣x1∗​,⋯,xn∗​)=P(x1∗​)⋯P(xn∗​)P(yk​)P(x1∗​∣yk​)⋯P(xn∗​∣yk​)​

CategoricalNB

sklearn中提供了naive_bayes模块,其中的CategoricalNB是基于现有数据集特征的朴素贝叶斯分类器,其构造函数为

CategoricalNB(alpha=1.0, fit_prior=True, class_prior=None, min_categories=None)

其个参数含义为

  • alpha 为平滑参数,设为0时表示不平滑
  • fit_priorTrue时,学习先验概率
  • class_prior fit_priorTrue时学习的先验概率
  • min_categories 每个特征的最小分类数

测试

接下来验证一下这个类,简单起见,考虑到现在考研比较内卷,那么假设用三个指标评价是否录取,即本科是否为985;考研分数A(前10%),B(10%-30%),C(30%-60%),D(后40%)四档;本科发文章A(Nature级别), B(SCI),C(其他期刊),D(无期刊),假设有下面的一份以往录取表

985分数文章录取
133
123
132
122
112
111
111
101
100
101
100
100
100
032
031
031
030
030
030
022
021
021
020
020
020
012
012
011
011
010
000
000
000

将其写为代码的形式为

X = [
[1,3,3],[1,2,3],[1,3,2],[1,2,2],
[1,1,2],[1,1,1],[1,1,1],[1,0,1],
[1,0,0],[1,0,1],[1,0,0],[1,0,0],
[1,0,0],[0,3,2],[0,3,1],[0,3,1],
[0,3,0],[0,3,0],[0,3,0],[0,2,2],
[0,2,1],[0,2,1],[0,2,0],[0,2,0],
[0,2,0],[0,1,2],[0,1,2],[0,1,1],
[0,1,1],[0,1,0],[0,0,0],[0,0,0],
[0,0,0]]y = [ 1,1,1,1,1,1,1,1,1,1,0,1,0,1,
1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0]import numpy as np
rng = np.random.RandomState(1)
from sklearn.naive_bayes import CategoricalNB
clf = CategoricalNB()   # 创建朴素贝叶斯类
clf.fit(X, y)           # 载入数据

接下来,如果你是985的学生,同时考研成绩大概排在50%,但本科并没有发过什么文章,那么我猜你考研一定能被录取

>>> clf.predict([[1,1,0]])
array([1])

更多推荐

sklearn之朴素贝叶斯

本文发布于:2024-03-23 16:55:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1740580.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:朴素   sklearn   贝叶斯

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!