가우스 커널 파이썬

Zeeshan Afridi 2023년6월21일
  1. 가우시안 커널 개요
  2. Python의 NumPy 라이브러리
  3. NumPy를 사용하여 가우스 커널 행렬 계산
가우스 커널 파이썬

이 튜토리얼은 가우스 커널에 대해 설명하고 NumPy 라이브러리를 사용하여 Python에서 가우스 커널 행렬을 계산하는 방법을 보여줍니다.

가우시안 커널 개요

가우시안 커널은 다양한 기계 학습 알고리즘에서 널리 사용되는 함수입니다. RBF(Radial Basis Function) 커널이라고도 합니다.

가우시안 커널은 두 개의 입력(xy)을 취하고 두 입력 사이의 유사성을 나타내는 값을 반환하는 함수입니다.

Gaussian 커널은 SVM(Support Vector Machines) 및 기타 지도 학습 알고리즘에서 자주 사용됩니다. 커널 함수는 다음과 같이 정의됩니다.

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

여기서 ||x-y||xy 사이의 유클리드 거리이고 시그마는 가우시안 함수의 을 제어하는 매개변수입니다.

가우시안 커널은 항상 양수를 반환하는 양의 정부호 함수입니다. 이 속성은 알고리즘이 결정 경계에서 멀리 떨어진 지점에 벌점을 부과할 수 있도록 하므로 많은 기계 학습 알고리즘에서 유용합니다.

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 함수를 통해 구현됩니다. 이 함수는 두 개의 배열을 입력으로 사용합니다. 첫 번째 배열은 표준 일반 배열이고 두 번째 배열은 가중치 행렬입니다.

Gaussian Kernel의 출력은 결과의 행렬입니다. 가우스 커널 행렬은 3 x 3 행렬과 9 숫자의 배열입니다.

예를 들어 숫자는 w_0, w_1, w_2, w_3, 엡실론, 시그마, 감마카파와 같습니다.

가우시안 커널 행렬은 가우시안 프로세스의 결과를 근사화하는 데 사용되는 행렬입니다. 두 행렬의 곱으로 구성됩니다.

  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에서 Gaussian 커널은 2차원 NumPy 배열로 표현됩니다.

2차원 배열을 커널 매트릭스라고 합니다. 가우스 커널 행렬은 NumPy 배열에서 np.exp(x) 함수를 사용하여 얻을 수 있습니다.

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