소개
이 실습에서는 scikit-learn 라이브러리를 사용하여 차원 축소에서 랜덤 투영을 탐색합니다. 랜덤 투영은 샘플 간의 쌍대 거리를 유지하면서 데이터의 차원을 줄이는 데 사용할 수 있는 기술입니다. 이는 머신 러닝 알고리즘의 계산 속도를 높이고 메모리 사용량을 줄이는 데 유용할 수 있습니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습용 Jupyter Notebook에 접근합니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
필요한 라이브러리 가져오기
이 실습에 필요한 라이브러리를 가져오는 것으로 시작해 보겠습니다.
import numpy as np
from sklearn import random_projection
랜덤 데이터 생성
다음으로, 차원 축소에 사용할 랜덤 데이터를 생성해 보겠습니다.
X = np.random.rand(100, 10000)
여기서 100 개의 샘플과 10,000 개의 특징을 가진 2 차원 배열 X를 생성합니다. 이것이 우리의 원래 고차원 데이터가 될 것입니다.
가우시안 랜덤 투영
이제 가우시안 랜덤 투영을 적용하여 데이터의 차원을 줄여 보겠습니다.
transformer = random_projection.GaussianRandomProjection()
X_new = transformer.fit_transform(X)
이 단계에서 GaussianRandomProjection 클래스의 인스턴스를 생성하고 데이터 X에 맞춥니다. 그런 다음 fit_transform 메서드를 호출하여 변환을 적용합니다. 결과는 X_new 변수에 저장됩니다.
희소 랜덤 투영
다음으로, 희소 랜덤 투영이라는 다른 유형의 랜덤 투영을 시도해 보겠습니다.
transformer = random_projection.SparseRandomProjection()
X_new = transformer.fit_transform(X)
여기서 SparseRandomProjection 클래스의 인스턴스를 생성하고 fit_transform 메서드를 사용하여 데이터 X에 적용합니다. 결과는 X_new 변수에 저장됩니다.
역변환
랜덤 투영 변환기는 투영 행렬의 역행렬을 계산할 수 있는 옵션을 제공합니다. 투영된 데이터에 역변환을 적용하여 이 기능을 살펴보겠습니다.
transformer = random_projection.SparseRandomProjection(compute_inverse_components=True)
X_new = transformer.fit_transform(X)
## 역변환 계산
X_new_inversed = transformer.inverse_transform(X_new)
이 단계에서 compute_inverse_components 매개변수를 True로 설정한 SparseRandomProjection 클래스의 인스턴스를 생성합니다. 그런 다음 변환기를 데이터 X에 맞추고 변환을 적용합니다. 마지막으로, 투영된 데이터 X_new에 inverse_transform 메서드를 호출하여 역변환을 계산합니다.
검증
역변환의 정확성을 검증하기 위해 원본 데이터 X를 역변환 결과와 비교할 수 있습니다.
X_new_again = transformer.transform(X_new_inversed)
np.allclose(X_new, X_new_again)
여기서, 역변환된 데이터 X_new_inversed에 변환을 적용하고, np.allclose 함수를 사용하여 원래 투영된 데이터 X_new와 같은지 확인합니다.
요약
이 실습에서는 scikit-learn 라이브러리를 사용하여 차원 축소를 위한 랜덤 투영을 수행하는 방법을 배웠습니다. 가우시안 랜덤 투영과 희소 랜덤 투영 기법을 모두 탐색했습니다. 또한, 투영된 데이터의 역변환을 계산하여 원본 데이터를 복구하는 방법을 배웠습니다. 랜덤 투영은 머신 러닝 작업에서 고차원 데이터의 차원을 줄이는 데 유용한 도구가 될 수 있습니다.