第 1 章 基础知识

第 1 章 基础知识

要想完全搞明白数据科学算法,必须先从基础知识学起。本章主要介绍数据科学的基础知识,它是本书最长的一章,篇幅大概是后续各章(讲解各种具体算法)的两倍。通过学习本章,你将对绝大多数数据科学研究涉及的基本步骤有大致的了解。这些基本步骤会帮助你评估上下文以及约束条件,并选出适合在研究中使用的算法。

数据科学研究有 4 个主要步骤。首先,必须处理和准备待分析的数据。其次,根据研究需求挑选合适的算法。再次,对算法的参数进行调优,以便优化结果。最后,创建模型,并比较各个模型,从中选出最好的一个。

1.1 准备数据

数据科学就是关于数据的科学。如果数据的质量差,那么分析得再精确也只能得到平淡无奇的结果。本节将介绍数据分析中常用的数据格式,还会涉及一些用来改进结果的数据处理方法。

1.1.1 数据格式

在数据分析中,表格是最常用的数据表示形式,如表 1-1 所示。表格中的每一行就是一个数据点,代表一个观测结果;每一列是一个变量,用来描述数据点。变量也叫属性特征维度

表 1-1 假设一些动物顾客去超市购物,以下是交易数据集。每一行代表一笔交易,每一列则描述交易的某一方面信息

根据需求,可以更改每行观测的类型。例如,通过表 1-1 这种表示形式,我们可以借助大量交易来研究交易模式。但是,如果想根据日期研究交易模式,则需要以行为单位汇总每一日的数据。为了分析得更全面,可以另外再添加几个变量,比如天气等,如表 1-2 所示。

表 1-2 根据日期汇总后的交易数据集,并且另外添加了几个变量

1.1.2 变量类型

变量主要有 4 类,正确区分它们对于为算法选择合适的变量至关重要。

  • 二值变量:这是最简单的变量类型,它只有两种可能的值。在表 1-1 中,“是否买鱼”就是二值变量。
  • 分类变量:当某信息可以取两个以上的值时,便可以使用分类变量来表示它。在表 1-1 中,“顾客类别”就是分类变量。
  • 整型变量:这种变量用来描述可以使用整数表示的信息。在表 1-1 中,“水果购买量”就是整型变量,它表示每位顾客所购水果的数量。
  • 连续变量:这是最精细的变量,用来表示小数。在表 1-1 中,“支出”就是连续变量,它表示每位顾客花费的金额。

1.1.3 变量选择

原始数据集可能包含许多变量。往一个算法中放入过多变量,可能导致计算速度变慢,或者因干扰过多而产生错误的预测结果。因此,需要从众多变量中筛选出那些与研究目标密切相关的变量,这个过程就是变量选择。

通常,变量选择是一个试错的过程,需要根据反馈结果不断更换变量。一开始,可以借助简单的图来研究变量之间的相关性(详见 6.5 节),选取那些最有希望的变量,以待进一步分析。

1.1.4 特征工程

有时候,需要做一些处理才能获得最佳变量。例如,如果要预测表 1-1 中的哪些动物顾客不会买鱼,可以通过查看“顾客类别”获知,兔子、马和长颈鹿不会买鱼。不过,如果以食草动物、杂食动物和食肉动物这 3 大类划分表中的动物顾客,将得到更广义的结论:食草动物不吃鱼。

除了对单个变量进行重新编码之外,还可以合并多个变量,这个技巧叫作降维,第 3 章将进行讲解。降维可以提取最有用的信息,从而获得更精简的变量集,以供进一步分析。

1.1.5 缺失数据

我们收集的数据并非总是完整的。比如,在表 1-1 的最后一笔交易中,水果购买量就没有被记录下来。数据缺失会妨碍分析,因此要尽可能地使用如下一些方法来解决数据缺失问题。

  • 近似:如果缺失值所属的类型为二值变量或分类变量,那么可以使用该变量的众数(即出现次数最多的那个值)来替换它。若缺失值属于整型变量或连续变量,则可以使用中位数来替换它。利用这个方法,可以将表 1-1 中的缺失值替换为 5,即猫购买了 5 个水果,因为其他 7 笔交易中水果购买量的中位数为 5。
  • 计算:对于缺失值,还可以使用更高级的监督学习算法(详见 1.2 节)将它计算出来。虽然计算更耗时,但是所得到的数值更准确,这是因为算法基于类似交易来估算缺失值,这一点与近似方法(考虑每一笔交易)有所不同。从表 1-1 可知,买鱼的顾客购买的水果往往比较少,因此推断猫购买的水果大约只有 2 个或 3 个。
  • 移除:万不得已时,可以把包含缺失值的整行数据移除。但是,尽量不要这样做,因为这会减少分析时可用的数据量。而且,移除数据点可能会导致数据样本倾向或偏离特定的群体。例如,猫可能不太愿意公开自己所购水果的数量,如果把未记录水果购买量的顾客移除,那么最终的样本就会丢失有关猫的数据。

处理完数据集之后,就该对数据集进行分析了。

1.2 选择算法

本书将讨论 10 多种用于分析数据的算法。如何选择算法,取决于任务类型。任务大致可以分为 3 大类,每一类对应一些算法,如表 1-3 所示。

表 1-3 各种算法及其对应的任务类型

1.2.1 无监督学习

任务目标:指出数据中隐藏的模式。

当希望找出数据集中隐藏的模式时,可以使用 k 均值聚类、主成分分析、关联规则、社会网络分析等无监督学习算法。之所以称之为无监督学习算法,是因为我们不知道要找的模式是什么,而是要依靠算法从数据集中发现模式。

以表 1-1 中的数据为例,可以应用无监督学习模型找出哪些商品是顾客经常搭配购买的(其中会用到第 4 章讲解的关联规则算法),或者根据购买的商品对顾客进行分类(第 2 章将进行讲解)。

通过间接手段,可以对无监督学习模型输出的结果进行验证,比如检查得到的顾客分类是否与我们熟悉的分类(如食草动物和食肉动物)相符合。

1.2.2 监督学习

任务目标:使用数据中的模式做预测。

当需要做预测时,就会用到回归分析、k 最近邻、支持向量机、决策树、随机森林、神经网络等监督学习算法。之所以称之为监督学习算法,是因为它们的预测都基于已有的模式。

以表 1-1 中的数据为例,监督学习模型可以根据“顾客类别”以及“是否买鱼”(二者皆为预测变量)来预测“水果购买量”。

通过输入非表中顾客的预测变量值(“顾客类别”和“是否买鱼”),并且对比预测结果和实际的“水果购买量”,可以直接评估监督学习模型的准确度。

像“水果购买量”这样的整型数值或连续数值的预测过程,实际上是在解决回归问题,如图 1-1a 所示。二元值或分类值的预测过程,如预测是否会下雨,则是在解决分类问题,如图 1-1b 所示。尽管如此,大部分分类算法也可以生成连续的概率值,比如预测“降水概率是 75%”,这种预测精度更高。

图 1-1 回归会产生一条趋势线,而分类则会把数据点分组。请注意,这两项任务都可能出错:在回归过程中,某些数据点可能会远离趋势线;在分类过程中,某些数据点可能被错误地分组

1.2.3 强化学习

任务目标:使用数据中的模式做预测,并根据越来越多的反馈结果不断改进。

无监督学习模型和监督学习模型在部署之后便无法更改。不同于此,强化学习模型自身可以通过反馈结果不断改进。

暂且抛开表 1-1 中的动物顾客,让我们举一个实际的例子:假设要比较两个在线广告的效果。首先,让这两个广告的投放频率一样,然后确定每个广告的点击人数。接着,利用强化学习模型把点击人数作为衡量广告受欢迎程度的指标,并根据这个指标提高受欢迎广告的投放频率。通过这样的迭代过程,模型不断得到改进,最终会让广告投放取得更好的效果。

1.2.4 注意事项

除了要了解算法适用的任务类型之外,还要了解它们在其他方面的不同,比如各种算法对不同数据类型的分析能力,以及结果的本质。接下来的各章在介绍相应的算法时将具体讲解。此外,附录 A 和附录 B 将分别总结无监督学习算法和监督学习算法的特点。

1.3 参数调优

在数据科学中,可用的算法有很多。利用这些算法,可以得到很多不错的模型。然而,即便是同一个算法,如果参数调得不一样,所产生的结果也各不相同。

参数选项用来调节算法的设置,就像调节收音机的频道一样。不同的算法有不同的调节参数。附录 C 将列出本书所讲算法常用的调节参数。

毫无疑问,如果模型的参数调得不合适,它的准确度就会受影响。举例来说,同一个分类算法在区分橙点和蓝点时可能产生多个边界,如图 1-2 所示。

图 1-2 比较同一个算法在不同参数作用下的预测结果

在图 1-2a 中,算法过度敏感,它把数据中的随机波动错误地当成持久模式,这就是常说的过拟合问题。过拟合模型对当前数据有着很高的预测准确度,但是对未知数据的预测准确度较差,也就是说,过拟合模型的泛化能力不强。

相反,在图 1-2c 中,算法过于愚钝,它忽视了数据中的基本模式,这就是欠拟合问题。欠拟合模型很可能会忽视数据中的重要趋势,这会导致模型对当前数据和未知数据的预测准确度下降。

如果参数调得恰好合适,算法就能在识别主要趋势和忽视微小变化之间找到平衡,使最终得到的模型非常适合做预测,如图 1-2b 所示。

对于大多数模型而言,过拟合是常见问题。为了最大限度地减少预测误差,可能会增加预测模型的复杂度,从而导致出现如图 1-2a 所示的结果,即预测边界过度复杂。

控制模型整体复杂度的一种方法是,通过正则化引入惩罚参数。这个新参数会通过人为增大预测误差,对模型复杂度的增加进行惩罚,从而使算法同时考虑复杂度和准确度。使模型保持简单有助于提高模型的泛化能力。

1.4 评价模型

建好模型之后,必须对它进行评价。我们经常会使用一些评价指标来比较模型的预测准确度。对于如何定义和惩罚不同类型的预测误差,不同的评价指标各不相同。

接下来,我们将探讨 3 种常用的评价指标:预测准确率、混淆矩阵和均方根误差。根据学习目标的要求,有时甚至会设计新的评价指标,以便针对特定类型的误差进行惩罚和规避。所以,本书讲解的评价指标并非面面俱到。有关评价指标的更多例子,请参考附录 D。

1.4.1 分类指标

关于预测准确率,最简单的定义就是正确的预测所占的比例。回到表 1-1 的例子,对买鱼与否的预测准确率,可以这样表述:在预测某位顾客是否买鱼时,我们的模型在 90% 的时间里都是对的。虽然预测准确率这个指标很容易理解,但我们无法通过它得知预测误差是如何产生的。

混淆矩阵可以让我们进一步了解预测模型的优缺点。

从表 1-4 可知,虽然模型的总体分类准确率是 90%,但相比于对顾客买鱼的预测,它对不买鱼的预测更准确。此外,假正类型和假负类型的预测错误一样多,分别有 5 个错误。

表 1-4 混淆矩阵揭示了模型在预测买鱼与否时的准确度

在某些情况下,分辨预测错误的类型至关重要。以地震预测为例,假负类型的错误(即预测不会发生地震,实际上却发生了)所付出的代价要远高于假正类型的错误(即预测会发生地震,实际上却未发生)。

1.4.2 回归指标

由于回归预测使用连续值,因此误差一般被量化成预测值和实际值之差,惩罚随误差大小而不同。均方根误差是一个常用的回归指标,尤其可用于避免较大的误差:因为每个误差都取了平方,所以大误差就被放大了。这使得均方根误差对异常值极其敏感,对这些值的惩罚力度也更大。

1.4.3 验证

指标并不能完整地体现模型的性能。过拟合模型(有关内容请参考 1.3 节)在面对当前数据时表现良好,但是在面对新数据时可能表现得很糟糕。为了避免出现这种情况,必须使用合适的验证过程对模型进行评价。

验证是指评估模型对新数据的预测准确度。然而,在评估模型时,并不一定非要使用新数据,而是可以把当前的数据集划分成两部分:一部分是训练集,用来生成和调整预测模型;另一部分是测试集,用来充当新数据并评估模型的预测准确度。最好的模型,针对测试集所做的预测一定是最准确的。为了使验证过程行之有效,需要不带偏差地把数据点随机分派到训练集和测试集中。

然而,如果原始数据集很小,可能无法留出足够的数据来形成测试集,因为当用于训练模型的数据较少时,准确度无法得到保障。为了解决这个问题,有人提出了交叉验证这个方法:使用同一个数据集进行训练和测试。

交叉验证最大限度地利用了可用的数据,它把数据集划分成若干组,用来对模型进行反复测试。在单次迭代中,除了某一组以外,其他各组都被用来训练预测模型;然后,留下的那组被用来测试模型。这个过程重复进行,直到每一组都测试过模型,并且只测试过一次,如图 1-3 所示。

图 1-3 数据集的交叉验证过程。数据集被划分成 4 组,模型最终的预测准确度是 4 个结果的平均值

由于每次迭代用来做预测的数据各不相同,因此每次得到的预测结果都不同。综合考虑这些差异,就可以对模型的实际预测能力做出更为可靠的评估。对所有评估结果取平均值,即为预测准确度的最终评估值。

如果交叉验证结果表明模型的预测准确度较低,可以重新调整模型的参数或者重新处理数据。

1.5 小结

数据科学研究有 4 个关键步骤。

(1) 准备数据。

(2) 选择算法,为数据建立模型。

(3) 调整算法参数,优化模型。

(4) 根据准确度评价模型。

目录

  • 版权声明
  • 前言
  • 为何需要数据科学
  • 第 1 章 基础知识
  • 第 2 章 k 均值聚类
  • 第 3 章 主成分分析
  • 第 4 章 关联规则
  • 第 5 章 社会网络分析
  • 第 6 章 回归分析
  • 第 7 章 k 最近邻算法和异常检测
  • 第 8 章 支持向量机
  • 第 9 章 决策树
  • 第 10 章 随机森林
  • 第 11 章 神经网络
  • 第 12 章 A/B 测试和多臂老虎机
  • 附录 A 无监督学习算法概览
  • 附录 B 监督学习算法概览
  • 附录 C 调节参数列表
  • 附录 D 更多评价指标
  • 术语表
  • 关于作者