课程:无监督学习
监督学习
每个样本都被标记为良性或是恶性,对于监督学习中的每个样本我们已经知道什么是所谓的正确答案。
无监督学习
- 都有相同的标签,或是没有任何标签。
- 我们得到一个数据集,但是我们不知道拿它来做什么,也不知道每个样本点是什么,我们只知道这里有一个数据集,你能在其中找到某种结构吗?
在无监督学习算法中,可能判定,该数据集中包含两个不同的簇(clusters)。
这就是所谓的聚类算法
聚类算法的应用:
谷歌新闻:将成千上万的新闻组合成一个个的专题(搜索成千上万的新闻,将其自动分簇,组成页面显示在一起)
其他的一些作用:
以上都是聚类算法的例子,而聚类只是无监督学习的一种。
Cocktail party problem(鸡尾酒会问题)
一个宴会有,一屋子人,大家都在一起说话,每个人都在同时说话,你几乎很难听清楚你前面的人说的话。
假设鸡尾酒会上只有两个人,两个人同时说话。我们将两个麦克风放在房间里,两个麦克风与两个人的距离都不同,每个麦克风记录了来自两人声音的不同组合。
- 因为距离的不同,麦克风收到的音量是不同的,但是每个麦克风都记录了两个说话者重叠的声音。
- 将这两个音频交给鸡尾酒会算法处理后,算法会分离出两个不同发声源发出的声音。(视频中还举了人声和背景声分离的例子)
这个处理过程似乎要用到很多代码,调用各种java,c++的库来进行音频处理,但是实际上要实现这种效果只需要一行代码就可以了。
- 当然研究人员花了很长时间,才想出这行代码,并不是说这是一个简单的问题。
- 但事实上如果你使用正确的编程环境,许多学习算法都可以是很简短的程序。
这就是为什么在这门课中我们要使用 Octave的编程环境(Octave是一个免费的开源软件),使用Octave或Matlab这类的工具,许多学习算法都可以用几行代码来实现。
Octave实现了许多的函数,例如上面的SVD函数,已经内置在Octave中了,如果用C++或Java做这个将需要写很多代码,连接复杂的C++或java库。当然可以在C++,Java或Python中实现这个算法,只是会更加复杂。
Andrew Ng的建议是,使用Octave学习会更快,如果使用Octave作为学习工具和原型工具,它将会使你更快学会学习算法,建立原型。
在硅谷工作的人常常是用Octave建立学习算法原型只有算法原型能够工作之后,再将其迁移到C++、Java或者其他编译环境。
试题
answer:BC