1. ์ฃผ์ฑ๋ถ ๋ถ์(PCA)
- ์๋ฏธ
- PCA(Principal Component Analysis) ๋ ์ฐจ์ ๊ฐ์, ํน์ง ์ถ์ถ, ๋ฐ์ดํฐ ์๊ฐํ, ๋ ธ์ด์ฆ ๊ฐ์์ ๊ฐ์ ๋ค์ํ ์์ฉ ๋ถ์ผ์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฐ์ฅ ์ ์ตํ ๊ธฐ๋ฅ์ ์๋ณํ๊ณ ์ค๋ณต ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๋ฉฐ ์ค์ํ ์ ๋ณด์ ์์ค์ ์ต์ํํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์์ถํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
2. PCA ์ํ๊ณผ ๊ด๋ จ๋ ๋จ๊ณ
- ๋ฐ์ดํฐ ์ค๋น: ํ๊ท ์ ๋นผ๊ณ ๊ฐ ๊ธฐ๋ฅ์ ํ์ค ํธ์ฐจ๋ก ๋๋์ด ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํํฉ๋๋ค. ์ด ๋จ๊ณ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ๋์ผํ ์ฒ๋์ ์๋์ง ํ์ธํฉ๋๋ค.
- ๊ณต๋ถ์ฐ ํ๋ ฌ ๊ณ์ฐ: ์ ๊ทํ๋ ๋ฐ์ดํฐ์ ๊ณต๋ถ์ฐ ํ๋ ฌ์ ๊ณ์ฐํฉ๋๋ค. ๊ณต๋ถ์ฐ ํ๋ ฌ์ ๋ฐ์ดํฐ ์ธํธ์ ์๋ก ๋ค๋ฅธ ๊ธฐ๋ฅ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค.
- ๊ณ ์ ๊ฐ ๋ฐ ๊ณ ์ ๋ฒกํฐ ๊ณ์ฐ: ๊ณต๋ถ์ฐ ํ๋ ฌ์ ๊ณ ์ ๊ฐ๊ณผ ํด๋น ๊ณ ์ ๋ฒกํฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๊ฐ ๊ณ ์ ๋ฒกํฐ๋ ์ฃผ์ฑ๋ถ์ ๋ํ๋ด๊ณ ํด๋น ๊ณ ์ ๊ฐ์ ํด๋น ๊ตฌ์ฑ ์์๊ฐ ์ค๋ช ํ๋ ๋ถ์ฐ์ ์์ ๋ํ๋ ๋๋ค.
- ์ฃผ์ฑ๋ถ ์ ํ: ๊ณ ์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ณ ์ ๋ฒกํฐ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค. ๋ฐ์ดํฐ์์ ๋๋ถ๋ถ์ ๋ถ์ฐ์ ์ค๋ช ํ๋ ์์ k ๊ณ ์ ๋ฒกํฐ(์ฃผ์ฑ๋ถ)๋ฅผ ์ ํํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ ๊ตฌ์ฑ ์์๋ ๋ถ์ฐ์ ์๋น ๋ถ๋ถ(์: 90% ์ด์)์ ์ ์งํ๋๋ก ์ ํ๋ฉ๋๋ค.
- ํฌ์: ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ ํํ ์ฃผ์ฑ๋ถ์ ํฌ์ํ์ฌ ์ถ์๋ ์ฐจ์ ํํ์ ์ป์ต๋๋ค. ์ด๊ฒ์ ๋ฐ์ดํฐ ํ๋ ฌ์ ์ ์น๋ฅผ ์ ํํ ๊ณ ์ ๋ฒกํฐ์ ๊ณฑํจ์ผ๋ก์จ ์ํ๋ฉ๋๋ค.
- Python์์ TensorFlow๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์ฑ๋ถ ๋ถ์(PCA)์ MNIST ๋ฐ์ดํฐ ์ธํธ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์
- ์ด ์์ ์์๋ ๋จผ์ Fashion MNIST ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ก๋ํ๊ณ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ตฌ์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ scikit-learn์ PCA ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ PCA๋ฅผ ์ํํฉ๋๋ค. ์ ์งํ ๊ตฌ์ฑ ์์ ์๋ฅผ 100์ผ๋ก ์ง์ ํฉ๋๋ค.
- ๋ค์์ผ๋ก ํ์ต๋ PCA ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๊ต์ก ๋ฐ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ณํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ณํ๋ ๋ฐ์ดํฐ๋ ๋ช ๊ฐ์ ๋ฐ์ง ๊ณ์ธต์ผ๋ก TensorFlow ๋ชจ๋ธ์ ๊ต์กํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ชจ๋ธ์ ๋ณํ๋ ๋ฐ์ดํฐ์์ ์ปดํ์ผ, ํ์ต ๋ฐ ํ๊ฐ๋ฉ๋๋ค.ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(numpy, tensorflow, sklearn)๋ฅผ ๊ฐ์ ธ์ค๊ณ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ถ๊ฐ ๋งค๊ฐ๋ณ์ ๋๋ ํ์ดํผ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํด์ผ ํฉ๋๋ค.
- ์ด ์ฝ๋์์๋ ๊ต์ก ๋ฐ ํ๊ฐ์ ์ฌ์ฉํ ์ ์๋ ๋ ์ด๋ธ(y_train ๋ฐ y_test)์ด ์๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค. ๋ ์ด๋ธ์ด ์๋ ๊ฒฝ์ฐ ๊ทธ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
- ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(numpy, tensorflow, sklearn)๋ฅผ ๊ฐ์ ธ์ค๊ณ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ถ๊ฐ ๋งค๊ฐ๋ณ์ ๋๋ ํ์ดํผ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํด์ผ ํฉ๋๋ค.
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import fashion_mnist
from sklearn.decomposition import PCA
# Load the Fashion MNIST dataset
(x_train, _), (x_test, _) = fashion_mnist.load_data()
# Reshape and normalize the data
x_train = x_train.reshape(-1, 784) / 255.0
x_test = x_test.reshape(-1, 784) / 255.0
# Perform PCA
pca = PCA(n_components=100) # Specify the number of components to keep
pca.fit(x_train)
# Transform the data using the learned PCA model
x_train_pca = pca.transform(x_train)
x_test_pca = pca.transform(x_test)
# Print the explained variance ratio
print("Explained variance ratio:", np.sum(pca.explained_variance_ratio_))
# Create a new TensorFlow model
model = tf.keras.Sequential([
tf.keras.layers.Dense(256, activation='relu', input_shape=(100,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
# Compile and train the model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train_pca, y_train, epochs=10, batch_size=32, validation_data=(x_test_pca, y_test))
# Evaluate the model
_, accuracy = model.evaluate(x_test_pca, y_test)
print("Test accuracy:", accuracy)
3. PCA ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํจํค์ง
- PCA ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ํํธ์จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํจํค์ง
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํจํค์ง
- ์ผ๋ฐ์ ์ผ๋ก ํจ์จ์ ์ด๊ณ ์ต์ ํ๋ PCA ๊ตฌํ์ ์ ๊ณตํ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์ฒ์๋ถํฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์ง ์๊ณ ๋ ๋ฐ์ดํฐ์ PCA๋ฅผ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค
- ์ธ๊ธฐ ์๋ PCA์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ Python์ scikit-learn, numpy ๋ฐ MATLAB์ด ์์ต๋๋ค
- ์ด๋ฌํ PCA ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ PCA ๋ชจ๋ธ ํผํ , ๋ฐ์ดํฐ ๋ณํ, ๊ณ ์ ๊ฐ, ๊ณ ์ ๋ฒกํฐ ๋ฐ ์ค๋ช ๋ถ์ฐ ๋น์จ๊ณผ ๊ฐ์ ์ค์ํ ํน์ฑ ๊ณ์ฐ๊ณผ ๊ฐ์ ์์ ์ ์ํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ํ ์๊ฐํ, ์ฐจ์ ๊ฐ์, ๊ธฐ๋ฅ ์ถ์ถ๊ณผ ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์๋ ์์ต๋๋ค.
- PCA์์ "ํ๋ผ๋ฏธํฐ"
- PCA ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ๋ ์ง์ ํ ์ ์๋ ์ค์ ์ด๋ ์ต์ ์ ์๋ฏธ
- ์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ PCA ํ๋ก์ธ์ค์ ๋ค์ํ ์ธก๋ฉด์ ์ ์ดํ๊ณ ์ป์ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค
- PCA์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง ๋งค๊ฐ๋ณ์
- n_components: ์ด ๋งค๊ฐ๋ณ์๋ ์ ์งํ ์ฃผ์ฑ๋ถ์ ์ ๋๋ ์ถ์๋ ๋ฐ์ดํฐ์ ์ํ๋ ์ฐจ์์ ๊ฒฐ์ ํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ํฌ์๋๋ ํ์ ๊ณต๊ฐ์ ์ฐจ์์ ์ง์ ํฉ๋๋ค.
- whiten: True๋ก ์ค์ ํ๋ฉด ์ด ๋งค๊ฐ๋ณ์๋ ๋ฐ์ดํฐ์ ๋ฐฑ์ํ ๋ณํ์ ์ ์ฉํ์ฌ ํฌ์๋ ๋ฐ์ดํฐ์ ๋ถ์ฐ์ ์ ๊ทํํฉ๋๋ค.
- svd_solver: ์ด ๋งค๊ฐ๋ณ์๋ PCA์ ํต์ฌ ๋จ๊ณ์ธ SVD(Singular Value Decomposition)์ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ์ ํฉ๋๋ค. 'auto', 'full', 'arpack' ๋๋ 'randomized'์ ๊ฐ์ ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ ๊ฐ๊ฐ ์๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ธก๋ฉด์์ ์ฅ๋จ์ ์ด ์์ต๋๋ค.
- explained_variance_ratio_: ์ด๊ฒ์ ๊ฐ ์ฃผ์ฑ๋ถ์ด ์ค๋ช ํ๋ ๋ถ์ฐ์ ์์ ๋ํ๋ด๋ PCA ๋ชจ๋ธ์ ์์ฑ์ ๋๋ค. ์ ์งํ ๊ตฌ์ฑ ์์ ์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํจํค์ง
4. SVM์์ PCA
- SVM์์ PCA๋ํํธ, SVM (Support Vector Machines)์ ๋ถ๋ฅ ๋ฐ ํ๊ท ์์
์ ์ฌ์ฉ๋๋ ์ง๋ ํ์ต ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. SVM์ ๋ ์ด๋ธ์ด ์ง์ ๋ ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๊ฑฐ๋ ์ฐ์์ ์ธ ๊ฐ ์์ธก์ ์ฌ์ฉ๋๋ ์ต์ ์ ์ดํ๋ฉด์ ์ฐพ์ต๋๋ค.
- ์ฐจ์ ์ถ์: SVM์ ์ ๋ ฅ๋๋ ๋ฐ์ดํฐ๊ฐ ๋๋ก๋ ๋ง์ ํน์ฑ ๋๋ ์ฐจ์์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ ๊ณ์ฐ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํค๊ณ ๊ณผ์ ํฉ ๊ฐ๋ฅ์ฑ์ ์ด๋ํ ์ ์์ต๋๋ค. PCA๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ฐจ์์ ์ค์ด๋ ์ ์ฒ๋ฆฌ ๋จ๊ณ๋ก ์ ์ฉ๋ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ์ ๋ถ์ฐ์ ๊ฐ์ฅ ์ ์ค๋ช ํ๋ ์ฃผ์ ์ฃผ์ฑ๋ถ(subset of principal components)์ ์ ํํจ์ผ๋ก์จ PCA๋ ํจ๊ณผ์ ์ผ๋ก ํน์ฑ ๊ณต๊ฐ์ ์ถ์์ํต๋๋ค.
- PCA์ SVM์ ๊ธฐ๊ณ ํ์ต ํ์ดํ๋ผ์ธ์์ ๋ฐ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ์ ๋๋ค. PCA๋ฅผ SVM๊ณผ ํจ๊ป ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- PCA (Principal Component Analysis)๋ ๊ธฐ๊ณ ํ์ต๊ณผ ๋ฐ์ดํฐ ๋ถ์์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ์ ๋๋ค. ์ด ๊ธฐ๋ฒ์ ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ ์ฐจ์์ ํํ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ฉด์๋ ๊ฐ์ฅ ์ค์ํ ์ ๋ณด๋ฅผ ๋ณด์กดํฉ๋๋ค.
๊ถ๊ธ์ฆ
- ์ฃผ์ฑ๋ถ ๋ถ์์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ถ์ํฌ ๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ด๋ ์ฑ๋ถ์ ๋ฃ๋๊ฒ ์ข์๊ฐ?
(๋ณต์ํ ๋๋ ๊ธฐ๋ฐ๋ฐ์ดํฐ๊ฐ ์ ๋์ค๋๋ก)
- ์์ถํ ๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ๋๋?
- ์ฃผ์ฑ๋ถ ๋ถ์(PCA)์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ถํ ๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ๋ฎ์ ์ฃผ์ฑ๋ถ์ ๋ฃ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ์ฅ ๋ฎ์ ์ฃผ์ฑ๋ถ์ ์ด๋ฏธ์ง์ ๋๋ถ๋ถ์ ๋ณ๋์ ์ค๋ช ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฐ๋ฉด, ๊ฐ์ฅ ๋์ ์ฃผ์ฑ๋ถ์ ์ด๋ฏธ์ง์ ์ธ๋ถ ์ฌํญ์ ์ค๋ช ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ๋ฎ์ ์ฃผ์ฑ๋ถ์ ๋ฃ์ผ๋ฉด ์ด๋ฏธ์ง์ ๋๋ถ๋ถ์ ๋ณ๋์ ์ ์งํ๋ฉด์๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธธ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, 100๊ฐ์ ์ฃผ์ฑ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ ์ด๋ฏธ์ง๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ๋ฎ์ 10๊ฐ์ ์ฃผ์ฑ๋ถ์ ๋ฃ์ผ๋ฉด ์ด๋ฏธ์ง์ 90%์ ๋ณ๋์ ์ ์งํ๋ฉด์๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธธ ์ ์์ต๋๋ค.
- PCA๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ถํ ๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ํ์ด ์์ต๋๋ค.
- ๊ฐ์ฅ ๋ฎ์ ์ฃผ์ฑ๋ถ์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ์ญ์์ค.
- ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ์ฃผ์ฑ๋ถ์ ์๋ฅผ ์ ํํ์ญ์์ค.
- ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ญ์์ค.
- ์ด๋ฌํ ํ์ ๋ฐ๋ฅด๋ฉด PCA๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ถํ ๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ ์ ์์ต๋๋ค.