Python을 이용한 차원 축소 실습 (2)
''' ? ''' 이 있는 부분을 채워주시면 됩니다¶
나는 내 스타일로 하겠다 하시면 그냥 구현 하셔도 됩니다!!
참고하셔야 하는 함수들은 링크 달아드렸으니 들어가서 확인해보세요
1. PCA의 과정
In [1]:
import numpy as np
import numpy.linalg as lin
import matplotlib.pyplot as plt
import pandas as pd
import random
# 기본 모듈들을 불러와 줍니다In [2]:
x1 = [95, 91, 66, 94, 68, 63, 12, 73, 93, 51, 13, 70, 63, 63, 97, 56, 67, 96, 75, 6]
x2 = [56, 27, 25, 1, 9, 80, 92, 69, 6, 25, 83, 82, 54, 97, 66, 93, 76, 59, 94, 9]
x3 = [57, 34, 9, 79, 4, 77, 100, 42, 6, 96, 61, 66, 9, 25, 84, 46, 16, 63, 53, 30]
# 설명변수 x1, x2, x3의 값이 이렇게 있네요In [3]:
In [4]:
In [5]:
Out[5]:
x1
x2
x3
0
95
56
57
1
91
27
34
2
66
25
9
3
94
1
79
4
68
9
4
5
63
80
77
6
12
92
100
7
73
69
42
8
93
6
6
9
51
25
96
10
13
83
61
11
70
82
66
12
63
54
9
13
63
97
25
14
97
66
84
15
56
93
46
16
67
76
16
17
96
59
63
18
75
94
53
19
6
9
30
In [6]:
Out[6]:
x1
x2
x3
0
95
56
57
1
91
27
34
2
66
25
9
3
94
1
79
4
68
9
4
1-1) 먼저 PCA를 시작하기 전에 항상 데이터를 scaling 해주어야 해요
In [7]:
In [8]:
Out[8]:
In [9]:
In [10]:
Out[10]:
1-2) 자 그럼 공분산 행렬을 구해볼게요
In [12]:
Out[12]:
1-3) 이제 고유값과 고유벡터를 구해볼게요
방법은 실습코드에 있어요!!
In [13]:
In [14]:
In [15]:
In [16]:
Out[16]:
In [17]:
In [18]:
Out[18]:
1-4) 자 이제 고유값 분해를 할 모든 준비가 되었어요 고유값 분해의 곱으로 원래 공분산 행렬을 구해보세요
In [19]:
Out[19]:
In [20]:
Out[20]:
1-5) 마지막으로 고유 벡터 축으로 값을 변환해 볼게요
함수로 한번 정의해 보았어요
In [21]:
Out[21]:
In [22]:
In [23]:
Out[23]:
In [24]:
Out[24]:
2. PCA 구현
위의 과정을 이해하셨다면 충분히 하실 수 있을거에요In [25]:
In [26]:
Out[26]:
3. sklearn 비교
In [27]:
In [28]:
Out[28]:
In [29]:
Out[29]:
In [30]:
Out[30]:
In [31]:
Out[31]:
4. MNIST data에 적용을 해보!
In [2]:
In [3]:
In [4]:
Out[4]:
In [5]:
In [6]:
Out[6]:
pixel0
pixel1
pixel2
pixel3
pixel4
pixel5
pixel6
pixel7
pixel8
pixel9
...
pixel774
pixel775
pixel776
pixel777
pixel778
pixel779
pixel780
pixel781
pixel782
pixel783
0
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0
4
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0
5 rows × 784 columnsIn [7]:
In [8]:
Out[8]:
pixel0
pixel1
pixel2
pixel3
pixel4
pixel5
pixel6
pixel7
pixel8
pixel9
...
pixel775
pixel776
pixel777
pixel778
pixel779
pixel780
pixel781
pixel782
pixel783
y
0
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0.0
1
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0.0
2
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0.0
3
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0.0
4
0
0
0
0
0
0
0
0
0
0
...
0
0
0
0
0
0
0
0
0
0.0
5 rows × 785 columns
지금까지 배운 여러 머신러닝 기법들이 있을거에요
4-1) train_test_split을 통해 데이터를 0.8 0.2의 비율로 분할 해 주시고요
4-2) PCA를 이용하여 mnist data를 축소해서 학습을 해주세요 / test error가 제일 작으신 분께 상품을 드리겠습니다 ^0^
특정한 틀 없이 자유롭게 하시면 됩니다!!!!!!!!!
1. train test split
In [9]:
In [10]:
In [11]:
In [43]:
In [56]:
2. 주성분 개수의 결정
elbow point (곡선의 기울기가 급격히 감소하는 지점)
kaiser's rule (고유값 1 이상의 주성분들)
누적설명률이 70%~80% 이상인 지점
In [13]:
누적설명률이 70%~80%인 지점
In [193]:
In [247]:
Out[247]:
In [226]:
In [243]:

elbow point
In [248]:


Kaiser's Rule
In [266]:
In [188]:
In [14]:
3. Modeling
In [15]:
Random Forest
Original Data
In [290]:
In [291]:
PCA Data
In [271]:
In [292]:
In [294]:
Logistic Regression
Original Data
In [295]:
In [296]:
In [307]:
In [308]:
In [338]:
In [340]:
Out[340]:
PCA Data
In [320]:
In [321]:
In [342]:
Out[342]:
Decision Tree
Original Data
In [309]:
In [310]:
In [311]:
In [313]:
PCA data
In [317]:
In [318]:
SVM
In [16]:
In [429]:
Out[429]:
In [431]:
Out[431]:
In [17]:
Out[17]:
In [18]:
Out[18]:
In [19]:
Out[19]:
XGBoost
In [323]:
In [324]:
In [325]:
In [326]:
LightGBM
Original Data
In [327]:
In [331]:
In [332]:
PCA Data
In [329]:
In [330]:
Stacking (CV)
PCA data
In [432]:
In [439]:
In [397]:
In [440]:
In [441]:
In [443]:
Out[443]:
In [446]:
Out[446]:
In [447]:
Out[447]:
Original Data
In [427]:
In [433]:
In [434]:
4. Summary
PCA Data
SVM - 0.9726
Stacking(lgbm+svm & svm) - 0.9594
Stacking(rf+lgbm+svm & svm) - 0.9583
LightGBM - 0.9494
Random Forest - 0.9409
Stacking(rf+lr+lgbm & lgbm) 0.9324
Logistic Regression - 0.9208
XGBoost -> 0.9091
Decision Tree - 0.8282
Original Data
LightGBM -> 0.9697
Random Forest- 0.9679
Stacking (rf+lgbm & lgbm) -> 0.9558
Logistic Regression- 0.9226
Decision Tree- 0.8713
Last updated
Was this helpful?