使用 Python 进行高斯过程分类

高斯过程分类器是一种分类机器学习算法。

高斯过程是对高斯概率分布的推广,可用作用于分类和回归的复杂非参数机器学习算法的基础。

它们是一种核模型,类似于 SVM,与 SVM 不同的是,它们能够预测高度校准的类别成员概率,尽管选择和配置核心使用的核可能具有挑战性。

在本教程中,您将了解高斯过程分类器这一分类机器学习算法。

完成本教程后,您将了解:

  • 高斯过程分类器是一种非参数算法,可应用于二元分类任务。
  • 如何使用 Scikit-Learn 拟合、评估和预测高斯过程分类器模型。
  • 如何在给定数据集上调整高斯过程分类器算法的超参数。

让我们开始吧。

Gaussian Processes for Classification With Python

使用 Python 进行高斯过程分类
照片由 Mark Kao 拍摄,保留部分权利。

教程概述

本教程分为三个部分;它们是:

  1. 高斯过程分类
  2. 使用 Scikit-Learn 的高斯过程
  3. 调整高斯过程超参数

高斯过程分类

高斯过程,简称 GP,是对 高斯概率分布(例如钟形函数)的推广。

高斯概率分布函数总结了随机变量的分布,而高斯过程总结了函数的属性,例如函数参数。因此,您可以将高斯过程视为比高斯函数高一个抽象或间接的层次。

高斯过程是对高斯概率分布的推广。概率分布描述的是标量或向量(对于多元分布)的随机变量,而随机过程则控制函数的属性。

— 第 2 页,《高斯过程机器学习》,2006 年。

高斯过程可用作分类预测建模的机器学习算法。

高斯过程是一种核方法,类似于 SVM,但它们能够预测高度校准的概率,而 SVM 不能。

高斯过程需要指定一个核来控制示例之间的关系;具体来说,它定义了数据的协方差函数。这被称为潜在函数或“琐碎”函数。

潜在函数 f 起着琐碎函数的作用:我们不直接观测 f 的值(我们只观测输入 X 和类别标签 y),而且我们并不特别关心 f 的值……

— 第 40 页,《高斯过程机器学习》,2006 年。

使用核函数对示例进行分组的方式控制着模型如何“感知”这些示例,因为它假定彼此“接近”的示例具有相同的类别标签。

因此,测试模型不同的核函数以及复杂核函数不同的配置非常重要。

……协方差函数是高斯过程预测器的关键组成部分,因为它包含了我们对希望学习的函数的假设。

— 第 79 页,《高斯过程机器学习》,2006 年。

它还需要一个链接函数来解释内部表示并预测类别成员的概率。可以使用逻辑函数,从而可以对二元分类的 二项概率分布 进行建模。

对于二元判别情况,一个简单的想法是使用响应函数(链接函数的逆函数)将回归模型的输出转换为类别概率,该函数将参数“压缩”到 [0, 1] 范围内(参数可以位于 (−inf, inf) 域),从而确保有效的概率解释。

— 第 35 页,《高斯过程机器学习》,2006 年。

高斯过程和高斯过程分类是一个复杂的主题。

要了解更多信息,请参阅书籍

使用 Scikit-Learn 的高斯过程

高斯过程分类器可在 scikit-learn Python 机器学习库中通过 GaussianProcessClassifier 类 使用。

该类允许您通过“kernel”参数指定要使用的核,默认为 1 * RBF(1.0),即 RBF 核。

在指定了核之后,模型将尝试根据训练数据集最佳配置该核。

这通过设置“optimizer”(优化器的迭代次数“max_iter_predict”),以及为了克服局部最优而执行此优化过程的重复次数“n_restarts_optimizer”来控制。

默认情况下,执行一次优化运行,可以通过将“optimize”设置为 None 来关闭此功能。

我们可以通过一个实际示例来演示高斯过程分类器。

首先,让我们定义一个合成分类数据集。

我们将使用 make_classification() 函数 创建一个包含 100 个样本的数据集,每个样本有 20 个输入变量。

以下示例创建并总结了数据集。

运行示例创建数据集并确认数据集的行数和列数。

我们可以使用 RepeatedStratifiedKFold 类 通过重复分层 k 折交叉验证来拟合和评估高斯过程分类器模型。我们将在测试环境中进行 10 折和 3 次重复。

我们将使用默认配置。

下面列出了在合成二元分类任务上评估高斯过程分类器模型的完整示例。

运行该示例,将在合成数据集上评估高斯过程分类器算法,并报告三次 10 折交叉验证重复的平均准确率。

鉴于学习算法的随机性,您的具体结果可能会有所不同。可以尝试运行几次示例。

在这种情况下,我们可以看到该模型达到了约 79.0% 的平均准确率。

我们可以决定使用高斯过程分类器作为最终模型,并对新数据进行预测。

这可以通过在所有可用数据上拟合模型管道并调用 predict() 函数来完成,将新数据行传入。

我们可以在下面列出的完整示例中演示这一点。

运行示例后,模型将被拟合,并对新数据行进行类别标签预测。

接下来,我们可以看看如何配置模型超参数。

调整高斯过程超参数

高斯过程分类器方法的超参数必须针对您的特定数据集进行配置。

也许最重要的超参数是通过“kernel”参数控制的核。scikit-learn 库提供了许多内置的核函数可供使用。

也许一些更常见的例子包括:

  • RBF
  • DotProduct
  • Matern
  • RationalQuadratic
  • WhiteKernel

您可以在此处了解有关该库提供的核的更多信息

我们将使用这些常见的核函数,默认参数,来评估高斯过程分类器的性能。

下面的示例使用我们定义的网格值的 GridSearchCV 类来演示这一点。

运行示例将使用重复交叉验证评估每种配置组合。

鉴于学习算法的随机性,您的具体结果可能会有所不同。尝试运行几次示例。

在这种情况下,我们可以看到 RationalQuadratic 核的性能有所提升,准确率达到了约 91.3%,而上一节中 RBF 核的准确率为 79.0%。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

书籍

API

文章

总结

在本教程中,您了解了高斯过程分类器这一分类机器学习算法。

具体来说,你学到了:

  • 高斯过程分类器是一种非参数算法,可应用于二元分类任务。
  • 如何使用 Scikit-Learn 拟合、评估和预测高斯过程分类器模型。
  • 如何在给定数据集上调整高斯过程分类器算法的超参数。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

发现 Python 中的快速机器学习!

Master Machine Learning With Python

在几分钟内开发您自己的模型

...只需几行 scikit-learn 代码

在我的新电子书中学习如何操作
精通 Python 机器学习

涵盖自学教程端到端项目,例如
加载数据可视化建模调优等等...

最终将机器学习带入
您自己的项目

跳过学术理论。只看结果。

查看内容

对“使用 Python 进行高斯过程分类”的 16 条回复

  1. Anthony The Koala 2020年10月2日 下午3:29 #

    尊敬的Jason博士,
    您能否详细说明用于网格搜索的字典?
    在上面的代码中,grid 定义为:

    1*RBF(), 1*DotProduct() 是什么意思?是的,我知道 RBF 和 DotProduct 是代码前面定义的函数。
    但是当我打印 grid 时,我得到的是看起来不像定义的:

    之前,例如 RBF

    当你打印 grid 时,你会得到额外的信息,例如 1**2*RBF,参数设置为 length_score = 1. 。这些额外的信息从何而来?

    总而言之
    在网格中设置 RBF 时,它的含义是什么?

    打印 grid 时,您会获得额外信息

    谢谢你,
    悉尼的Anthony

  2. shashank 2020年10月4日 上午3:18 #

    嘿,感谢这篇信息丰富的博客
    我非常喜欢它,学到了很多东西

  3. DIPTENDU ROY 2020年10月13日 下午8:24 #

    尊敬的Jason博士,

    您在这里展示了一个使用 scikit learn 的高斯过程回归模块进行的分类问题。您能否详细介绍一个使用相同 scikit-learn 模块进行回归的项目,并附带代码?

  4. Amelie 2020年12月11日 上午9:22 #

    嗨,Jason先生,
    我们能用高斯过程进行时间序列聚类吗?
    如果可能,您能否解释一下如何操作?
    谢谢。

  5. Ron 2021年1月18日 下午11:36 #

    嗨,Jason,

    请查看这篇文章:https://medium.com/ai-in-plain-english/gaussian-processes-for-classification-cdd6e25a37e0
    没有给您任何署名。这是对您这篇博文的完全复制。

    • Jason Brownlee 2021年1月19日 上午6:37 #

      这太令人失望了。而且非常普遍。有些人不知耻。

  6. SULAIMAN KHAN 2021年2月4日 下午5:56 #

    如何创建用于多类问题的高斯过程?

  7. Ono Teas 2021年8月26日 晚上8:34 #

    我们能否为多类问题利用二项感知概率?尤其是在类别数量对于不同样本不同时。

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。