除却一些无关紧要的情况,人们很难直接从原始数据本身获得所需信息。例如 ,对于垃圾邮 
件的检测,侦测一个单词是否存在并没有太大的作用,然而当某几个特定单词同时出现时,再辅 
以考察邮件长度及其他因素,人们就可以更准确地判定该邮件是否为垃圾邮件。简单地说,机器 
学习就是把无序的数据转换成有用的信息。
机器学习横跨计算机科学、工程技术和统计学等多个学科,需要多学科的专业知识。稍后你 
就能了解到,它也可以作为实际工具应用于从政治到地质学的多个领域,解决其中的很多问题。
甚至可以这么说,机器学习对于任何需要解释并操作数据的领域都有所裨益。
开发出能够识别鸟类的计算机软件,鸟类学者就可以退休了。因为鸟类学者是研究鸟类的专家,
因此我们说创建的是一个专家系统。
表 1-1是我们用于区分不同鸟类需要使用的四个不同的属性值,我们选用体重、翼展、有无 
脚蹼以及后背颜色作为评测基准。现实中,你可能会想测量更多的值。通常的做法是测量所有可 
测属性,而后再挑选出重要部分。下面测量的这四种值称之为特征,也可以称作属性,也可将其称为特征。表丨—丨中的每一行都是一个具有相关特征的实例。

机器学习的主要任务就是分类。最终我们决定使用某个机器学习算法进行分类,首先需要做的是算法训练,即学习如何分类。
通常我们为算法输人大量已分类数据作为算法的训练集。训练集是用于训练机器学习算法的数据 
样本集合,表 1-1是包含六个训练样本的训练集,每个训练样本有4种特征、一个目标变量,如图 
1-2所示。目标变量是机器学习算法的预测结果,在分类算法中目标变量的类型通常是标称型的,
而在回归算法中通常是连续型的。训练样本集必须确定知道目标变量的值,以便机器学习算法可 
以发现特征和目标变量之间的关系。正如前文所述,这里的目标变量是物种,也可以简化为标称型的数值。我们通常将分类问题中的目标变量称为类别,并假定分类问题只存在有限个数的 
类别。

为了测试机器学习算法的效果,通常使用两套独立的样本集:训练数据和测试数据。当机器 
学习程序开始运行时,使用训练样本集作为算法的输人,训练完成之后输人测试样本。输人测试 
样本时并不提供测试样本的目标变量,由程序决定样本属于哪个类别。比较测试样本预测的目标 
变量值与实际样本类别之间的差别,就可以得出算法的实际精确度。
假定这个鸟类分类程序,经过测试满足精确度要求,是否我们就可以看到机器巳经学会了如 
何区分不同的鸟类了呢?这部分工作称之为知识表示,某些算法可以产生很容易理解的知识表 
示 ,而某些算法的知识表示也许只能为计算机所理解。知识表示可以采用规则集的形式,也可以 
采用概率分布的形式,设置可以是训练样本集中的一个实例。在某些场合中,人们可能并不想建 
立一个专家系统,而仅仅对机器学习算法获取的信息感兴趣。此时,采用何种方式表示知识就显 
得非常重要了^
机器学习的另一项任务是回归,它主要用于预测数值型数据。大多数人可能都见过回归的 
例子—— 数据拟合曲鉍:通过给定数据点的最优拟合曲线。分类和回归属于监督学习,之所以称 
之为监督学习,是因为这类算法必须知道预测什么,即目标变量的分类信息。
与监督学习相对应的是无监督学习,此时数据没有类别信息,也不会给定目标值。在无监督 
学习中,将数据集合分成由类似的对象组成的多个类的过程被称为聚类;将寻找描述数据统计值 
的过程称之为密度估计。此外,无监督学习还可以减少数据特征的维度,以便我们可以使用二维 
或三维图形更加直观地展示数据信息。表 1-2列出了机器学习的主要任务,以及解决相应问题的
算法。

选择合适的算法
选择实际可用的算法,必须考虑下面两个问题:一 、使用机器学习 
算法的目的,想要算法完成何种任务,比如是预测明天下雨的概率还是对投票者按照兴趣分组。二是要理解和分析收集到的数据是什么。首先考虑使用机器学习算法的目的。如果想要预测目标变量的值,则可以选择监督学习算法,
否则可以选择无监督学习算法。确定选择监督学习算法之后,需要进一步确定目标变量类型,如 
果目标变量是离散型,如是/否、1/2/3、― 冗或者红/黄/黑等,则可以选择分类器算法;如果目 
标变量是连续型的数值,如0.0~ 100.00、-999~999或者+00~-00等 ,则需要选择回归算法。
如果不想预测目标变量的值,则可以选择无监督学习算法。进一步分析是否需要将数据划分 
为离散的组。如果这是唯一的需求,则使用聚类算法;如果还需要估计数据与每个分组的相似程 
度 ,则需要使用密度估计算法。次需要考虑的是数据问题。我们应该充分了解数据,对实际数据了解得越充分,越容易创 
建符合实际需求的应用程序。主要应该了解数据的以下特性:特征值是离散型变量还是连续型变量 ,特征值中是否存在缺失的值,何种原因造成缺失值,数据中是否存在异常值,某个特征发生 
的频 率如何(是否罕见得如同海底捞针),等等。充分了解上面提到的这些数据特性可以缩短选 
择机器学习算法的时间。我们只能在一定程度上缩小算法的选择范围,一般并不存在最好的算法或者可以给出最好结 
果的算法,同时还要尝试不同算法的执行效果。对于所选的每种算法,都可以使用其他的机器学 
习技术来改进其性能。在处理输入数据之后,两个算法的相对性能也可能会发生变化。
开发机器学习应用程序的步骤
使用机器学习算法开发应用程序,通常遵循以下的步骤。
(1 )收集数据。我们可以使用很多方法收集样本数据,如 :制作网络爬虫从网站上抽取数据、
从&38反馈或者八?1中得到信息、设备发送过来的实测数据(风速、血糖等)。提取数据的方法非 
常多,为了节省时间与精力,可以使用公开可用的数据源。
(2 )准备输入数据。得到数据之后,还必须确保数据格式符合要求,还需要为机器学习算法准备特定的数据格式,如某些算法要求特征值使用特定的格式,
一些算法要求目标变量和特征值是字符串类型,而另一些算法则可能要求是整数类型。
(3)分析输入数据。此步骤主要是人工分析以前得到的数据。为了确保前两步有效,最简单 
的方法是用文本编辑器打开数据文件,査看得到的数据是否为空值。此外,还可以进一步浏览数 
据 ,分析是否可以识别出模式;数据中是否存在明显的异常值,如某些数据点与数据集中的其他 
值存在明显的差异。通过一维、二维或三维图形展示数据也是不错的方法,然而大多数时候我们 
得到数据的特征值都不会低于三个,无法一次图形化展示所有特征。这一步的主要作用是确保数据集中没有垃圾数据。如果是在产品化系统中使用机器学习算法
并且算法可以处理系统产生的数据格式,或者我们信任数据来源,可以直接跳过第3步
需要人工干预,如果在自动化系统中还需要人工干预,显然就降低了系统的价值。
(4)训练算法。机器学习算法从这一步才真正开始学习。根据算法的不同,第4步和第5步是 
机器学习算法的核心。我们将前两步得到的格式化数据输入到算法,从中抽取知识或信息。这里 
得到的知识需要存储为计算机可以处理的格式,方便后续步骤使用。
如果使用无监督学习算法,由于不存在目标变量值,故而也不需要训练算法,所有与算法相 
关的内容都集中在第5步。
⑶测试算法。这一步将实际使用第4步机器学习得到的知识信息。为了评估算法,必须测试算 
法工作的效果。对于监督学习,必须已知用于评估算法的目标变量值;对于无监督学习,也必须用 
其他的评测手段来检验算法的成功率。无论哪种情形,如果不满意算法的输出结果,则可以回到第 
4步 ,改正并加以测试。问题常常会跟数据的收集和准备有关,这时你就必须跳回第1步重新开始。
( 6 ) 使用算法。将机器学习算法转换为应用程序,执行实际任务,以检验上述步骤是否可以
在实际环境中正常工作。此时如果碰到新的数据问题,同样需要重复执行上述的步骤。