Scikit-learn 에서 커널 근사 기법

Beginner

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

소개

이 튜토리얼에서는 scikit-learn 에서 커널 근사 기술을 사용하는 방법을 안내합니다.

서포트 벡터 머신 (SVM) 과 같은 커널 방법은 비선형 분류에 강력한 기술입니다. 이러한 방법은 입력 데이터를 고차원 특징 공간으로 매핑하는 커널 함수의 개념에 의존합니다. 그러나 명시적인 특징 매핑을 사용하는 것은, 특히 대규모 데이터셋의 경우 계산적으로 비용이 많이 들 수 있습니다. 커널 근사 방법은 커널 특징 공간의 저차원 근사값을 생성하여 해결책을 제공합니다.

이 튜토리얼에서는 Nystroem 방법, Radial Basis Function(RBF) 커널 근사, Additive Chi Squared(ACS) 커널 근사, Skewed Chi Squared(SCS) 커널 근사, 그리고 Tensor Sketch 를 사용한 다항식 커널 근사를 포함하여 scikit-learn 에서 사용 가능한 여러 커널 근사 기술을 탐색할 것입니다. 이러한 기술을 사용하는 방법과 장단점에 대해 설명할 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근하십시오.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

커널 근사를 위한 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)

Radial Basis Function (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)

Additive Chi Squared (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)

Skewed Chi Squared (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)

요약

커널 근사는 특히 대규모 데이터셋에 대해 커널 기반 방법을 효율적으로 사용할 수 있도록 하는 강력한 기술입니다. 이 튜토리얼에서는 Nystroem 방법, RBF 커널 근사, ACS 커널 근사, SCS 커널 근사 및 텐서 스케치를 이용한 다항식 커널 근사를 포함하여 scikit-learn 에서 제공하는 여러 커널 근사 방법을 살펴보았습니다. 이러한 기술을 사용하는 방법과 장단점에 대해 배웠습니다. 커널 근사를 활용함으로써 다양한 머신 러닝 작업에 커널 기반 방법을 효과적으로 적용할 수 있습니다.