- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
自己动手写贝叶斯分类器给图书分类
背景与目的
首先,这是一个机器学习初学者兼非数学科班出身的非典型工程师的自学记录。所以本文不会特别理论,也不会太深入地讲解公式,但是会非常有目的性,针对一个特别现实的问题,从头开始分享解决方案,包括某些优化方案。
从问题开始
我们要解决的问题,是对图书进行二元分类。分类的依据是图书的tag。这些tag可能来自专家,或者编辑,或者用户。例如“外国文学”,“侦探”,“计算机”,“python”都属于tag。
出于我们的小小实验项目的需求,简化问题,我们现在要把图书分为“人文”或者“非人文”两类。所以,正如上文所说,这是一个对图书进行的二元分类问题。
例如,《计算机科学导论》,它的标签有“计算机”“科学”“经典”“导论”,它属于“非人文”。《麦田里的守望者》,它的标签有“小说”“文学”“美国”,它属于“人文”。我们的分类器有能力根据一本书的标签,自动地将其归类为“人文”或者“非人文”。试试看,蛮有意思的!
为了解决这个问题,我们给出若干个前提:
任何一本书只可能归类为“人文”或“非人文”中的一类
1本书有1个或以上的tag
所有书都没有“人文”和“非人文”的tag(什么?你不相信?看看亚马逊京东就知道了)你需要很少的概率知识,比如什么是概率?条件概率又是什么?
使用python和numpy
我们将使用python作为这个实验项目的编程语言。
numpy是一个python的科学计算库,需要你自行安装。因为我们的程序涉及一些简单的矩阵运算,用numpy可以大大简化编程工作量。
基本原理
贝叶斯分类器的工作原理
还是需要了解一定的理论知识的,别担心,这部分很快就过去。我会直接结合要解决的问题来讲解。
基本上,用贝叶斯分类是要解决一个这样的问题:已知一本书有这些tag:tag1,tag2,tag3......
它属于“人文”分类的概率是多少?属于“非人文”分类的概率呢?
假设p1表示在这种情况下,它属于“人文”的概率,p2表示这种情况下,它属于“非人文”的概率。
如果p1p2,那么这本书就属于“人文”,反过来就是“非人文”。我们不考虑p1=p2的情况。
很简单,不是么?
所以,问题就变成了,如何通过tag1,tag2,tag3...来计算p1和p2?毕竟,只要知道了这两个值,我们的最终问题就解决了。
条件概率
其实,这是一个条件概率的问题。所谓条件概率,就是求:在已知b发生的情况下,a发生的概率。我们写做:p(a|b)。
结合我们的实际问题,那就是在tag1,tag2,tag3...已经发生的情况下(也就是这本书的tag就是tag1,tag2,tag3...),这本书属于“人文”和“非人文”的概率。我们写做:p(cate1|tag1,tag2,tag3...)意思是在tag1,tag2,tag3...发生的情况下,这本书属于cate1的概率
(cate1=“人文”)
p(cate2|tag1,tag2,tag3...)意思是在tag1,tag2,tag3...发生的情况下,这本书属于cate2的概率
(cate2=“非人文”)
这里的p(cate1|tag1,tag2,tag3...)其实就是上面说的p1,我们这里用更为专业的方法来写。条件概率怎么求呢?这就是贝叶斯公式:
p(a|b)=p(b|a)*p(a)/p(b)
这个意思就是:想要求 p(a|b),而你又知道 p(b|a),p(a)和p(b)的值,那你就可以通过p(b|a)*p(a)/p(b)来求得p(a|b)。
换成我们要解决的实际问题,等于:
p(cate1|tag1,tag2,tag3...)=p(tag1,tag2,tag3...|cate1)*p(cate1)/p(tag1,tag2,tag3...)
翻译为人话,那就是你想求p(cate1|tag1,tag2,tag3...),而你现在知道:p(tag1,tag2,tag3...|cate1)的值,也就是你知道在一本书已经被分类为“人文”的情况下,tag1,tag2,tag3...一起出现的概率p(cate1),也就是所有被标记为“人文”分类的书,(在训练集中)在所有书(“人文”和“非人文”)中出现的概率
p(tag1,tag2,tag3...),也就是tag1,tag2,tag3...(在训练集)所有tag中出现的概率
也就是说,我们只要挨个求出上述3项,我们就可以求出p(cate1|tag1,tag2,tag3...)了
文档评论(0)