1.2 设计数据科学算法的流程
不同的学习系统通常都遵循相同的设计流程。它们首先获取知识库并从数据中选择相关的可解释特征,然后遍历一系列候选的学习算法并监测每一个算法的性能,最后对它进行评估,以衡量训练过程是否成功。
本节将更详细地叙述所有的设计步骤,如图1.9所示。
图1.9 模拟学习流程的框架
1.2.1 数据预处理
学习周期里的数据预处理相当于算法的知识库。为了使学习算法能够对未知数据做出更精确的决策,用户必须以最佳形式提供这种知识库。因此,数据可能需要许多的清洗与预处理(转换)。
1.数据清洗
大多数数据集都需要经历这个步骤,在这个步骤里需要去除数据中的错误、噪声和冗余。数据必须是准确、完整、可靠和无偏的,这是因为使用劣质的知识库可能产生如下许多的问题。
- 结论不精确、有偏。
- 错误率增加。
- 泛化能力降低,泛化能力是指模型在之前训练中未使用过的未知数据上表现良好的能力。
2.数据预处理
在这个步骤里,数据通过一些转换而变得一致且具体。在数据预处理前有许多不同的转换方法可供参考。
- 重命名(重标记):这表示将类别的值转换为数值,这是因为类别的值与某些学习算法一起使用是危险的,并且数字会在不同的值之间附加一个顺序。
- 改变尺度(归一化):将连续的数值转换或限制在某个范围内,通常是[−1,1]或[0,1]。
- 新特征:从现有的特征中合成新的特征。比如,肥胖因子=体重/身高。
1.2.2 特征选择
样本的解释特征性(输入变量)可能是非常庞大的,比如用户拿到一个输入,将它作为训练样本(观察数据/示例),并且d非常大。这种情形的一个例子是文档分类任务3,在这个任务里用户拿到10 000个不同的单词,而输入变量则是这些不同单词的出现频次。
这种数量巨大的输入变量可能是有问题的,有时候甚至是灾难性的,因为开发人员有很多的输入变量,却只有很少的训练样本来帮助他们进行学习。为了避免拥有大量输入变量这个问题(维度灾难),数据科学家用降维技术来选取输入变量的一个子集。比如,在文本分类任务中,可以采用以下方法。
- 提取相关的输入(如互信息方法)。
- 主成分分析(PCA)。
- 将相似的单词分组(聚类),这里用到了相似性度量。
1.2.3 模型选择
利用降维技术选择了一个合适的输入变量子集后,接下来就是模型选择了。选择合适的输入变量子集,将使得接下来的学习过程变得非常简单。
在这个步骤里,用户试图找到一个正确的模型来学习。
如果读者之前有过数据科学方面的经验,并曾经将学习方法应用到不同的领域和不同的数据当中,那么这部分内容会相对比较简单,因为这个步骤需要预先了解数据的样貌,以及知道什么样的假设是适合数据的本质的,并基于此来选择合适的学习方法。如果读者没有预备知识也没有关系,因为读者可以通过猜测和尝试不同参数的不同模型,并选择一个在测试集上表现最好的模型,来完成这个步骤。
此外,初始数据分析和数据可视化将会帮助你对数据的分布形式与性质做出更好的猜测。
1.2.4 学习过程
学习指的是用户用来选择最佳模型参数的优化指标。有以下不同的优化指标可以选择:
- 均方误差(MSE);
- 最大似然(ML)准则;
- 最大化后验概率(MAP)。
有些优化问题可能本身很难解决,但选择正确的模型和误差函数会使得情况有所改善。
1.2.5 评估模型
在这一步中,用户尝试测量模型在未知数据上的泛化误差。既然用户只有特定的数据而无法事先了解任何未知的数据,就可以通过在数据集里随机地选择一部分作为测试集,并且在训练过程中从不使用它,从而使得这部分数据充当未知的有效数据。有很多方法可用于评估所选模型的性能。
- 简单的留出(holdout)法,这种方法将数据简单地分为训练集和测试集。
- 其他更复杂的方法,如基于交叉验证和随机降采样的方法。
这一步的目的是比较在相同数据集上训练出来的不同模型的预测性能,并选择一个拥有最小的测试误差的模型,这个模型将会在未知数据上表现出较好的泛化误差。用户也可以用统计方法判断结果的显著性,以得到泛化误差更准确的信息。