Python을 이용한 차원 축소 실습 (2)

''' ? ''' 이 있는 부분을 채워주시면 됩니다arrow-up-right

나는 내 스타일로 하겠다 하시면 그냥 구현 하셔도 됩니다!!

참고하셔야 하는 함수들은 링크 달아드렸으니 들어가서 확인해보세요

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. 주성분 개수의 결정

  1. elbow point (곡선의 기울기가 급격히 감소하는 지점)

  2. kaiser's rule (고유값 1 이상의 주성분들)

  3. 누적설명률이 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?