-
sklearn-03 preprocessing 3 dimensionality reduction머신러닝/sklearn 2023. 5. 7. 16:37
1. dimensionality reduction
차원의 축소는 차원이 많아지면 많아질수록 공간의 부피가 데이터에 비해 너무 빠르게 증가하기 때문에 사용가능한 데이터가 희박해지기 때문에 사용한다.
따라서 차원의 축소를 하면 데이터의 밀도를 높일 수 있고 사람이 이해하기 쉬워진다는 장점이 있다.
차원 축소를 하면 원본 데이터로부터 정보 손실이 발생하기 때문에 정보 손실을 최소화 하면서 저차원으로 잘 나타내는 것이 중요하다.
2. 차원 축소하기
from sklearn.datasets import load_digits digits = load_digits()
필요한 데이터셋을 불러온다.
data = digits.data label = digits.target print(data[0]) print(label[0]) [ 0. 0. 5. 13. 9. 1. 0. 0. 0. 0. 13. 15. 10. 15. 5. 0. 0. 3. 15. 2. 0. 11. 8. 0. 0. 4. 12. 0. 0. 8. 8. 0. 0. 5. 8. 0. 0. 9. 8. 0. 0. 4. 11. 0. 1. 12. 7. 0. 0. 2. 14. 5. 10. 12. 0. 0. 0. 0. 6. 13. 10. 0. 0. 0.] 0
데이터와 라벨을 가지고온다.
data[0].reshape(8,-1) array([[ 0., 0., 5., 13., 9., 1., 0., 0.], [ 0., 0., 13., 15., 10., 15., 5., 0.], [ 0., 3., 15., 2., 0., 11., 8., 0.], [ 0., 4., 12., 0., 0., 8., 8., 0.], [ 0., 5., 8., 0., 0., 9., 8., 0.], [ 0., 4., 11., 0., 1., 12., 7., 0.], [ 0., 2., 14., 5., 10., 12., 0., 0.], [ 0., 0., 6., 13., 10., 0., 0., 0.]])
-1은 컴퓨터가 알아서 값을 지정해주는것이 8*8 구조로 바꿔준다.
plt.imshow(data[0].reshape(8,8)) #maplotlib 그림그리기 print('label:{}'.format(label[0])) label:0
8*8 그림을 그린다.
from sklearn.decomposition import PCA pca = PCA(n_components=2)
pca 주성분 분석은 차원 축소 기법 중 하나로 기존의 변수들을 조합하여 새로운 주성분(PC)들을 만들어 낸다.
예를 들어 3차원 데이터가 있고 PC1이 73%, PC2가 17%, PC3가 10%일 때 차원을 줄이는 두가지 방법이 있다.
1. 데이터 특징의 90퍼센트를 살리며 PC1, PC2를 선택하여 3차원에서 2차원으로 축소한다.
2. 데이터 특징의 73퍼센트를 살리며 PC1을 선택하여 3차원에서 1차원으로 축소한다.
new_data = pca.fit_transform(data)
데이터의 주성분을 찾아 차원을 2차원으로 축소한다.
print('원본데이터의 차원\n{}'.format(data.shape)) print('바뀐뀐데이터의 차원\n{}'.format(new_data.shape)) 원본데이터의 차원 (1797, 64) 바뀐뀐데이터의 차원 (1797, 2)
차원이 축소된것을 볼 수 있다.
plt.scatter(new_data[:,0],new_data[:,1],c=label,linewidth=1,edgecolor='k')
데이터를 축소하여 밀도가 높아진것을 확인할 수 있다.
'머신러닝 > sklearn' 카테고리의 다른 글
sklearn-06 classification 1 logistic regression (0) 2023.05.10 sklearn-04 preprocessing 4 categorical variable to numeric variable (0) 2023.05.07 sklearn-02 preprocessing 2 sampling (0) 2023.05.07 sklearn-05 모델 평가 지표 (0) 2023.05.04