ガウス カーネル Python

Zeeshan Afridi 2023年6月21日
  1. Gaussian カーネルの概要
  2. Python の NumPy ライブラリ
  3. NumPy を使用してガウス カーネル行列を計算する
ガウス カーネル Python

このチュートリアルでは、ガウス カーネルについて説明し、NumPy ライブラリを使用して Python でガウス カーネル行列を計算する方法を示します。

Gaussian カーネルの概要

ガウス カーネルは、さまざまな機械学習アルゴリズムで使用される一般的な関数です。 これは、放射基底関数 (RBF) カーネルとしても知られています。

ガウス カーネルは、2つの入力 (xy) を受け取り、2つの入力間の類似性を示す値を返す関数です。

ガウス カーネルは、サポート ベクター マシン (SVM) やその他の教師あり学習アルゴリズムでよく使用されます。 カーネル関数は次のように定義されます。

K(x, y) = e^-{(\frac{||x-y||^{2}}{2\sigma^2})}

ここで ||x-y|| xy の間のユークリッド距離、sigma はガウス関数の width を制御するパラメーターです。

ガウス カーネルは正定関数であり、常に正の数を返します。 このプロパティは、アルゴリズムが決定境界から離れたポイントにペナルティを課すことができるため、多くの機械学習アルゴリズムで役立ちます。

Python の NumPy ライブラリ

NumPy ライブラリは、Python で数値演算を実行するための最適なツールです。 さらに、科学技術計算に理想的な選択肢となる幅広い機能を提供します。

NumPy の主な機能には次のようなものがあります。

  1. 強力な N 次元配列オブジェクト。
  2. 高度な(ブロードキャスト)機能。
  3. C/C++ と Fortran コードを統合するためのツール。
  4. 線形代数、フーリエ変換、および乱数機能。

NumPy は無料でオープンソースであり、そのコミュニティは活発で協力的です。 その結果、Python 用の強力な数値計算ライブラリを探している人にとっては優れた選択肢です。

Python での科学計算には Numpy ライブラリを使用できます。 高パフォーマンスの多次元配列オブジェクトと、これらの配列を操作するためのツールを提供します。

また、Python での数値解析や機械学習にも使用できます。 また、有名な Panda のライブラリの基礎であり、人気のある SciPy ライブラリの基礎でもあります。

NumPy を使用してガウス カーネル行列を計算する

Numpy では、Gaussian 関数は Gaussian Kernel 関数を介して実装されています。 この関数は、2つの配列を入力として受け取ります。 最初の配列は標準の通常の配列で、2 番目の配列は重みの行列です。

Gaussian Kernel からの出力は、結果の行列です。 ガウス カーネル マトリックスは、3 x 3 マトリックスと 9 数の配列です。

たとえば、数値は w_0w_1w_2w_3epsilonsigmagammakappa のようになります。

ガウス カーネル マトリックスは、ガウス プロセスの結果を近似するために使用されるマトリックスです。 これは、次の 2つの行列の積で構成されます。

  1. データマトリックス。
  2. 共分散行列の逆行列。

データ行列は、ガウス過程で使用されるデータ ポイントの行列です。 共分散行列の逆行列は、データの不確実性を推定するために使用される行列です。

ガウス カーネル行列を計算するには、まずデータ行列の積と共分散行列の逆行列を計算する必要があります。 NumPy ライブラリを使用して実行できます。

NumPy 関数 pdist を使用してガウス カーネル行列を計算できます。 この関数は、データ ポイントの配列を取り、それらの間のペアごとの距離を計算します。

次に、指数関数を使用して、データ ポイントの各ペアのガウス カーネルを計算できます。

ガウス カーネル行列は、次元 n x n の正方行列です。ここで、n はデータ ポイントの数です。 行列の要素は、データ ポイント間のペアごとの距離です。

コード例:

import numpy as np
import scipy.stats as st


def gkern(kernlen=21, nsig=3):
    """Returns a 2D Gaussian kernel."""

    x = np.linspace(-nsig, nsig, kernlen + 1)
    kern1d = np.diff(st.norm.cdf(x))
    kern2d = np.outer(kern1d, kern1d)
    return kern2d / kern2d.sum()


gkern(5, 2.5) * 273

出力:

array([[ 1.0278445 ,  4.10018648,  6.49510362,  4.10018648,  1.0278445 ],
       [ 4.10018648, 16.35610171, 25.90969361, 16.35610171,  4.10018648],
       [ 6.49510362, 25.90969361, 41.0435344 , 25.90969361,  6.49510362],
       [ 4.10018648, 16.35610171, 25.90969361, 16.35610171,  4.10018648],
       [ 1.0278445 ,  4.10018648,  6.49510362,  4.10018648,  1.0278445 ]])

ガウス カーネルは、偏微分方程式を解くための正規化された動径基底関数です。 Numpy では、ガウス カーネルは 2 次元の NumPy 配列で表されます。

2 次元配列は、カーネル マトリックスと呼ばれます。 ガウス カーネル行列は、NumPy 配列で np.exp(x) 関数を使用して取得できます。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn