- Step 1 : ๋ฐ์ดํฐ ์ ๊ทํ (๊ฐ ๋ณ์ ๊ฐ๋ค์ ํ๊ท = 0)
- Step 2 : ์ต์ ํ ๋ฌธ์ ์ ์
- Step 3 : ์ต์ ํด ๋์ถ
- Step 4 : ๊ณ ์ ๋ฒกํฐ (eigenvector) ๋ค์ ๊ณ ์ ๊ฐ (eigenvalue) ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
- Step 5 : ๋ณ์ ์ถ์ถ์ ํตํ ๋ฐ์ดํฐ ๋ณํ
- Step 6 : ์ถ์ถ๋ ๋ณ์ ์ค ์ผ๋ถ๋ง์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ญ๋ณํ
- Step 1 : ๋ฐ์ดํฐ ์ ๊ทํ (๊ฐ ๋ณ์ ๊ฐ๋ค์ ํ๊ท = 0)
- Step 2 : ์ต์ ํ ๋ฌธ์ ์ ์
- Step 3 : ์ต์ ํด ๋์ถ
- Step 4 : ๊ณ ์ ๋ฒกํฐ (eigenvector) ๋ค์ ๊ณ ์ ๊ฐ (eigenvalue) ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
- Step 5 : ๋ณ์ ์ถ์ถ์ ํตํ ๋ฐ์ดํฐ ๋ณํ
- Step 6 : ์ถ์ถ๋ ๋ณ์ ์ค ์ผ๋ถ๋ง์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ญ๋ณํ
[ AI / ML ] ๋จธ์ ๋ฌ๋ - PCA (Principal Component Analysis)
๐ฉ๐ปโ๐ป K-MOOC ์ค์ต์ผ๋ก ๋ฐฐ์ฐ๋ ๋จธ์ ๋ฌ๋ ๊ฐ์
๐ ํด๋น ํฌ์คํธ๋ K-MOOC ๊ฐ์ ๋ด์ฉ๊ณผ ์ถ๊ฐ๋ก ๋ค๋ฅธ ์๋ฃ๋ค์ ์ฐพ์ ๋ด์ฉ์ ์์ฑํ์์ผ๋ฉฐ, ์ด๋ก ๋ฐ ๊ฐ๋ ์ ๋ํด ๊ณต๋ถํ๊ณ ์์ ์ค์ต๋ ์งํํ ํ ๋ด์ฉ์ ์ ๋ฆฌํ์๋ค.
[ AI ] ์ธ๊ณต์ง๋ฅ๊ณผ ๋จธ์ ๋ฌ๋, ๊ทธ๋ฆฌ๊ณ ๋ฅ๋ฌ๋์ ๊ฐ์ ๋ ์์ฑ๋ ํฌ์คํธ์ด๋ค.
๋ชฉ์ฐจ
- [ AI / ML ] ๋จธ์ ๋ฌ๋ - PCA (Principal Component Analysis)
- ๐ฉ๐ปโ๐ป K-MOOC ์ค์ต์ผ๋ก ๋ฐฐ์ฐ๋ ๋จธ์ ๋ฌ๋ ๊ฐ์
- ๋ชฉ์ฐจ
- 1. ์ฃผ์ฑ๋ถ ๋ถ์ Principal Component Analysis
- 2. PCA์ ์๋ฆฌ How It Works
- 3. ๋ถ์ฐ์ ์ต๋๋ก ๋ณด์กดํ ์ ์๋ ์ถ์ ์ ํํ๋ ์ด์ ?
- 4. PCA ์ ์ฉ
- Step 1 : ๋ฐ์ดํฐ ์ ๊ทํ (๊ฐ ๋ณ์ ๊ฐ๋ค์ ํ๊ท = 0)
- Step 2 : ์ต์ ํ ๋ฌธ์ ์ ์
- Step 3 : ์ต์ ํด ๋์ถ
- Step 4 : ๊ณ ์ ๋ฒกํฐ (eigenvector) ๋ค์ ๊ณ ์ ๊ฐ (eigenvalue) ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
- Step 5 : ๋ณ์ ์ถ์ถ์ ํตํ ๋ฐ์ดํฐ ๋ณํ
- Step 6 : ์ถ์ถ๋ ๋ณ์ ์ค ์ผ๋ถ๋ง์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ญ๋ณํ
- 5. ๊ฒฐ๊ณผ ํ์ธ
- ๐ป ์ค์ต ์์ ์ฝ๋
- ๋ง๋ฌด๋ฆฌํ๋ฉด์..
- ์ฐธ๊ณ
1. ์ฃผ์ฑ๋ถ ๋ถ์ Principal Component Analysis
์ฐจ์์ถ์(dimensionality reduction)์ ๋ณ์์ถ์ถ(feature extraction) ๊ธฐ๋ฒ์ผ๋ก ๋๋ฆฌ ์ฐ์ด๊ณ ์๋ PCA (Principal Component Analysis)์ ๋น์ง๋ํ์ต Unsupervised Learning์์ ์๋ฃ์ ์ค๋ณต๋ ์ ๋ณด๊ฐ ๋ง์ ๊ฒฝ์ฐ, ์๋ฃ๊ฐ ๊ฐ๋ ์ฐจ์๋ณด๋ค ๋ ์์ ์์ ์ฐจ์์ผ๋ก๋ ์๋ฃ์ ๋ด์ฌํ ์ ๋ณด๋ฅผ ์ค๋ช ํ ์ ์์ ๊ฒ์ด๋ผ๋ ์์ด๋์ด์์ ์๊ฐ๋ ๊ฐ๋ ์ด๋ค.
- ์ฃผ์ฑ๋ถ์ด๋
- ์ ์ฒด ๋ฐ์ดํฐ (๋ ๋ฆฝ๋ณ์)์ ๋ถ์ฐ์ ๊ฐ์ฅ ์ ์ค๋ช ํ๋ ์ฑ๋ถ
- ๋ณ์์ ๊ฐ์ = ์ฐจ์์ ๊ฐ์
โ ์ฐจ์์ด ์ฆ๊ฐํ ์๋ก ๋ฐ์ดํฐ๊ฐ ํํํด์ผ ํ๋ ๊ณต๊ฐ์ ๋ณต์กํด์ง๋ค.
๋ฐ๋ผ์ PCA๋ ์ฃผ๋ก
- ๋ณ์๊ฐ ๋๋ฌด ๋ง์ ๊ธฐ์กด ๋ณ์๋ฅผ ์กฐํฉํด ์๋ก์ด ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ๋ชจ๋ธ๋ง์ ํ๋ ค๊ณ ํ๊ฑฐ๋
- ํ๊ท ๋ถ์๊ณผ ๊ฐ์ ์ข ์๊ด๊ณ ๋ถ์์ ํ ๋ ๋ค์ค ๊ณต์ฐ์ฑ multicollinearity์ ์์ ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
2. PCA์ ์๋ฆฌ How It Works
๋ฐ์ดํฐ์ ์ฐจ์์ ์ถ์ํ ๋ ๊ธฐ์กด์ ์ ๋ณด๊ฐ ์ต๋ํ ๋ณด์กด๋ ์ ์๋ ์๋ก์ด ์ถ์ ์ฐพ์์ผ ํ๋ค. ์ด๋ ๊ฒ ์ฐพ์ ์ถ์ Principle Component๋ผ๊ณ ํ๋ฉฐ, ์ฃผ๋ก ์ค์ฌ์ PC๋ผ๊ณ ๋ถ๋ฅธ๋ค.
PC๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ covaiance matrix(๊ณต๋ถ์ฐ ํ๋ ฌ) ์ eigen vector(๊ณ ์ ๋ฒกํฐ) ๊ฐ์ ์ฐพ์์ผ ํ๊ณ , ์ด ๊ฐ ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ด ์ฐ๋ฆฌ๊ฐ ์ํ๋ PC ์ ๋ง์กฑํ๋ค๊ณ ๋ณผ ์ ์๋ค.
3. ๋ถ์ฐ์ ์ต๋๋ก ๋ณด์กดํ ์ ์๋ ์ถ์ ์ ํํ๋ ์ด์ ?
์์ ๊ทธ๋ฆผ์ฒ๋ผ ๊ฐ๋จํ 2์ฐจ์ ๋ฐ์ดํฐ์ ์ด ์์ ๋ c2์ ์ง์ ์ ์ ํํ๋ ๊ฒ์ด ๋ถ์ฐ์ ๊ฐ์ฅ ์ ๊ฒ ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ธ๋ฐ, ์ด๋ ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ์คํ๊ธฐ๊ฐ ์ฌ์์ง๋ค.
๋ฐ๋ผ์, ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ํฌ์ํ๋ ๊ฒ ๋ณด๋ค ๋ถ์ฐ์ ์ต๋๋ก ๋ณด์กดํ ์ ์๋ ์ถ์ ์ ํํ๋ ๊ฒ์ด ์ ๋ณด๋ฅผ ๊ฐ์ฅ ์ ๊ฒ ์์คํ ์ ์๋ค๊ณ ์๊ฐํ ์ ์๋ค. ๋ถ์ฐ์ด ์ปค์ ธ์ผ ๋ฐ์ดํฐ๋ค์ฌ์ด์ ์ฐจ์ด์ ์ด ๋ช ํํด์ง๊ณ , ๊ทธ๊ฒ์ด ๋ชจ๋ธ์ ๋์ฑ ์ข์ ๋ฐฉํฅ์ผ๋ก ๋ง๋ค ์ ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
4. PCA ์ ์ฉ
Step 1 : ๋ฐ์ดํฐ ์ ๊ทํ (๊ฐ ๋ณ์ ๊ฐ๋ค์ ํ๊ท = 0)
Step 2 : ์ต์ ํ ๋ฌธ์ ์ ์
- ๋ฐ์ดํฐ๋ฅผ ์ฌ์์ํจ ํ์ ๋ถ์ฐ์ ์ต๋ํํ๋ ์๋ก์ด ์ถ์ ์ฐพ๋ ๊ฒ์ด ๋ชฉํ!
Step 3 : ์ต์ ํด ๋์ถ
- Lagrangian multiplier๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฝ์์ ๋ชฉ์ ์์ ์ถ๊ฐํ ์ ๋ชฉ์ ์ ์์ฑ
- ์ ๋ชฉ์ ์์ ๋ฏธ๋ถํ์ฌ ๊ธฐ์ธ๊ธฐ๊ฐ 0์ด ๋๋ ์ ์์ ์ต์ ํด ๋ฐ์
Step 4 : ๊ณ ์ ๋ฒกํฐ (eigenvector) ๋ค์ ๊ณ ์ ๊ฐ (eigenvalue) ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
- ๊ฐ ๊ณ ์ ๋ฒกํฐ๋ ์ ํ๋ณํ๋ ๊ณต๊ฐ์์ ์๋ก ์ง๊ตํ๋ ์๋ก์ด ์ถ์ด ๋จ
Step 5 : ๋ณ์ ์ถ์ถ์ ํตํ ๋ฐ์ดํฐ ๋ณํ
Step 6 : ์ถ์ถ๋ ๋ณ์ ์ค ์ผ๋ถ๋ง์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ญ๋ณํ
5. ๊ฒฐ๊ณผ ํ์ธ
โก๏ธ Scree Plot
์์ ๊ทธ๋ํ์์ ๋ค๋ชจ์น ๊ณณ์ฒ๋ผ ์ ๋ณด์ ๊ฐ์๋์ด ํ ์ค์ด๋๋ ๊ตฌ๊ฐ์ Elbow point๋ผ๊ณ ๋ถ๋ฅธ๋ค. Eigenvalue์ Elbowpoint๋ฅผ ํ์ธํ๊ณ ์ ์ ํ๊ฒ ๋ช ์ฐจ์์ผ๋ก ์ถ์ํ ์ง ๊ฒฐ์ ํ๋ค.
โก๏ธ Loading Plot
ํด๋น plot์ ๊ฐ ์ฃผ์ฑ๋ถ์ ๋ง๋ค ๋, ๊ธฐ์กด ๋ฐ์ดํฐ x์ ๊ฐ ๋ณ์๊ฐ ๊ธฐ์ฌํ๋ ์ ๋๋ฅผ ํ๋จํ์ฌ ์ฌํ์ ์ธ ๋ณ์์ ๋ํ ํด์์ ํ ๋ ์ฌ์ฉํ ์ ์๋ค.
๐ป ์ค์ต ์์ ์ฝ๋
import seaborn as sns
import pandas as pd
from sklearn.decomposition import PCA
url = "https://archive.ics.uci.edu/ml/machine-learning-datebase/iris/irs.data"
df = pd.read_csv(url,
naems = ['sepal length', 'sepal width', 'petal length',
'petal width', 'target'])
# Use only continuous data
data = df[df.columns[0:4]]
# Create PCA object with number of principal component
pca = PCA(n_components = len(df.columns) - 1)
pca_fit = pca.fit(data)
print('\n====== PCA Reulst Summary ======\n')
print('Singular value : \n', pca.singular_values_)
print('\n Singular vector : \n', pca.components_.T)
print('\n Explain Standard deviations : \n', np.sqrt(pca.explained_variance_))
print('\n Explain Variance Ratio : \n', pca.explained_variance_ratio_)
print('\n Noise Variance : \n', pca.noise_variance_)
====== PCA Reulst Summary ======
Singular value :
[25.08986398 6.00785254 3.42053538 1.87850234]
Singular vector :
[[ 0.36158968 0.65653988 -0.58099728 0.31725455]
[-0.08226889 0.72971237 0.59641809 -0.32409435]
[ 0.85657211 -0.1757674 0.07252408 -0.47971899]
[ 0.35884393 -0.07470647 0.54906091 0.75112056]]
Explain Standard deviations :
[2.05544175 0.49218246 0.28022118 0.15389291]
Explain Variance Ratio :
[0.92461621 0.05301557 0.01718514 0.00518309]
Noise Variance :
0.0
# Scree Plot
plt.title("Scree Plot")
plt.xlabel("Number of Components")
plt.ylabel("Cumulative Explained Variance")
plt.plot(pca.explained_variance_, 'o-')
# get predict values
pca_pred = pd.DataFrame(pca.fit_transform(data))
pca_pred = pd.concat([pca_pred, df['target']], axis = 1)
pca_pred
sns.scatterplot(pca_pred[0], pca_pred[1], data = pca_pred, hue = 'target',
style = 'target', s = 100);
๋ง๋ฌด๋ฆฌํ๋ฉด์..
์ง๋ํ์ต๋ง ์ฃผ๋ก ๋ค๋ฃจ๋ค ๋ณด๋ PCA๋ ๊ฐ๋ ๋ง ์๊ณ ์๊ณ ์ง์ ํด๋ณผ ๊ธฐํ๊ฐ ์์๋๋ฐ ์ด๋ฒ์ ํด๋น ๋ด์ฉ์ ๋ํด ์ ๋ฆฌํ๋ฉด์ ์ฐ์ฐํ ์ฐจ์ ์ถ์ ์ค์ต ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๋ค. ์ง์ ํด๋ณด๋ ๊ฐ๋จํ๊ณ ๋ ์ง๊ด์ ์ผ๋ก ํด๋น ๋ด์ฉ์ ๋ํด ์ดํดํ ์ ์์๋ค. ๋น์ง๋ํ์ต์ ๋ค๋ฃจ๊ฒ ๋๋ ๊ทธ ์ด๋ ๋ ์ค๋ ๊ณต๋ถํ ๋ด์ฉ์ด ๋์์ด ๋๊ธธ!!
๋ค์ ํฌ์คํธ์์ ๋ง๋์ ๐
์ฐธ๊ณ
K-MOOC ์ค์ต์ผ๋ก ๋ฐฐ์ฐ๋ ๋จธ์ ๋ฌ๋
๋จธ์ ๋ฌ๋ - PCA (Principal Component Analysis)
Stack Exchange - Making sense of principal component analysis, eigenvectors & eigenvalues
๐ You need to log in to GitHub to write comments. ๐
If you can't see comments, please refresh page(F5).