1.4 无监督学习
当输入数据没有标签时,从这些数据中学习的算法均称为无监督学习(unsupervised learning)。这只是意味着我们没有提供标签来“监督”学习过程,在没有帮助的情况下,系统必须自行解决所有问题。
无监督学习通常用于解决我们称之为“聚类”“降噪”和“降维”(dimension reduction)的问题。下面让我们来依次看一下。
1.4.1 聚类
假设我们正在为盖新房子挖地基,意外发现了很多旧陶罐和花瓶,于是打电话将情况告知给一位考古学家。她意识到我们发现的是一堆古代陶器,而且认为这些陶器显然来自不同的地方,也可能来自不同的时期。
这位考古学家无法认出其中的任何标记和饰纹,所以她不能确定每一个标记来自哪里——有些标记看起来像是某一相同主题的变体,有些看起来则像是不同的符号。
为了解决这个问题,她决定把这些标记拓印下来,然后试着把它们分类。但是她要处理的事情太多了,而她的研究生都在忙其他项目,因此她决定转用机器学习算法,希望能以一种合理的方式自动地将标记分类。
图1.13显示了所拓印的标记以及算法自动进行的分类,我们把这类问题称为聚类(clustering)问题,并将实现这一过程的算法称为聚类算法(clustering algorithm)。在实现这一过程时,有许多算法可供我们选择,稍后我们将看到各种各样的聚类算法。如果用我们刚刚提及的术语进行描述,那就是,因为输入是没有标签的,所以这位考古学家正在用无监督学习算法进行聚类。
(a) (b)
图1.13 使用聚类算法来整理陶罐上的标记。(a)罐子上的标记;(b)相似的标记被分到一个簇中
1.4.2 降噪
有时样本会被噪声(noise)污染,如果样本是某人对着手机讲话的音频剪辑,那么噪声可能是街道的嘈杂背景音,这会让人们很难分辨出这个人说了什么。如果样本是电子信号(可能是广播或电视节目),噪声就会以静电形式侵入(静电干扰),造成广播节目中引起注意力分散的声音或电视图像中的闪烁点。在合成的或计算机生成的图像中,我们可以通过省略一些像素来节省时间,这时被省略的部分看起来就是黑色的,对计算机来说,这就是一种“噪声”,尽管实际上它是数据缺失而不是损坏。
我们的眼睛对噪声和缺失的像素很敏感,但是数据往往会得到更多的信息(相比于我们的观察)。图1.14显示了一个噪声图的示例以及一个降噪算法对该示例的处理结果。
(a) (b)
图1.14 降噪(或称为去噪),减少了随机失真对样本的影响,甚至可以填补一些缺失的空白。降噪算法可以在不同程度上成功地恢复图。(a)一张劣质的有大量噪声像素和一些缺失像素的牛的图;(b)原始图
这种情况不仅适用于图,当我们使用任何来源的数据时,样本几乎都带有不准确性或其他失真,这些不准确和失真将掩盖我们想要提取的信息。
如果这里有缺失的值,就可以使用回归算法来填充它们,或者把它们当作另一种形式的噪声,用降噪算法来填充这些值。
数据是没有标签的(例如,在有噪声的照片中,我们有的只有像素),所以降噪在形式上是一种无监督学习。算法通过学习样本的统计数据来评估每个样本,找出噪声部分,然后将其去除,留下更容易学习和解释的纯净数据。
在使用算法学习数据之前,我们往往需要对数据应用降噪算法,来删除输入中的奇异值和缺失值,使得学习过程更快、更顺利。
1.4.3 降维
有时,样本会有一些额外的特征(本身不需要的)。例如,假设我们于盛夏时节在沙漠中采集天气的样本,每天记录风速、风向和降雨量,如果假定在该季节和地区,每个样本的降雨量值均为0,那么在机器学习系统中使用这些样本时,计算机就需要处理和解释每一个样本中无用的、恒定的信息片段。这样做,轻则会降低分析的速度,重则会影响系统的准确性。因为计算机会投入其有限的时间和内存资源中的一部分,去试图从这个不变的特征中学习一些东西。
有时,特征会包含冗余的数据。例如,当一个人走进健康中心时,健康中心会记录下他的体重(单位:kg),然后护士会把他带到检查室,这时护士会再次测量他的体重,而这次是以磅为单位,之后将这个数据也放入图表中。那么这时,相同的信息就重复了两次,但是这很难被识别,因为它们的取值不同,就像无用的降雨量测量一样。当我们试图从这些数据中学习时,这种冗余是没有任何好处的。
下面讲述一个更抽象的例子,它涉及的数据要比实际需要的复杂得多。假设某个国家的森林正在遭受一种未知的传染病侵害,这种传染病会损害树木,林业部门曾试图将树干的一部分放在机器上,让机器转动木头将其刮掉,在此过程中测量木头的密度,并以此研究这种传染病在倒下的树上的扩散情况。这样做会生成一个三维的数据集,如图1.15a所示。树上的每个点都位于这个三维视图中,并且我们还需要一个值来告诉我们树被感染的情况。因此,我们需要4个数字来表示这些数据:3个数字用于描述点在空间中的位置,一个数字用于描述它的值。
这里的立体信息是很重要的,但是如果我们只是想要顺着螺旋的路径获得数据,就可以通过扁平化数据来使工作变得更轻松,如图1.15b所示。现在,对于每个数据点来说,我们需要3个数字来描述它:两个数字用于描述每个点的位置,一个数字用于描述它的值。这将使得我们在不放弃任何对于特定分析来说很重要的数据的情况下,加快对数据的处理速度。
(a) (b)
图1.15 当树干转动和被刮光时,检测它被感染的情况。(a)原始数据为三维形式;(b)我们可以通过将数据展开为二维来简化问题
起初,我们可能可以通过简化对数据的测量来使得工作更轻松,如果做不到,就可以在收集数据之后对它进行简化,去除与所要解决的问题无关的信息,这样计算机就不需要处理这些信息,这不仅节省了时间,甚至可能提高结果的质量。
例如,假设我们正在监测一条新建的、弯曲的、单向的而且单车道的山路上的交通情况,并且想要确保在所关心的特定路段的交通是安全的,所以我们设置了一些监控装置,之后就可以周期性地得到一些快照。图1.16a显示了每辆车的位置、运行的方向及其沿着我们想要监测的路段行驶的速度。
我们可能倾向于用纬度和经度来描述每辆车的位置,但是这里还有一种更简单的方法。由于道路只有一辆车宽,因此我们可以用一个数字来描述每辆车的位置,这个数字可以表明车离这段路的起点有多远,如图1.16b所示。
(a) (b)
图1.16 这条路上的车辆在哪里?(a)可以用纬度和经度来测量每辆车的位置,这需要两个数字(用x和y进行标记);(b)还可以测量每辆车沿着路的方向所行驶的距离,这只需要一个数字,这种方法使得数据变得更加简单
在上述情况下,我们就可以使用无监督学习来分析样本,并删除对理解隐含信息没有帮助的特征。通过简化数据,学习系统可以通过更少的工作进行学习,从而使训练更快、更准确。
有时候,我们可以通过丢弃一小部分信息来简化数据。比如,当我们只是进行粗略的检查以确保一切正常运行时,如果它能大大简化运算并提高训练速度,放弃一些精度也是值得的。
下面让我们看看如何在监测路况的例子中做到这一点。我们可以在图1.16中看到如何用一个数字而不是两个数字来定位车辆的方法,在这种情况下,我们没有丢失任何信息。在其他情况下,我们也可以将测量数据结合起来,尽管这样做会丢失一些信息,但仍然可以捕获大部分的信息。例如,在修改版本的高速公路上,在每个方向上可能都有两条车道,这样就确实需要用图1.16a所示的纬度和经度这两个数字来准确定位每一辆车。
但如果我们想,也可以使用一个数字来描述车辆的位置,如图1.17所示。这也为我们提供了非常近似的确定汽车位置的值。
图1.17 如果我们愿意舍弃一些准确性,就可以简化计算。根据需要,我们可以用不同的方式来表示这些车辆的位置
为了确定图1.17中车辆的位置,我们可以测量它们到左下方路段或道路起始处的距离,就像图1.16所示的那样。但是,这样做是假设每辆车都位于道路中心的情况,当车辆不再位于道路中心时,我们就可以切换到一个更详尽、更精确的表示方法。这样做的代价是:通常,更简单的版本会给出一个更快的训练和运行的系统,但是往往会包含错误。更精确的系统的训练和运行会更慢,但是更准确。这两种选择都是可行的,这取决于系统所需的准确性和速度。
某些情况下,从图1.17中所得到的近似位置已经足够精确。
在所有例子中,我们的目标都是简化数据,所用的方法是删除不提供信息的特征、组合冗余特征或是用准确性来交换简化的数据结果(通过组合或是其他操作特征的方法)。
在这些情况下,我们都可以使用无监督学习算法来完成工作。
用无监督学习算法来找到一种减少我们描述数据所需要的值(或维度)的方法称为降维,这个名称直观反映了我们正在减少的每个样本的特征 (也称为维度)的数量。