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

우수과제 1 : 최혜빈

1. PCA의 과정

import numpy as np
import numpy.linalg as lin
import matplotlib.pyplot as plt
import pandas as pd
import random

#   기본 모듈들을 불러와 줍니다
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의 값이 이렇게 있네요
X = np.stack((x1,x2,x3),axis=0)

#   설명변수들을 하나의 행렬로 만들어 줍니다
X = pd.DataFrame(X.T,columns=['x1','x2','x3'])
X

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

  1. 먼저 PCA를 시작하기 전에 항상!!!!!! 데이터를 scaling 해주어야 해요

를 참고하시면 도움이 될거에요

2. 공분산 행렬 구하기

를 참고하면 도움이 됩니다.

3. 고유값과 고유벡터 구하기

4. 고유값 분해의 곱으로 원래 공분산 행렬을 구하

를 참고해서 행렬끼리 곱하시면 됩니다.

5. 고유 벡터 축으로 값을 변환

2. PCA 구현

3. Sklearn과 비교

4. MNIST data에 적용

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

ML 기법 적용

  • train_test_split을 이용해 train test 비율을 0.8, 0.2로 분리하기

  • PCA를 이용하여 mnist 차원축소 후 학습

먼저 주성분 개수를 정하기 위해

  1. Elbow point : 곡선의 기울기가 급격히 감소하는 지점

  2. Kaiser’s Rule : 고유값 1 이상의 주성분들

  3. 누적설명률이 70%~80% 이상인 지 이 세가지 확인!

먼저 randomforest 모델을 사용했습니다.

SVM모델

Last updated

Was this helpful?