怎么用贝叶斯分类器给图书分类

68次阅读
没有评论

共计 3824 个字符,预计需要花费 10 分钟才能阅读完成。

这篇文章主要讲解了“怎么用贝叶斯分类器给图书分类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“怎么用贝叶斯分类器给图书分类”吧!

从问题开始:

我们解决的问题是,对图书进行二元分类。分类的依据是图书的 tag。这样 tag 可能来自专家,或者编辑,或者用户。例如“外国文学”,“侦探”,“计算机”,“python”都属于 tag。简化问题,我们现在把图书分为“人文”或者“非人文”两类。

例如《计算机科学导论》,它的 tag 有“计算机”,“科学”,“经典”,“导论”,它属于“非人文”。《麦田里的守望者》,它的 tag 有“小说”,“文学”,“美国”,它属于“人文”。

基本原理:

贝叶斯分类器的工作原理:

P(a|b) = P(b|a)*P(a) / P(b)
这个意思就是:想要求 P(a|b),而你又知道 P(b|a),P(a),P(b)的值,那你就可以通过贝叶斯公式求得

已知一本书有些 tag:tag1,tag2,tag3…. 它属于“人文”分类的概率是多少?属于“非人文”分类的概率呢?

假设 p1 表示在这种情况下,它属于“人文”的概率,p2 表示这种情况下,它属于“非人文”的概率。

如果 p1 p2 那么就属于“人文”

条件概率:

其实,这是一个条件概率的问题。所谓条件概率,就是求:在已知 b 发生的情况下,a 发生的概率,我们写作 P(a|b)

结合我们的实际问题,那就是 tag1,tag2,tag3 已经发生的情况下,这本书属于“人文”和“非人文”的概率。我们写做

P(人文 |tag1,tag2,tag3…)的意思就是在 tag1,tag2,tag3… 发生的情况下,这本书属于“人文”

P(非人文 |tag1,tag2,tag3…)的意思就是在 tag1,tag2,tag3… 发生的情况下,这本书属于“非人文”

P(人文 |tag1,tag2,tag3…) = P(tag1,tag2,tag3…| 人文) * P(人文) / P(tag1,tag2,tag3…)

==

P(tag1,tag2,tag3…| 人文) : 就是你知道在一本书已经被分类了“人文”的情况,tag1,tag2,tag3… 一起出现的概率

P(人文): 就是在被标记为“人文”分类的书,(在训练集)在所有书 (“人文”和“非人文”) 中出现的概率

P(tag1,tag2,tag3…): 也就是 tag1,tag2,tag3… 在 (训练集) 所有 tag 出现的概率

这里有个值得注意的技巧,其实 P(tag1,tag2,tag3…),我们不需要计算,因为我们的目的是比较

P(人文 |tag1,tag2,tag3…)   和  P(非人文 |tag1,tag2,tag3…) 的大小,不是为了得到实际的值,由于上述公式中分母

P(tag1,tag2,tag3…)是一样的。所以我们只需要比较分子的大小就可以了。

P(tag1,tag2,tag3…| 人文) * P(人文)   和  P(tag1,tag2,tag3…| 非人文) * P(非人文)的大小

朴素贝叶斯:

那么我们如何计算 P(tag1,tag2,tag3…| 人文) 呢?这里要用到朴素贝叶斯的概念,就是说,我们认为,在一本书中的标签里,每个标签都是相互独立的,与对方是否出现没有关系,也就是说“计算机”和“经典”出现的概率是互不相关的,不会因为出现了“计算机”就导致“经典”的出现概率高。

P(tag1,tag2,tag3…| 人文)  = P(tag1| 人文) * P(tag2| 人文) * P(tag3| 人文) ….

也就是计算每个 tag,分别在“人文”和“非人文”书籍所有 tag 出现概率,然后将它们乘

举例分析:

我们现在有一本书《计算机科学导论》,它标签是“计算机”,“科学”,“理论”,“经典”,“导论”我们想知道这几个标签出现的情况下,《计算机科学导论》分别属于“人文”和“非人文”的概率

那么我们已经有了什么呢?幸运的是,我们目前有 10 本书,已知其中 6 本是“人文”,4 本“非人文”。这个 10 本书,经过排重,一共有 70 个不同的标签,“计算机”,“科学”,“理论”,“导论”也在其中。

基于此,我们可以得出,P(人文)=6/10=0.6  P(非人文)=1-0.6=0.4 也就是说“人文”书在所有的书的概念 0.6“非人文”是 0.4

接下来就是 P(tag1,tag2,tag3…| 人文) 和  P(tag1,tag2,tag3…| 非人文)了,也就是说,我们要算出,在“人文”类里的所有数中,“计算机”,“科学”,“理论”,“经典”,“导论”这几个 tag 在“人文”数所有的 tag 的概率

1. 准备训练集:

几乎所有的机器学习都需要训练集。贝叶斯分类也是一样的。上述,我们说的已知的数据,就是训练集。上面的例子列举的 10 本书,以及者 10 本书所排重后的 tag,就是我们的训练集;而 0.6 和 0.4 这两个概率就是 P(tag1,tag2,tag3…| 人文) 和  P(tag1,tag2,tag3…| 非人文) 先验概率

基于我们的问题,我们需要准备 100 本书,人文分为“人文”和“非人文”两类,并且收集将这些书的所有 tag。(可以爬去亚马逊或是豆瓣上的书籍资源)

2. 形成 tag 集:

上述所说的 tag,用 python 里的列表来保存,我们令其位 dicts.dicts 里的每一个元素是一个 tag

dicts = [“科学”,“理论”,“c++”]这样的形式

3. 计算训练集中的“人文”和“非人文”的概率

假设我们训练集中的这 100 本书,有 60 本是“人文”,那么 P(人文) = 60 / 100 = 60 P(非人文) = 1 – P(人文) = 0.4

4. 计算 tag 集中每个 tag 在训练集“人文”数据中 tag 出现的概率

首先,我们基于训练集构造一个列表,这个列表里的每一项又是一个列表,这个列表里的每一项,不是 1 就是 0。1 表示这个字典中这个位置的 tag 是这个书的一个 tag

dicts=[计算机 , 小说 , 心理 , 科学 , 编程 , 行为 , 导论 , 经典 , 游记 , 美国 ,…..]   tag 集

tag_vector_人文 = [

 [0,1,0,0,0,0,0,1,0,1],  第一本书《麦田的守望者》tag: 小说 经典 美国

 [0,0,1,0,0,1,0,0,0,1],  第二本书《可预测的非理性》tag: 心理 , 行为 , 美国

 [],  第三本书

……

tag_vector_非人文 = [

 [],

 [],

 ….

]

有了这样的数据后,我们就好计算 P(tag1| 人文)。对应 tag1,我们计算出训练集里“人文”的所有书中,tag1 出现的次数。

例如,在训练集里,“人文”有 60 本,其中 40 本都由经典的 tag,那么我们就令 num_of_tag1=40, 依次类推

num_of_tag2=32,num_of_tag3=18…

然后,我们求出在“人文”类,所有书的 tag 标签总数,例如“人文”类 2 本书,第一本书的标签是“散文”,“经典”,“外国”,第二本书是“经典”,“小说”,那么所有本 tag 总数是 3 +2=5。现在我们求出训练集所有的 100 本 tag 的标签总数。假设总数是 700. 我们令 total_人文 =700

于是 tag1 在“人文”类里的出现的概率就是 P(tag1| 人文) = num_of_tag1 / total_人文 = 40/700=0.057

利用 numpy

from numpy import *
num_tags_cate1 = ones(len(dicts)) #1
total_cate1 = 2.0 #2
for item in tag_vector_cate1:
 num_tags_cate1 += item #3
 total_cate1 += sum(item) #4
p_tags_cate1 = num_tags_cate1 / total_cate1 #5
#1  表示生成一个 numpy 数组,ones()是 numpy 的函数,返回一个填充了数值为 1 的 numpy 数组。参数是这个数组的长度。例如 temp=ones(3), 表示生成一个 numpy 的数组 [1,1,1] 并返回给 temp。所以就是以训练集的 tag 集 dicts 的长度为参数,生成一个和 dicts 等长的填充了 1 的 numpy 数组。#2 
#3 tag_vector_cate1  是  [[],[],[]]  而 item 是每个元素是一个列表,长度是 dicts 的长度,表示,对应的 tag 是否存在。 numpy 数组  + tag_vector_cate1 的结果是,对应位置的元素相加
 a 是一个 numpy [1,2,3,5,0] b 是一个 python 的 list [0,0,3,2,1] a + b = [1,2,6,7,1]  结果是 numpy 的数组
#4  把每本书出现的所有 tag 数量相加,sum(item)也是 numpy 的函数,作用是讲 item 里面的每一项相加
 sum([2,5,-1]) = 2 + 5 - 1 = 6
  假如 item 是对应的 list = [0,1,0,0,0,0,0,1,0,1]  对应是《麦田的守望者》  相当于总标签是 3 个
 
#5

感谢各位的阅读,以上就是“怎么用贝叶斯分类器给图书分类”的内容了,经过本文的学习后,相信大家对怎么用贝叶斯分类器给图书分类这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3824字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)