from sklearn.decomposition import PCA
pca = PCA(n_components=x.shape[1], whiten=False)
# 이미 정규화가 되어있기때문에 whiten False
# x.shape[1]은 열개수 =784. 축소 안한다?
pca.fit(x)
x_pca = pca.transform(x) # 하지만 결과는 기존 데이터와 똑같지는 않다.
### 주성분에 의해 설명되는 비율
sum(pca.explained_variance_ratio_) #99.99%
comp = [10, 20, 50, 100, 200]
for c in comp:
v = sum(pca.explained_variance_ratio_[:c])
#print('%3d개 주성분 : %.4f' % (c, v))
print(f'{c}개 주성분 :{v:.4f}')
# 10개 주성분 :0.4971
# 20개 주성분 :0.6533
# 50개 주성분 :0.8316
# 100개 주성분 :0.9184
# 200개 주성분 :0.9683
### 숫자 분류에 영향을 주는 두 특성으로 산점도 시각화
RFC = RandomForestClassifier(max_depth=10, n_jobs=-1)
RFC.fit(x, y)
pca_xy = np.where((-RFC.feature_importances_).argsort()<=1)[0]
# minus -> 가장 큰 숫자부터 index 출력
# argsort 결과가 0이라는 것은 가장 작은 숫자라는 의미, 즉 여기서는 가장 큰 숫자
# <=1 이므로 0번째, 1번째 index를 출력해준다.
pca_xy
# 633번, 687번 변수가 가장 중요한 변수이다.
매니폴드 학습
: 두 점 사이의 거리가 근거리에서는 유클리디안 직선 거리 이지만 원거리에서는 그렇지 않은 공간 -> 바르고 곧은 유클리디안 공간을 탐색
from sklearn.manifold import TSNE
tSNE = TSNE(n_components=2, learning_rate=300)
x_tSNE = tSNE.fit_transform(x_SVD)
from sklearn.decomposition import FastICA
ICA = FastICA(n_components=25, whiten=True)
x_ICA = ICA.fit_transform(x)