Spark权威指南(中文版)----第26章 分类

​Spark The Definitive Guide(Spark权威指南) 中文版。本书详细介绍了Spark2.x版本的各个模块,目前市面上最好的Spark2.x学习书籍!!!

扫码关注公众号:登峰大数据,阅读中文Spark权威指南(完整版),系统学习Spark大数据框架!

如果您觉得作者翻译的内容有帮助,请分享给更多人。您的分享,是作者翻译的动力

Spark权威指南(中文版)----第26章 分类

分类是根据输入特性预测标签、类别、类或离散变量的任务。与其他ML任务(例如回归)的关键区别在于,输出标签具有有限的可能值集(例如,三个类型值)。

26.1.用例

分类有很多用例,正如我们在第24章中讨论的那样。这里还有一些需要考虑的问题,可以作为在现实世界中使用分类的多种方法的补充。

预测信用风险

金融公司在向公司或个人提供贷款之前,可能会考虑许多因素(变量)。是否提供贷款是一个二元分类问题。

新闻分类

可以训练一种算法来预测新闻文章的主题(体育、政治、商业等)。

人类活动分类

通过从手机加速度计或智能手表等传感器收集数据,你可以预测一个人的活动。输出将是一个有限的类集合(例如,散步、睡觉、站立或跑步)。

26.2.不同类型的分类

在继续之前,让我们回顾几种不同类型的分类。

26.2.1.二元分类

最简单的分类示例是二元分类,其中只有两个标签可以预测。一个例子是欺诈分析,其中一个给定的交易可以分为欺诈或非欺诈;或电子邮件垃圾邮件,其中给定的电子邮件可以分类为垃圾邮件或非垃圾邮件。

26.2.2.多元分类

除了二进制分类之外,还有多元分类,即从超过两个不同的可能标签中选择一个标签。一个典型的例子是Facebook预测给定照片中的人,或者气象学家预测天气(下雨、晴天、多云等)。注意,总是有一组有限的类需要预测;而不是无限的类需要预测。这也叫做多项分类。

26.2.3.多标签分类

最后,还有多标签分类,其中给定的输入可以生成多个标签。例如,您可能希望根据图书本身的文本来预测图书的类型。虽然这可以是多类的,但它可能更适合多标签,因为一本书可能属于多种类型。多标签分类的另一个例子是识别图像中出现的对象的数量。注意,在本例中,输出预测的数量不一定是固定的,并且可能因图像而异。

26.3.MLlib中的分类模型

Spark有几个可用的模型来执行二元分类和多元分类。在Spark中可以使用以下模型进行分类:

  • Logistic regression 逻辑回归

  • Decision trees 决策树

  • Random forests 随机森林

  • Gradient-boosted trees 梯度提升树

Spark内置不支持进行多标签预测。为了训练一个多标签模型,您必须为每个标签训练一个模型并手动组合它们。一旦手动构建,就会有内置的工具支持度量这类模型(在本章末尾讨论)。

本章将介绍这些模型的基本知识,包括:

  • 一个简单的模型解释和它背后的知识

  • 模型超参数(初始化模型的不同方法)

  • 训练参数(影响模型训练方式的参数)

  • 预测参数(影响如何进行预测的参数)

您可以在ParamGrid中设置超参数和训练参数,正如我们在第24章中看到的那样。

26.3.1.模型的可伸缩性

在选择模型时,模型可伸缩性是一个重要的考虑因素。一般来说,Spark对训练大型机器学习模型有很好的支持(注意,这些都是大规模的;在单节点工作负载上,还有许多其他工具也表现良好)。表26-1是一个简单的模型可伸缩性记分卡,用于为您的特定任务找到最佳模型(如果可伸缩性是您的核心考虑因素)。实际的可伸缩性将取决于您的配置、机器大小和其他细节,但这应该是一个很好的启发。

Spark权威指南(中文版)----第26章 分类

我们可以看到,几乎所有这些模型都可以扩展到输入数据的大集合,并且正在进行进一步的扩展工作。之所以不限制训练实例的数量,是因为这些训练使用随机梯度下降和L-BFGS等方法。这些方法是专门为处理大量数据集而优化的,可以消除您希望学习的训练示例数量上可能存在的任何限制。

让我们开始看看分类模型加载一些数据:

Spark权威指南(中文版)----第26章 分类

提示

和我们的其他高级分析章节一样,这一章不能教你每一个模型的数学基础。参见ISL和ESL中的第4章来回顾分类。

26.4.逻辑回归

逻辑回归是最流行的分类方法之一。它是一种线性方法,将每个单独的输入(或特征)与特定的权重(这些权重是在训练过程中生成的)组合在一起,使用这些权重组合在一起的权重,得到属于特定分类的概率。这些权重很有用,因为它们很好地表示了特征的重要性;如果权重很大,可以假设该特征的变化对结果有显著影响(假设执行了标准化)。较小的权重意味着该特征不太重要。

26.4.1.模型超参数

模型超参数是决定模型本身基本结构的配置。以下超参数可用于逻辑回归:

  • family

可以是多元的(两个或多个不同的标签;多元分类)或二进制(只有两个不同的标签;二进制分类)。

  • elasticNetParam

从0到1的浮点值。该参数根据弹性网络正则化(两者的线性组合)指定L1和L2正则化的组合。你选择L1还是L2在很大程度上取决于你的具体用例,但一般规则如下:L1正则化(值为1)将在模型中创建稀疏性,因为某些特性权重将变为零(这对输出几乎没有影响)。因此,它可以作为一种简单的特征选择方法。另一方面,L2正则化(值为0)不会产生稀疏性,因为特定特征的相应权重只会趋向于零,而不会完全达到零。另一方面,L2正则化(值为0)不会产生稀疏性,因为特定特性的相应权重只会趋向于零,而不会完全达到零。

  • fitIntercept

值可以为false或者true。这个超参数决定是否匹配截距或者匹配在模型的输入和权重的线性组合中添加的任意数字。一般来说,如果我们没有对训练数据进行标准化,你会想要匹配截距。

  • regParam

一个大于等于0的值。这决定了目标函数中正则化项的权重。在这里选择一个值将再次成为我们数据集中噪声和维数的函数。在pipeline中,尝试各种值(例如,0、0.01、0.1、1)。

  • standardization

值可以为false或者true。是否在将输入传递到模型之前对其进行标准化。更多信息见第25章。

26.4.2.训练参数

训练参数用于指定我们如何执行训练。下面是逻辑回归的训练参数。

  • maxIter

停止前对数据的总迭代次数。更改这个参数可能不会对结果造成太大的影响,所以它不应该是您要调整的第一个参数。默认值是100。

  • tol

此值指定一个阈值,通过该阈值,参数的更改可以显示我们已经对权重进行了足够的优化,并且可以停止迭代。它让算法在maxIter迭代之前停止。默认值是1.0E-6。这也不应该是您要调优的第一个参数。

  • weightCol

权重列的名称,用于对某些行施加比其他行更大的权重。如果您对某个特定训练示例的重要性有其他度量方法,并且有与之相关的权重,那么这将是一个有用的工具。例如,您可能有10,000个示例,其中您知道有些标签比其他标签更准确。你可以给你知道正确的标签设置更大权重,而不是给你不知道正确的标签设置权重。

26.4.3.预测参数

这些参数有助于确定模型在预测时实际应该如何进行预测,但不影响训练。下面是逻辑回归的预测参数:

  • threshold

在0到1的范围内的double值。这个参数是预测给定类的概率阈值。您可以根据您的需求调整此参数,以平衡假阳性和假阴性。例如,如果一个错误的预测是昂贵的—您可能希望将它的预测threshold设置得非常高。

  • thresholds

这个参数允许您在使用多类分类时为每个类指定一个阈值数组。它的工作原理类似于前面描述的单个threshold(阈值)参数。

26.4.4.例子

下面是一个使用逻辑回归模型的简单例子。注意,我们没有指定任何参数,因为我们将利用默认值,并且我们的数据符合正确的列命名。实际上,您可能不需要更改许多参数:

Spark权威指南(中文版)----第26章 分类

一旦对模型进行了训练,您就可以通过查看系数和截距来获得关于模型的信息。这些系数对应于各个特征权重(每个特征权重乘以各自的特征来计算预测),而截距是斜体截距的值(如果我们在指定模型时选择匹配它)。查看系数有助于检查你建立的模型,并比较特征如何影响预测:

Spark权威指南(中文版)----第26章 分类

对于多项式模型(当前为二元分类),lrModel.coefficientMatrix和lrModel.interceptVector可用于求系数和截距。这些将返回表示值或每个给定分类的矩阵和向量类型。

26.4.5.模型摘要

逻辑回归提供了一个模型摘要,它提供了关于最终的、经过训练的模型的信息。这类似于我们在许多R语言机器学习包中看到的相同类型的概要。模型摘要目前仅适用于二元逻辑回归问题,但将来可能会添加多类摘要。通过二元摘要,我们可以得到模型自身的各种信息,包括ROC曲线下的面积、阈值f测度、精度、查全率、查全率阈值、ROC曲线。注意,对于曲线下的区域,没有考虑实例权重,因此,如果您想查看如何对权重更大的值执行操作,就必须手动执行。这可能会在未来的Spark版本中发生改变。您可以使用以下api查看摘要:

Spark权威指南(中文版)----第26章 分类

模型下降到最终结果的速度显示在objectiveHistory中。我们可以通过模型概要上的objectiveHistory来获取:

Spark权威指南(中文版)----第26章 分类

这是一个双精度数组,它指定了在每个训练迭代中,我们对目标函数的执行情况。这些信息有助于查看我们是否有足够的迭代,或者是否需要调优其他参数。

26.5.决策树

决策树是执行分类的较友好且可解释的模型之一,因为它们类似于人类经常使用的简单决策模型。例如,如果你必须预测某人是否会在有人提供冰淇淋时吃冰淇淋,一个好的特征可能是这个人是否喜欢冰淇淋。在伪代码中,if  person.like(“ice_cream”),他们将吃冰激凌;否则,他们就不会吃冰淇淋。决策树使用所有输入创建这种类型的结构,并在进行预测时遵循一组分支。这使得它成为一个很好的起点模型,因为它很容易推理,很容易检查,并且很少对数据结构做出假设。简而言之,它不是为了对函数建模而试图训练系数,而是简单地创建一个决策树,以便在预测时遵循。该模型还支持多类分类,并在两个不同的列中提供预测和概率输出。

虽然这种模式通常是一个良好的开端,但它确实付出了代价。它可能会出现对数据过拟合。我们的意思是,不受约束的,决策树将从一开始就基于每个训练示例创建一个路径。这意味着它对模型中的训练集中的所有信息进行编码。这很糟糕,因为这样模型就不能泛化到新的数据(您将看到较差的测试集预测性能)。然而,有许多方法可以通过限制分支结构(例如,限制其高度)来尝试控制模型,从而获得良好的预测能力。

请在公众号中阅读本章剩下的内容。

Spark权威指南(中文版)----第26章 分类