[斯坦福大学2014机器学习教程笔记]第一章-引言(2)

    本篇主要内容:无监督学习。web

(2)无监督学习算法

  •     监督学习的时候,咱们举的例子里,数据集中每条数据都标明是阴性或者是阳性
  •      在无监督学习中,咱们所给出的数据都是没有任何标签的或者是都是有着相同标签的。

                               

    在这时,咱们获得了一个数据集,可是咱们并不知道要拿它来作什么,也不知道每一个数据点到底是什么。咱们只是被告知,这里有个数据集,你能在其中找到某种数据结构吗?数据库

    对于某个特定的数据集,无监督学习算法可能断定该数据集包含两个不一样的簇。这就是聚类算法编程

    事实上,聚类算法被用在不少地方。其中一个应用聚类算法的例子就是谷歌新闻。谷歌新闻天天作的事情就是收集几万条甚至几十万条新闻,而后将它们组合成一个个新闻专题。网络

    如图所示,当咱们点击里面的不一样的连接,咱们就能看到华尔街日报、CNN、英国卫报关于BP油井泄漏事故的报道。因此,谷歌新闻所作的就是:去搜集成千上万条新闻,而后自动地将它们分簇。有关同一主题的新闻被显示在一块儿。数据结构

    这里再举一个在基因组学的应用。这里是一个DNA微阵列数据的例子。基本思想是给定一组不一样的个体,对于每一个个体检测它们是否拥有某个特定的基因,也就是检测特定基因的表达程度。这些颜色(如红、绿、灰等等)展现了不一样基因拥有特定基因的程度。而后你能所作的就是:运用一个聚类算法,把不一样的个体纳入不一样的类或归为不一样类型的人。机器学习

    这就是无监督学习算法,由于咱们没有提早告知这个算法这是一类,那是另外一类等等,相反咱们只是告诉这个算法,我这里有一堆数据,我不知道这些数据是什么,也不知道它们是什么类型,你能自动找出这些数据的结构吗?函数

    生活中还有不少例子,好比工具

  • 有一个大型的计算机集群,要想试图找出哪些机器趋于协同工做。这样若是把这些机器放在一块儿,就可以让你的数据中心更高效地工做。
  • 第二种应用是社会网络的分析。若是能够得知你email最频繁的联系人或者知道你的Facebook好友或者你的Google+圈,咱们是否能够自动识别同属一个圈子的朋友,来判断哪些人相互认识。
  • 第三种应用是市场细分中的应用。许多公司拥有庞大的客户信息数据库。对于一个客户数据集,你可否自动找出不一样的市场分割?可否自动将你的客户细分到不一样的细分市场?从而可以自动高效地在不一样的细分市场中进行销售?
  • 还能够被用于天文数据分析。这些聚类算法带来了实用的星系造成理论。

    这些都是聚类的例子,而聚类只是无监督学习的一种。学习

    下面咱们来讨论另一种。咱们先来说一下鸡尾酒宴的问题。想象一下有一个宴会,有一屋子的人,你们都坐在一块儿讲话。由于每一个人都在同时讲话,有许多声音混杂在一块儿,因此你几乎很难听清楚你面前的人说的话。如今假设有两我的正在同时说话,房间里还有两个麦克风。由于这两个麦克风离两我的的距离不同,因此每一个麦克风记录了两我的声音的不一样组合。也许第一我的在一号麦克风里声音会响一点,第二我的在二号麦克风里声音会响一点。

    可是,每一个麦克风都记录着两个说话者重叠的声音。咱们能作的就是把这两个录音交给一种无监督学习算法,称为“鸡尾酒会算法”。让它帮你找出数据的结构,这个算法就会去听着两个录音,而后说这听起来像两个音频录音被叠加在一块儿。此外,这个算法还会分离出这两个被叠加在一块儿的音频源。

    看看这个无监督学习算法,实现这个得要多么的复杂,是吧?它彷佛是这样,为了构建这个应用,完成这个音频处理彷佛须要你去写大量的代码或连接到一堆的合成器JAVA库,处理音频的库,看上去绝对是个复杂的程序,去完成这个从音频中分离出音频。事实上,这个算法对应你刚才知道的那个问题的算法能够就用一行代码来完成。

    就是这里展现的代码:

[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');

    研究人员花费了大量时间才最终实现这行代码。我不是说这个是简单的问题,但它证实了,当你使用正确的编程环境,许多学习算法是至关短的程序。因此,这也是为何在本课中,咱们打算使用Octave编程环境。Octave,是免费的开源软件,使用一个像OctaveMatlab的工具,许多学习算法变得只有几行代码就可实现。

    事实上,在硅谷里,对大量机器学习算法,咱们第一步就是建原型,在Octave建软件原型,由于软件在Octave中能够使人难以置信地、快速地实现这些学习算法。这里的这些函数好比SVM支持向量机)函数,奇异值分解Octave里已经建好了。若是你试图完成这个工做,但借助C++JAVA的话,你会须要不少不少行的代码,并连接复杂的C++Java库。因此,你能够实现这些算法,借助C++JavaPython,它只是用这些语言来实现会更加复杂。(如今主流是Python)

    下面有一道简单的复习题。

    下面的例子中,你会用无监督学习算法解决哪一个问题?(多选)

  • 给邮件标记为垃圾邮件,学习区别是否垃圾邮件。
  • 给定在web上找到的一组新闻文章,将它们分组到同一个主题
  • 给定一个客户数据数据库,自动发现细分市场,并将客户分组到不一样的细分市场。
  • 给定一个被诊断为糖尿病或非糖尿病患者的数据集,学习将新患者分类为糖尿病或非糖尿病。

    显然第一个和第四个是监督学习的例子,而第二个和第三个是无学习监督的例子。

相关文章
相关标签/搜索