728x90
SVD¶
사이킷런 TruncatedSVD 클래스를 이용한 변환¶
In [1]:
from sklearn.decomposition import TruncatedSVD, PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.preprocessing import StandardScaler
- iris
In [2]:
iris = load_iris()
iris_ftrs = iris.data
- SVD 변환 (스케일 전)
In [3]:
# 2개의 주요 component로 TruncatedSVD 변환
tsvd = TruncatedSVD(n_components=2)
tsvd.fit(iris_ftrs)
iris_tsvd = tsvd.transform(iris_ftrs)
# Scatter plot
# 2차원으로 TruncatedSVD 변환 된 데이터 표현 및 품종은 색깔로 구분
plt.scatter(x=iris_tsvd[:,0], y= iris_tsvd[:,1], c= iris.target)
plt.xlabel('TruncatedSVD Component 1')
plt.ylabel('TruncatedSVD Component 2')
Out[3]:
Text(0, 0.5, 'TruncatedSVD Component 2')
- PCA VS SVD
데이터 세트가 스케일링으로 데이터 중심이 동일해지면 사이킷런 SVD와 PCA는 동일한 변환을 수행합니다.
PCA는 밀집 행렬에 대한 변환만 가능
SVD는 희소 행렬에 대한 변화도 가능
In [4]:
# iris 데이터를 StandardScaler로 변환
scaler = StandardScaler()
iris_scaled = scaler.fit_transform(iris_ftrs)
# 스케일링된 데이터를 기반으로 TruncatedSVD 변환 수행
tsvd = TruncatedSVD(n_components=2)
tsvd.fit(iris_scaled)
iris_tsvd = tsvd.transform(iris_scaled)
# 스케일링된 데이터를 기반으로 PCA 변환 수행
pca = PCA(n_components=2)
pca.fit(iris_scaled)
iris_pca = pca.transform(iris_scaled)
# TruncatedSVD 변환 데이터를 왼쪽에, PCA변환 데이터를 오른쪽에 표현
fig, (ax1, ax2) = plt.subplots(figsize=(9,4), ncols=2)
ax1.scatter(x=iris_tsvd[:,0], y= iris_tsvd[:,1], c= iris.target)
ax2.scatter(x=iris_pca[:,0], y= iris_pca[:,1], c= iris.target)
ax1.set_title('Truncated SVD Transformed')
ax2.set_title('PCA Transformed')
Out[4]:
Text(0.5, 1.0, 'PCA Transformed')
728x90
'Data Analytics with python > [Machine Learning ]' 카테고리의 다른 글
[Clustering] K-means (0) | 2023.02.14 |
---|---|
[Dimension Reduction] NMF 변환 (0) | 2023.02.13 |
[Dimension Reduction] LDA 변환 (0) | 2023.02.13 |
[Dimension Reduction] PCA components 기반 변환 (0) | 2023.02.13 |
[연관 규칙 데이터 정제] 데이터를 정제하여 apriori 알고리즘을 수행하기 위한 준비 (0) | 2023.02.03 |
댓글