zoukankan      html  css  js  c++  java
  • 机器学习——朴素贝叶斯分类器

    如果如今要构建一个网络图书馆,我们能够给新进来的书贴上若干个标签,没有机器学习算法的情况下,我们须要给这些书手动分类。是计算机类的呀,还是非计算机类的呀。是小说类的呀。还是非小说类的云云。


    那么。我们能够通过让程序自己学习怎样通过一本书上的若干标签来进行图书类别的区分,这样就能够节省非常多人力,这也是机器学习的魅力体现。


    机器学习的基本原理是通过开发人员给出这个程序一个学习集进行学习,再通过用户给的用户数据集进行学习的过程,机器学习包括非常多的算法,当然,有大量数据的前提下,机器学习就和统计学密不可分,学习的时候有非常高的耦合。这个图书馆图书分类器就是用到了概率论中的贝叶斯公式。
    非常奇怪为什么图书分类能和一个概率论公式挂上关系对吧?以下就具体分析一下:
    首先,先回想一下用到的概率论知识。这里须要知道两个公式,一个是条件概率公式,还有一个就是贝叶斯公式啦。
    条件概率公式:设A。B是两个条件
    P(A|B)=P(AB)/P(B)
    什么意思呢?就是说,如果A发生的条件是B先发生,那么A发生的概率就是B发生的前提下A和B同一时候发生。这就是上面那个公式的意义了。

    举个栗子来说,小红进女厕所,分析一下,首先小红得是个女的。然后她才干进了女厕所。

    这就是小红是女的的前提下小红进了女厕所,如果小红是女的事件为A。小红进女厕所事件为B。那这个概率就是P(B|A)=P(AB)/P(A),就是这个意思(随便举个栗子不要介意。。。

    简单明了嘛)。
    贝叶斯公式是基于条件概率的

    P(A|B)=P(B|A)*P(A)/P(B)

    简单推导一下就能得出来,首先,条件概率公式即P(A|B)=P(AB)/P(B),那么P(B|A)=P(AB)/P(A),P(B|A)*P(A) = P(AB),此时P(AB)/P(B)=P(A|B)了。

    非常easy对吧!


    那么回到实际问题中来,如果我们先考虑新进来的书是不是计算机类的书,那我们先看这本书的标签(即tag),如果这本书是计算机类的前提是它的tag为“算法”,“数据结构”。“开发”。“java”。“C/C++”当中的3个时。即tag1、tag2 、tag3同一时候发生。简记为P(tag1,tag2,tag3)。那么我们再设当前我们手中全部书中出现计算机类书的概率为P(A),则这本新进的书是计算机类书籍的概率就是P(A|tag1,tag2,tag3)=P(A(tag1,tag2,tag3))/P(tag1,tag2,tag3) (条件概率公式嘛)
    用人话翻译就是这本书是计算机类书。那么就是在这本书的标签为tag1,tag2,tag3前提下出现计算机类图书且图书标签为tag1,tag2,tag3的概率。不懂慢慢消化下。。


    再通过贝叶斯公式我们得到:
    P(A|tag1,tag2,tag3)=P(tag1,tag2,tag3|A)*P(A)/P(tag1,tag2,gat3)。

    也就是说,我们仅仅要知道这三项:P(tag1,tag2,tag3|A)。P(A),P(tag1,tag2,gat3)就能够啦。
    P(tag1,tag2,tag3)的意思是这本书的标签是从全部标签中选出这三个标签的概率,我们先不求,一会说为什么。


    再看看P(tag1,tag2,tag3|A)。因为tag1、tag2和tag3的出现与否是相互独立的。所以P(tag1,tag2,tag3|A)=P(tag1|A)*P(tag2|A)*P(tag3|A)。
    P(A)就是我们现有书籍中出现计算机类书的概率(比方我们有10本书,3个计算机的书,那P(A)就是0.3,注意的事。这里我们现有书籍事实上就是文章一開始所述“开发人员给出这个程序一个学习集进行学习”,读到这里,相信您对于机器学习的原理有个大概的理解了^_^)
    呐。上述P(A|tag1,tag2,tag3)是求这本新进的书(tag1,tag2,tag3)是计算机类的概率,那么和这本书不是计算机类书的概率相比較,概率更大的自然就代表正确结果。那么这本书不是计算机类书的概率当然就是P(非A|tag1,tag2,tag3)咯。

    依据上文推的公式。P(非A|tag1,tag2,tag3)=P(tag1,tag2,tag3|非A)*P(非A)/P(tag1,tag2,tag3)。

    看看这俩(这本书是否是计算机类)的公式展开。分母都是P(tag1,tag2,tag3),这就是上文为什么我没让大家费劲去求这个的原因,直接消掉了。仅仅要比較这俩公式的分子sei大sei小即可啦。
    原理就是这么简单。机器学习中使用也是比較广泛的朴素贝叶斯分类器的原理就是这种,具体实现的时候当然不会这么轻松。一些边边角角的处理这里就不赘述了,当然,我们能够以此类推,垃圾邮件的分类啦,影片分类什么的,也都是这个原理。机器学习的原理也能比較清晰的从这个样例中体现。

    啰嗦一下上文机器学习的原理,通过开发人员给出这个程序一个学习集进行学习。再通过用户给的用户数据集进行学习的过程。就是这个意思啦,这时候我首先联想到的是siri。

    。。

    用户量大这小玩意学的就是快。从前两年刚出来时大多驴唇不正确马嘴,到如今机智的回答主银的问题(比方“我饿了”“前方20米处左转有厕所”。

    。。。。。)哈哈,开个玩笑啦。siri让我想起机器学习特有名的一句话机器学习界的名言:成功的机器学习应用不是拥有最好的算法。而是拥有最多的数据!机器学习的未来还是相当NB的。比方疯狂实验室——Google正在玩的自己主动驾驶汽车,通过模仿人的驾驶,自己学习,当然这玩意没眼睛是开不了车的啦,这车的车顶有个不断旋转的激光发射器来实时的探測周围物体的变化,所以人家机器的反应速度肯定比人是要快的,我也是看了那个丧心病狂的视频,驾驶技术还真不是普通司机能驾驭的呢~今天又看了一篇科普文章,最终是大致知道了机器学习和数据挖掘的关系,之前仅仅是粗略觉得是交集比較大,原来是数据挖掘=机器学习+数据库。仅仅只是数据挖掘商业化后,大都用工具把机器学习中的算法进行封装,直接拿来用非常方便,门槛也减少了。
    最后。也不禁说一下自己的想法:感觉特斯拉CEO的言辞也不一定是杞人忧天。如果机器学习能力到了一个临界点。突然超过人类可控范围。那就是一个毫无人性的高智慧“生命体”,能消灭垃圾邮件的没有人性的机器有什么理由不能相信它有朝一日能消灭人类呢?
    (这篇文章是我读了两个大牛的文章有感而发写的。机器学习入门还不算太难,尽管相对其他(android/ios之类的直接应用层开发或者站点开发)来说难了点。可是兴许会更难。希望能坚持下去,多和大牛们交流交流。礼拜五遇到的北大神牛也不知道会不会带我,当然能带飞是我的幸运。没那运气仅仅好回家自己搞啦~文章最后希望能对大家带来一点点的帮助也算是我没白码这些字啦)

  • 相关阅读:
    SpringBoot 拦截器
    SpringBoot学习笔记1
    mysql学习1
    mybatis运行原理学习
    js学习2
    设计原则
    mybatis学习1
    spring mvc
    Jenkins流水线部署maven不同模块服务到不同服务器运行
    L2Dwidget让自己的vue项目骚起来
  • 原文地址:https://www.cnblogs.com/llguanli/p/7402389.html
Copyright © 2011-2022 走看看