Scikit - learn におけるカーネル近似手法

Machine LearningMachine LearningBeginner
オンラインで実践に進む

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このチュートリアルでは、scikit-learn でカーネル近似手法を使用するプロセスを案内します。

サポートベクターマシン (SVM) などのカーネル手法は、非線形分類に強力な手法です。これらの手法は、入力データを高次元特徴空間にマッピングするカーネル関数の概念に依存しています。ただし、明示的な特徴マッピングを使用すると、計算コストが高くなる場合があり、特に大規模なデータセットの場合です。カーネル近似手法は、カーネル特徴空間の低次元近似を生成することで解決策を提供します。

このチュートリアルでは、scikit-learn で利用可能ないくつかのカーネル近似手法を検討します。これには、ニストローム法、ラジアルベーシス関数 (RBF) カーネル近似、加算チカ二乗 (ACS) カーネル近似、歪チカ二乗 (SCS) カーネル近似、およびテンソルスケッチを使用した多項式カーネル近似が含まれます。これらの手法の使用方法を示し、その利点と制限について説明します。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、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

カーネル近似のためのニストローム法

ニストローム法は、低ランク近似を使用してカーネルを近似する一般的な手法です。この手法は、カーネルが評価されるデータセットをサブサンプリングします。デフォルトでは、RBF カーネルを使用しますが、任意のカーネル関数または事前計算済みのカーネル行列とともに使用できます。

カーネル近似にニストローム法を使用するには、次の手順に従います。

  1. 希望するコンポーネント数(つまり、特徴変換の目標次元数)でニストロームオブジェクトを初期化します。
from sklearn.kernel_approximation import Nystroem

n_components = 100
nystroem = Nystroem(n_components=n_components)
  1. ニストロームオブジェクトを学習データにフィットさせます。
nystroem.fit(X_train)
  1. ニストロームオブジェクトを使用して学習データとテストデータを変換します。
X_train_transformed = nystroem.transform(X_train)
X_test_transformed = nystroem.transform(X_test)

ラジアルベーシス関数 (RBF) カーネル近似

RBFSampler クラスは、ランダムキッチンシンクとしても知られる RBF カーネルの近似マッピングを実装しています。この手法を使うことで、線形 SVM やロジスティック回帰などの線形アルゴリズムを適用する前に、カーネルマップを明示的にモデル化することができます。

カーネル近似に RBFSampler を使うには、次の手順に従います。

  1. ガンマ(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 に用意されているいくつかのカーネル近似手法を検討しました。それには、ニストローム法、RBF カーネル近似、ACS カーネル近似、SCS カーネル近似、およびテンソルスケッチを用いた多項式カーネル近似が含まれます。これらの手法の使い方を学び、それらの利点と制限について議論しました。カーネル近似を活用することで、幅広い機械学習タスクに対して効果的にカーネル手法を適用できます。

OSZAR »