Scikit-learn 中的核近似技术

Machine LearningMachine LearningBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将指导你完成在 scikit-learn 中使用核近似技术的过程。

核方法,如支持向量机(SVM),是用于非线性分类的强大技术。这些方法依赖于核函数的概念,该函数将输入数据映射到高维特征空间。然而,处理显式特征映射在计算上可能很昂贵,尤其是对于大型数据集。核近似方法通过生成核特征空间的低维近似来提供解决方案。

在本教程中,我们将探索 scikit-learn 中可用的几种核近似技术,包括 Nystroem 方法、径向基函数(RBF)核近似、加性卡方(ACS)核近似、偏斜卡方(SCS)核近似以及使用张量草图的多项式核近似。我们将演示如何使用这些技术,并讨论它们的优点和局限性。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,可以随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/kernel_approximation("Kernel Approximation") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/kernel_approximation -.-> lab-71134{{"Scikit-learn 中的核近似技术"}} ml/sklearn -.-> lab-71134{{"Scikit-learn 中的核近似技术"}} end

用于核近似的 Nystroem 方法

Nystroem 方法是一种使用低秩近似来近似核的通用技术。它对评估核的数据集进行子采样。默认情况下,它使用 RBF 核,但也可以与任何核函数或预先计算的核矩阵一起使用。

要使用 Nystroem 方法进行核近似,请遵循以下步骤:

  1. 使用所需的组件数量(即特征变换的目标维度)初始化 Nystroem 对象。
from sklearn.kernel_approximation import Nystroem

n_components = 100
nystroem = Nystroem(n_components=n_components)
  1. 将 Nystroem 对象拟合到你的训练数据。
nystroem.fit(X_train)
  1. 使用 Nystroem 对象变换你的训练数据和测试数据。
X_train_transformed = nystroem.transform(X_train)
X_test_transformed = nystroem.transform(X_test)

径向基函数(RBF)核近似

RBFSampler 类实现了 RBF 核的近似映射,也称为随机厨房水槽(Random Kitchen Sinks)。这种技术使我们能够在应用线性算法(如线性支持向量机或逻辑回归)之前,显式地对核映射进行建模。

要使用 RBFSampler 进行核近似,请遵循以下步骤:

  1. 使用所需的 gamma 值(RBF 核的参数)和组件数量初始化 RBFSampler 对象。
from sklearn.kernel_approximation import RBFSampler

gamma = 0.1
n_components = 100
rbf_sampler = RBFSampler(gamma=gamma, n_components=n_components)
  1. 将 RBFSampler 对象拟合到你的训练数据。
rbf_sampler.fit(X_train)
  1. 使用 RBFSampler 对象变换你的训练数据和测试数据。
X_train_transformed = rbf_sampler.transform(X_train)
X_test_transformed = rbf_sampler.transform(X_test)

加性卡方(ACS)核近似

ACS 核是一种用于直方图的核,常用于计算机视觉。AdditiveChi2Sampler 类为这个核提供了一种近似映射。

要使用 AdditiveChi2Sampler 进行核近似,请遵循以下步骤:

  1. 使用所需的样本数量(n)和正则化参数(c)初始化 AdditiveChi2Sampler 对象。
from sklearn.kernel_approximation import AdditiveChi2Sampler

n_samples = 1000
c = 1.0
additive_chi2_sampler = AdditiveChi2Sampler(n_samples=n_samples, sample_steps=2, sample_interval=2, sample_octave=2, c=c)
  1. 将 AdditiveChi2Sampler 对象拟合到你的训练数据。
additive_chi2_sampler.fit(X_train)
  1. 使用 AdditiveChi2Sampler 对象变换你的训练数据和测试数据。
X_train_transformed = additive_chi2_sampler.transform(X_train)
X_test_transformed = additive_chi2_sampler.transform(X_test)

偏斜卡方(SCS)核近似

SCS 核是指数化卡方核的一种变体,它允许对特征映射进行简单的蒙特卡罗近似。SkewedChi2Sampler 类为这个核提供了一种近似映射。

要使用 SkewedChi2Sampler 进行核近似,请遵循以下步骤:

  1. 使用所需的样本数量(n)和正则化参数(c)初始化 SkewedChi2Sampler 对象。
from sklearn.kernel_approximation import SkewedChi2Sampler

n_samples = 1000
c = 1.0
skewed_chi2_sampler = SkewedChi2Sampler(n_samples=n_samples, sample_steps=2, sample_interval=2, sample_octave=1, c=c)
  1. 将 SkewedChi2Sampler 对象拟合到你的训练数据。
skewed_chi2_sampler.fit(X_train)
  1. 使用 SkewedChi2Sampler 对象变换你的训练数据和测试数据。
X_train_transformed = skewed_chi2_sampler.transform(X_train)
X_test_transformed = skewed_chi2_sampler.transform(X_test)

通过张量草图进行多项式核近似

多项式核是一种常用的核函数,用于对特征之间的交互进行建模。PolynomialCountSketch 类提供了一种使用张量草图方法来近似此核的可扩展方法。

要使用 PolynomialCountSketch 进行核近似,请遵循以下步骤:

  1. 使用所需的次数(d)和组件数量初始化 PolynomialCountSketch 对象。
from sklearn.kernel_approximation import PolynomialCountSketch

degree = 3
n_components = 100
polynomial_count_sketch = PolynomialCountSketch(degree=degree, n_components=n_components)
  1. 将 PolynomialCountSketch 对象拟合到你的训练数据。
polynomial_count_sketch.fit(X_train)
  1. 使用 PolynomialCountSketch 对象变换你的训练数据和测试数据。
X_train_transformed = polynomial_count_sketch.transform(X_train)
X_test_transformed = polynomial_count_sketch.transform(X_test)

总结

核近似是一种强大的技术,它使我们能够高效地使用核方法,特别是对于大型数据集。在本教程中,我们探讨了 scikit-learn 中可用的几种核近似方法,包括 Nystroem 方法、RBF 核近似、ACS 核近似、SCS 核近似以及使用张量草图的多项式核近似。我们学习了如何使用这些技术,并讨论了它们的优缺点。通过利用核近似,我们可以有效地将核方法应用于广泛的机器学习任务。