1.1 什么是机器学习

机器学习的概念可以追溯到1959年,Arthur Samuel对机器学习做出的定义是:Field of study that gives computers the ability to learn without being explicitly programmed(即让计算机在没有被显示编程的情况下,具备自我学习的能力)。

Tom M. Mitchell在操作层面给出了更直观的定义:A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E(针对某件事情,计算机会从经验中学习,并且越做越好)。

总之,机器学习是一个计算机程序,针对某个特定任务,从经验中学习,并且越做越好。

对机器学习而言,最重要的有两方面内容:数据和模型。

数据:经验最终要转换为计算机能理解的数据,这样计算机才能从经验中学习。谁掌握的数据量大、质量高,谁就占据了机器学习和人工智能领域最有利的资本。

模型:即算法,有了数据之后,需要设计一个模型,把数据作为输入来训练这个模型。经过训练的模型,最终就成了机器学习的核心,使得模型成为了能产生决策的中枢。一个经过良好训练的模型,当输入一个新事件时,会做出适当的反应,产生优质的输出。

1.2 机器学习的用途

受益于摩尔定律,随着计算机性能的提高,以及计算资源变得越来越便宜,机器学习在诞生半个世纪后的今天,得到了越来越广泛的应用。

早晨起床,你用iPhone打开Siris,问“今天天气怎么样”。Siris会自动定位到当前所在城市,并把天气信息展现出来。这个功能用起来很简单,但其背后的系统是异常复杂的。

其一是语音识别,这是机器学习最早的应用研究领域。Siris需要先把你说的话转换为文字。语音本质上是一系列幅度不同的波,要转换为文字,就需要设计一个模型,先通过大量的语音输入来训练这个模型,等模型训练好了,把语音作为输入,就可以输出文字了。语音识别在20世纪50年代就开始研究了,其模型是不断演变的。一个比较大的演变,就是基于模式识别的算法演变为基于统计模型的算法,这一演变大大提高了语音识别的准确率。

其二是自然语言处理,这是机器学习和人工智能又一个非常重要的研究方向。Siris把语音转成文字后,软件需要理解文字的意思才能给出准确的回答。要让计算机理解文字可不是简单的事情。首先要有大规模的语料库,其次要有相应的语言模型,然后通过语料库来训练模型,最终才能理解文字的部分语义。

你在洗漱期间,抽空浏览手机上的新闻,发现新闻下有感兴趣的行车记录仪广告,点进去打开了某知名电商网站,看了下产品的价格和评价,顺手就买了。接着浏览新闻,发现这个新闻客户端越来越人性化,自动将你感兴趣的IT新闻及体育新闻排在了首页。你坐在地铁上,打开音乐播放器,浏览了一遍曲库,没有找到特别想听的歌,于是就让系统给你推荐一些歌,系统推荐的歌还挺靠谱的,虽然很多都没听过,但都很对你的胃口。

以上这些场景就是推荐系统,这也是机器学习的一个重要应用方向。推荐系统的核心,是不断的学习用户的使用习惯,从而刻画出用户的画像,根据用户的画像去推荐用户感兴趣的商品。

你走到公司门口,人脸识别系统自动把你识别出来,并准确地通过语音方式和你打招呼。目前最先进的人脸识别系统基本上都是基于深度学习模型的算法实现的。这一领域也由早期的传统方法慢慢地被深度学习模型所替代。

当然,机器学习不止这些应用场景。我们在介绍具体算法的时候,会再详细列出每个算法的应用场景。

1.3 机器学习的分类

机器学习可以分成两类:有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。

(1)有监督学习(Supervised Learning)

有监督学习通过大量已知的输入和输出相匹配的数据,让计算机从中学习出规律,从而能针对一个新的输入做出合理的输出预测。

比如:我们有大量不同特征(面积、地理位置、朝向、开发商等)的房子的价格数据,通过学习这些数据,预测一个已知特征的房子的价格。这种称为回归学习(Regression Learning),即输出结果是一个具体的数值,它的预测模型是一个连续的函数。

再比如:我们有大量的邮件,每个邮件都已经标记是否是垃圾邮件。通过学习这些已经标记的邮件数据,最后得出一个模型,这个模型对新的邮件,能准确的判断出该邮件是否是垃圾邮件。这种称为分类学习(Classification Learning),即输出结果是离散的,如要么输出1表示是垃圾邮件,要么输出0表示不是垃圾邮件。

(2)无监督学习(Unsupervised Learning)

无监督学习通过学习大量的无标记的数据,去分析出数据本身内在的特点和结构。

比如:我们有大量的用户购物的历史记录信息,从数据中去分析用户的不同类别。最终能划分几个类别?每个类别有哪些特点?我们事先是不知道的。这就是聚类(Clustering)。

这里需要特别注意和有监督学习中的分类的区别:分类问题事先知道有哪几种类别,在已知答案里选一个;聚类问题事先不知道有哪几种类别,需要利用算法去挖掘出数据的特点和结构,进而聚成若干个类别。

总结:这两类机器学习的最大区别是:有监督学习的训练数据里有已知的结果来监督;而无监督学习的训练数据里没有结果监督,不知道到底能分析出什么样的结果。

1.4 机器学习应用开发的典型步骤

假设:要开发一个房价评估系统,目标是对一个已知特征的房子价格进行评估预测。

建立这样一个系统,通常包括以下几个步骤:

(1)数据采集和标记

我们需要大量不同特征的房子和所对应的价格信息,可以直接从房产评估中心获取房子的相关信息,如房子的面子、地理位置、朝向、价格等。另外还有一些信息房产评估中心不一定有,比如房子所在地的学校情况,这一特征往往会影响房子的价格,这个时候就需要通过其他途径收集这些数据。以上收集到的所有数据叫做训练样本,或数据集。房子的面积、地理位置等称为特征。在数据采集阶段,需要收集尽量多的特征。特征越全、数据越多,训练出来的模型才会越准确。

我们的房屋价格信息是从房产评估中心获得的,这一数据可能不准确。因为有时为了避税,房屋的评估价格会比房子的真实交易价格低很多。这时就需要采集房子的实际成交价格,这一过程称为数据标记。数据标记可以是人工标记,比如逐个从房产中介那里打听房子的实际成交价格;也可以是自动标记,比如通过分析数据,找出房产评估中心给的房子评估价格和真实成交价格的匹配关系,然后直接算出来。数据标记对有监督的学习方法是必须的。比如,针对垃圾邮件过滤系统,训练样本必须包含该邮件是否为垃圾邮件的标记数据。

(2)数据清洗

假设我们采集到的数据里,关于房子的面积,有按平方米计算的,也有按平方英尺计算的,这时需要对面积单位进行统一。这个过程称为数据清洗。数据清洗还包括去掉重复数据及噪声数据,让数据具备结构化特征,以方便作为机器学习算法的输入。

(3)特征选择

假设我们采集到了房子的100个特征,通过逐个分析这些特征,最终选择了30个特征作为输入。这个过程称为特征选择。特征选择的方法之一是人工选择,即对逐个特征进行人工分析,然后选择合适的特征集合。另外一个方法是通过模型来自动选择,如后面将要介绍的主成分分析(PCA)算法。

(4)模型选择

房价评估系统是属于有监督学习的回归学习类型,我们可以选择最简单的线性模型来模拟。选择哪个模型,和问题领域、数据量大小、训练时长、模型的准确度等多方面因素有关。这些内容将在第3章进行介绍。

(5)模型训练和测试

把数据集分成训练数据集和测试数据集,一般按照8:2或者7:3来划分,然后用训练数据集来训练模型。训练出参数后再使用测试数据集来测试模型的准确度。为什么要分出一个单独的测试数据集来做测试呢?答案是必须保证测试的准确性,即模型的准确性是要用它没见过的数据来测试,而不能用那些用来训练这个模型的数据来测试。理论上更合理的数据集划分方案是分成3个,即再分出一个交叉验证数据集。这些内容将在第3章进行介绍。

(6)模型性能评估和优化

模型训练出来后,需要对该模型进行性能评估。性能评估一般包括以下几个方面:

训练时长:是指需要花多少时间来训练这个模型。对于一些海量数据的机器学习应用,可能需要1个月甚至更长的时间来训练一个模型,这个时候算法的训练性能就变得很重要了。

另外,还需要判断数据集是否足够多。一般而言,对于复杂特征的系统,训练数据集越大越好。

然后还需要判断模型的准确性,即对于一个新的数据能否准确的进行预测。

最后需要判断模型是否能满足应用场景的性能要求,如果不能满足要求,就需要优化,然后继续对模型进行训练和评估,或者更换为其他模型。

(7)模型使用

训练出来的模型可以把参数保存起来,下次使用时直接加载即可。一般来讲,模型训练需要的计算量是很大的,也需要较长的时间来训练,这是因为一个好的模型参数,需要对大型数据集进行训练后才能得到。而真正使用模型时,其计算量是比较少的,一般是直接把新样本作为输入,然后调用模型即可得出结果。

本书的重点放在机器学习的算法介绍以及scikit-learn工具包的使用上。对数据采集、数据清洗、特征选择等内容没有深入介绍,但并不代表这些内容不重要。在实际工程应用领域,由于机器学习算法模型只有固定的几种,而数据采集、标记、清洗、特征选择等往往和具体的应用场景相关,机器学习工程应用领域的工程师打交道更多的反而是这些内容。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐