当前位置:   article > 正文

sklearn之朴素贝叶斯_sklearn 朴素贝叶斯

sklearn 朴素贝叶斯

简介

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

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(yx1,,xn)=P(x1,,xn)P(y)P(x1,,xny)

P ( x ∣ y ) P(x|y) P(xy)表示在 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,,xnyk)=P(x1yk)P(xnyk),其中 P ( x n ∗ ∣ y k ) P(x_n^*|y_k) P(xnyk)表示在 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(ykx1,,xn)=P(x1)P(xn)P(yk)P(x1yk)P(xnyk)

CategoricalNB

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

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

其个参数含义为

  • 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)           # 载入数据
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

>>> clf.predict([[1,1,0]])
array([1])
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/869210
推荐阅读
  

闽ICP备14008679号