탄성 네트워크를 위한 그램 행렬 미리 계산

Beginner

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

소개

이 실험실에서는 가중된 샘플을 사용하여 ElasticNet 을 사용하면서 그램 행렬을 미리 계산하는 방법을 보여줍니다. 가중된 샘플을 사용하는 경우, 그램 행렬을 계산하기 전에 설계 행렬을 중심에 맞추고 가중치 벡터의 제곱근으로 다시 조정해야 함을 유의해야 합니다.

VM 팁

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

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

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

데이터셋 로드 및 샘플 가중치 생성

데이터셋을 로드하고 샘플 가중치를 생성하는 것으로 시작합니다. scikit-learn 의 make_regression 함수를 사용하여 100,000 개의 샘플을 가진 랜덤 회귀 데이터셋을 생성합니다. 그런 다음 로그정규 가중치 벡터를 생성하고, 이를 정규화하여 총 샘플 수에 합산되도록 합니다.

import numpy as np
from sklearn.datasets import make_regression

rng = np.random.RandomState(0)

n_samples = int(1e5)
X, y = make_regression(n_samples=n_samples, noise=0.5, random_state=rng)

sample_weight = rng.lognormal(size=n_samples)
## 샘플 가중치를 정규화합니다.
normalized_weights = sample_weight * (n_samples / (sample_weight.sum()))

가중 샘플을 사용한 그램 행렬 미리 계산

precompute 옵션과 함께 샘플 가중치를 사용하여 탄성 네트워크를 맞추려면 먼저 그램 행렬을 계산하기 전에 설계 행렬을 중심에 맞추고 정규화된 가중치로 조정해야 합니다. 각 특징 열의 가중 평균을 각 행에서 빼서 설계 행렬을 중심에 맞춥니다. 그런 다음, 해당 정규화된 가중치의 제곱근으로 각 행을 곱하여 중심에 맞춘 설계 행렬을 조정합니다. 마지막으로, 조정된 설계 행렬의 전치 행렬과의 내적을 취하여 그램 행렬을 계산합니다.

X_offset = np.average(X, axis=0, weights=normalized_weights)
X_centered = X - np.average(X, axis=0, weights=normalized_weights)
X_scaled = X_centered * np.sqrt(normalized_weights)[:, np.newaxis]
gram = np.dot(X_scaled.T, X_scaled)

탄성 네트워크 적합

이제 적합을 진행할 수 있습니다. 탄성 네트워크 추정자가 중심이 맞춰지지 않았음을 감지하고 우리가 전달한 그램 행렬을 버리는 것을 방지하기 위해 중심에 맞춘 설계 행렬을 fit에 전달해야 합니다. 그러나 조정된 설계 행렬을 전달하면 전처리 코드가 두 번째로 잘못 조정할 것입니다. 또한 정규화된 가중치를 fit 함수의 sample_weight 매개변수에 전달합니다.

from sklearn.linear_model import ElasticNet

lm = ElasticNet(alpha=0.01, precompute=gram)
lm.fit(X_centered, y, sample_weight=normalized_weights)

요약

이 실험에서는 가중 샘플을 사용하여 탄성 네트워크 (ElasticNet) 에서 그램 행렬을 미리 계산하는 방법을 보여주었습니다. 먼저 회귀 데이터셋을 로드하고, 로그정규 가중치 벡터를 생성하여 전체 샘플 수의 합으로 정규화했습니다. 그런 다음 설계 행렬을 중심에 맞추고 정규화된 가중치로 조정한 후 그램 행렬을 계산했습니다. 마지막으로 미리 계산된 그램 행렬과 정규화된 가중치를 사용하여 탄성 네트워크를 적합시켰습니다.