01. ์ฐจ์์ถ์
๐ ๊ฐ์
- ๋งค์ฐ ๋ง์ ํผ์ฒ๋ก ๊ตฌ์ฑ๋ ๋ค์ฐจ์ ๋ฐ์ดํฐ ์ธํธ์ ์ฐจ์์ ์ถ์ํด ์๋ก์ด ์ฐจ์์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์์ฑํ๋ ๊ฒ
- PCA, LDA, SVD, NMF ์๊ณ ๋ฆฌ์ฆ
์ฐจ์์ด ํฐ ๊ฒฝ์ฐ | ์ฐจ์์ด ์์ ๊ฒฝ์ฐ |
sparse ํ ๊ตฌ์กฐ ๐ ์์ธก ์ ๋ขฐ๋ ํ๋ฝ | ์๊ฐํ๊ฐ ๊ฐ๋ฅํด ์ง๊ด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํด์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค. |
ํผ์ฒ๋ณ ์๊ด๊ด๊ณ๊ฐ ๋์ ์ ์์ ๐ ๋ค์ค ๊ณต์ ์ฑ ๋ฌธ์ ๋ก ์์ธก ์ฑ๋ฅ ์ ํ | ํ์ต์ ํ์ํ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ์ค์ผ ์ ์๋ค. |
๐ ํผ์ฒ ์ ํ vs ํผ์ฒ ์ถ์ถ
- ํผ์ฒ ์ ํ : ํน์ ํผ์ฒ์ ์ข ์์ฑ์ด ๊ฐํ ๋ถํ์ํ ํผ์ฒ๋ฅผ ์์ ์ ๊ฑฐํ์ฌ ๋ฐ์ดํฐ์ ํน์ง์ ์ ๋ํ๋ด๋ ์ฃผ์ํ ํผ์ฒ๋ง ์ ํํ๋ ๋ฐฉ์
- ํผ์ฒ ์ถ์ถ : ๊ธฐ์กด ํผ์ฒ๋ฅผ ์ ์ฐจ์์ ์ค์ ํผ์ฒ๋ก ์์ถํด์ ์ถ์ถ ๐ ๋จ์ํ ์์ถ์ด ์๋, ํผ์ฒ๋ฅผ ํจ์ถ์ ์ผ๋ก ๋ ์ ์ค๋ช ํ ์ ์๋ ์ ์ฌ์ ์ธ ์์๋ฅผ ์ถ์ถํด ๋ ๋ค๋ฅธ ๊ณต๊ฐ์ผ๋ก ๋งคํํ๋ ๊ฒ
๐ ์ด๋ฏธ์ง, ํ ์คํธ
- ๋งค์ฐ ๋ง์ ์ฐจ์์ ๊ฐ์ง ๋ฐ์ดํฐ๋ก, ์ฐจ์์ถ์๋ฅผ ํตํด ์ ์ฌ์ ์ธ ์๋ฏธ๋ฅผ ํผ์ฒ๋ก ๋์ถํ๋ค.
- ์ด๋ฏธ์ง ๋ฐ์ดํฐ ๐ ์ฐจ์์ถ์๋ฅผ ํตํด ํจ์ถ์ ํํ์ ์ด๋ฏธ์ง ๋ณํ, ์์ถ์ ์ํํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ํตํด ๊ณผ์ ํฉ์ ๋ฐฉ์งํ์ฌ ์์ธก ์ฑ๋ฅ์ ๋์ด ์ฌ๋ฆด ์ ์๋ค.
- ํ ์คํธ ๋ฐ์ดํฐ ๐ ํ ์คํธ ๋ฌธ์์ ์จ๊ฒจ์ง ์๋ฏธ๋ฅผ ์ถ์ถํ๋๋ฐ ์ฐจ์์ถ์๋ฅผ ํ์ฉํ๋ค. '์๋งจํฑ ํ ํฝ ๋ชจ๋ธ๋ง' ์ ์ํ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก SVD, NMF ๊ฐ ์ฐ์ธ๋ค.
02. PCA
๐ ๊ฐ์
๐ก PCA
โ ๊ฐ์ฅ ๋ํ์ ์ธ ์ฐจ์์ถ์ ๊ธฐ๋ฒ
โ ์ฌ๋ฌ ๋ณ์ ๊ฐ์ ์กด์ฌํ๋ ์๊ด๊ด๊ณ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฅผ ๋ํํ๋ ์ฃผ์ฑ๋ถ์ ์ถ์ถํด ์ฐจ์์ ์ถ์ํ๋ ๊ธฐ๋ฒ์ด๋ค.
โ ๊ฐ์ฅ ๋์ ๋ถ์ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐ์ ์ถ = ์ฃผ์ฑ๋ถ์ ์ฐพ์ ํด๋น ์ถ์ผ๋ก ์ฐจ์์ ์ถ์ํ๋ค. ์ฌ๊ธฐ์ ๋ถ์ฐ์ ๋ฐ์ดํฐ์ ํน์ฑ์ ๊ฐ์ฅ ์ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ ๊ฐ์ด๋ค.
โ ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ ๋ณ๋์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ฒซ๋ฒ์งธ ๋ฒกํฐ์ถ์ ์์ฑํ๊ณ ์ด ๋ฒกํฐ ์ถ์ ์ง๊ฐ์ด ๋๋ ๋ฒกํฐ (์ง๊ต๋ฒกํฐ) ๋ฅผ ์ถ์ผ๋ก ํ๋ค. ์ธ๋ฒ์งธ ์ถ์ ๋ค์ ๋๋ฒ์งธ ์ถ๊ณผ ์ง๊ฐ์ด ๋๋ ๋ฒกํฐ๋ฅผ ์ค์ ํ๋ ๋ฐฉ์์ผ๋ก ์ถ์ ์์ฑํ๋ค.
1๏ธโฃ ๋ฐ์ดํฐ ๋ณ๋์ฑ์ด ๊ฐ์ฅ ํฐ ๋ฐฉํฅ์ผ๋ก ์ถ์ ์์ฑ
2๏ธโฃ ์๋ก์ด ์ถ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํฌ์
3๏ธโฃ ์๋ก์ด ์ถ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํํ
๐ ์๋ณธ ๋ฐ์ดํฐ์ ํผ์ฒ ๊ฐ์์ ๋นํด ๋งค์ฐ ์์ ์ฃผ์ฑ๋ถ์ผ๋ก
์๋ณธ ๋ฐ์ดํฐ์ ์ด ๋ณ๋์ฑ์ ๋๋ถ๋ถ ์ค๋ช ํ ์ ์๋ ๋ถ์๋ฒ
๐ก ์ ํ๋์ํ์ ์ผ๋ก ํด์
โ PCA = ์ ๋ ฅ ๋ฐ์ดํฐ์ ๊ณต๋ถ์ฐ ํ๋ ฌ์ด ๊ณ ์ ๋ฒกํฐ์ ๊ณ ์ ๊ฐ์ผ๋ก ๋ถํด๋ ์ ์์ผ๋ฉฐ ์ด๋ ๊ฒ ๋ถํด๋ ๊ณ ์ ๋ฒกํฐ๋ฅผ ์ด์ฉํด ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ํ๋ณํ ํ๋ ๋ฐฉ์
๊ณต๋ถ์ฐ ํ๋ ฌ์ ๐ ๊ณ ์ ๊ฐ ๋ถํด ๐จ ๊ณ ์ ๋ฒกํฐ, ๊ณ ์ ๊ฐ์ด ์ป์ด์ง
๐ป ๊ณต๋ถ์ฐ ํ๋ ฌ = ์ฌ๋ฌ ๋ณ์์ ๊ด๋ จ๋ ๊ณต๋ถ์ฐ (→ ๋ ๋ณ์๊ฐ์ ๋ณ๋์ ์๋ฏธ) ์ ํฌํจํ๋ ์ ๋ฐฉํ๋ ฌ
๐ป ๊ณ ์ ๋ฒกํฐ = PCA ์ ์ฃผ์ฑ๋ถ ๋ฒกํฐ๋ก ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ถ์ฐ์ด ํฐ ๋ฐฉํฅ์ ๋ํ๋ธ๋ค.
๐ป ๊ณ ์ ๊ฐ = ๊ณ ์ ๋ฒกํฐ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ฉฐ ๋์์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ถ์ฐ์ ๋ํ๋ธ๋ค.
๐ป ์ ํ๋ณํ = ํน์ ํ ๋ฒกํฐ์ ํ๋ ฌ A๋ฅผ ๊ณฑํด ์๋ก์ด ๋ฒกํฐ๋ก ๋ณํํ๋ ๊ฒ = ๋ค๋ฅธ ๊ณต๊ฐ์ผ๋ก์ ํฌ์
→ ๊ณต๋ถ์ฐ ํ๋ ฌ C ๋ ๊ณ ์ ๋ฒกํฐ ์ง๊ตํ๋ ฌ * ๊ณ ์ ๊ฐ ์ ๋ฐฉํ๋ ฌ * ๊ณ ์ ๋ฒกํฐ ์ง๊ตํ๋ ฌ์ ์ ์น ํ๋ ฌ๋ก ๋ถํด๋จ
๐ก PCA ๋์๊ณผ์
1. ์ ๋ ฅ ๋ฐ์ดํฐ ์ธํธ์ ๊ณต๋ถ์ฐ ํ๋ ฌ์ ์์ฑํ๋ค. |
2. ๊ณต๋ถ์ฐ ํ๋ ฌ์ ๊ณ ์ ๋ฒกํฐ์ ๊ณ ์ ๊ฐ์ ๊ณ์ฐํ๋ค. |
3. ๊ณ ์ ๊ฐ์ด ๊ฐ์ฅ ํฐ ์์ผ๋ก K๊ฐ(=PCA ๋ณํ ์ฐจ์๋งํผ) ๊ณ ์ ๋ฒกํฐ๋ฅผ ์ถ์ถ |
4. ๊ณ ์ ๊ฐ์ด ๊ฐ์ฅ ํฐ ์์ผ๋ก ์ถ์ถ๋ ๊ณ ์ ๋ฒกํฐ๋ฅผ ์ด์ฉํด ์๋กญ๊ฒ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ณํ |
๐ ์ค์ต - iris
โญ PCA ๋ฅผ ์ ์ฉํ๊ธฐ ์ ์ ๋ฐ๋์ ์ค์ผ์ผ๋ง์ ์งํํด์ผ ํ๋ค โญ
- ์ฌ๋ฌ ์์ฑ์ ๊ฐ์ ์ฐ์ฐํด์ผํ๊ธฐ ๋๋ฌธ์ ์์ฑ์ ์ค์ผ์ผ์ ์ํฅ์ ๋ฐ์ผ๋ฏ๋ก ๋์ผํ ์ค์ผ์ผ๋ก ๋ณํํ๋ ๊ฒ์ด ํ์
from sklearn.decomposition import PCA |
๐โ๏ธ 01. ๋ฐ์ดํฐ ๋ก๋ฉ, ์ค์ผ์ผ๋ง
iris = load_iris()
columns = ['sepal_length','sepal_width','petal_length','petal_width']
irisdf = pd.DataFrame(iris.data, columns = columns)
irisdf['target'] = iris.target
irisdf.head(3)
from sklearn.preprocessing import StandardScaler
# target ๊ฐ์ ์ ์ธํ ๋ชจ๋ ์์ฑ๊ฐ์ ์ค์ผ์ผ๋ง
iris_scaled = StandardScaler().fit_transform(irisdf.iloc[:, :-1])
๐โ๏ธ 02. PCA
from sklearn.decomposition import PCA
pca = PCA(n_components = 2)
pca.fit(iris_scaled)
iris_pca = pca.transform(iris_scaled)
print(iris_pca.shape)
# 2๊ฐ์ ์ฐจ์์ผ๋ก ์ถ์๋ ๊ฒ์ ํ์ธํด๋ณผ ์ ์์
(150, 2)
# ์ฐจ์์ถ์๋ ๊ฒฐ๊ณผ ํ์ธํด๋ณด๊ธฐ : ์ฃผ์ฑ๋ถ์ผ๋ก ๋ช
๋ช
pca_columns = ['pca_component_1','pca_component_2']
irisdf_pca = pd.DataFrame(iris_pca, columns = pca_columns)
irisdf_pca['target'] = iris.target
irisdf_pca.head(3)
๐โ๏ธ 03. ์ฃผ์ฑ๋ถ ๋ณ๋์ฑ ์ค๋ช ๋น์จ ํ์ธ : .explained_variance_ratio_
# ์ฃผ์ฑ๋ถ ๋ณ๋์ฑ ์ค๋ช
๋น์จ ํ์ธํด๋ณด๊ธฐ
print(pca.explained_variance_ratio_) #๐ 2๊ฐ ์์๋ก๋ง ๋ณํํด๋ ์๋ณธ ๋ฐ์ดํฐ์ ๋ณ๋์ฑ์ 95%์ค๋ช
๊ฐ๋ฅ
[0.72962445 0.22850762]
๐โ๏ธ 04. ์๋ณธ ๋ฐ์ดํฐ์ธํธ vs ์ฐจ์์ถ์๋ ๋ฐ์ดํฐ์ธํธ : ๋ถ๋ฅ๊ฒฐ๊ณผ ๋น๊ตํด๋ณด๊ธฐ
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
rcf = RandomForestClassifier(random_state=156)
scores = cross_val_score(rcf, iris.data, iris.target, scoring = 'accuracy', cv=3)
print('์๋ณธ ๋ฐ์ดํฐ ๊ต์ฐจ๊ฒ์ฆ ๊ฐ๋ณ ์ ํ๋ : ', scores)
print('์๋ณธ ๋ฐ์ดํฐ ํ๊ท ์ ํ๋ : ', np.mean(scores))
์๋ณธ ๋ฐ์ดํฐ ๊ต์ฐจ๊ฒ์ฆ ๊ฐ๋ณ ์ ํ๋ : [0.98 0.94 0.96]
์๋ณธ ๋ฐ์ดํฐ ํ๊ท ์ ํ๋ : 0.96
pca_X = irisdf_pca[['pca_component_1', 'pca_component_2']]
scores_pca = cross_val_score(rcf, pca_X, iris.target, scoring = 'accuracy', cv=3)
print('์๋ณธ ๋ฐ์ดํฐ ๊ต์ฐจ๊ฒ์ฆ ๊ฐ๋ณ ์ ํ๋ : ', scores_pca)
print('์๋ณธ ๋ฐ์ดํฐ ํ๊ท ์ ํ๋ : ', np.mean(scores_pca))
์๋ณธ ๋ฐ์ดํฐ ๊ต์ฐจ๊ฒ์ฆ ๊ฐ๋ณ ์ ํ๋ : [0.88 0.88 0.88]
์๋ณธ ๋ฐ์ดํฐ ํ๊ท ์ ํ๋ : 0.88
#๐ ์ ํ๋๊ฐ ์ฝ 8% ๊ฐ์ : ์๋ณธ ๋ฐ์ดํฐ์ธํธ ๋๋น ์์ธก ์ฑ๋ฅ์ด ๋น์ฐํ ๋จ์ด์ง ์ ๋ฐ์ ์๋ค.
#๐ ๊ทธ๋ฌ๋ ์์ฑ๊ฐ์๊ฐ 50% ๊ฐ์ํ ๊ฒ์ ๊ณ ๋ คํ๋ฉด pca ๋ณํ ํ์๋ ์๋ณธ ๋ฐ์ดํฐ์ ํน์ฑ์ ์๋น๋ถ๋ถ ์ ์งํจ์ ์ ์ ์๋ค.
๐คธโ๏ธ corr( ) ์ ํตํด ์์ฑ๋ผ๋ฆฌ์ ์๊ด์ฑ์ ํ์ธํ ํ ์๊ด๋๊ฐ ๋์ ๋ณ์๋ค์ ๋์์ผ๋ก PCA ๋ก ์ฐจ์์ถ์ํ๋ค.
03. LDA
๐ ๊ฐ์
๐ก Linear Discriminant Analysis
โ ์ ํ ํ๋ณ ๋ถ์๋ฒ
โ PCA ์ ๋งค์ฐ ์ ์ฌํ๊ฒ ์ ๋ ฅ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ์ฐจ์ ๊ณต๊ฐ์ ํฌ์ํ์ฌ ์ฐจ์์ ์ถ์ํ๋ ๊ธฐ๋ฒ
โ ์ง๋ํ์ต์ ๋ถ๋ฅ์์ ์ฌ์ฉํ๊ธฐ ์ฝ๋๋ก ๊ฐ๋ณ ํด๋์ค๋ฅผ ๋ถ๋ณํ ์ ์๋ ๊ธฐ์ค์ ์ต๋ํ ์ ์งํ๋ฉฐ ์ฐจ์์ ์ถ์ํ๋ค.
PCA | LDA |
์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ณ๋์ฑ์ด ๊ฐ์ฅ ํฐ ์ถ | ์ ๋ ฅ ๋ฐ์ดํฐ์ ๊ฒฐ์ ๊ฐ ํด๋์ค๋ฅผ ์ต๋ํ ๋ถ๋ฆฌํ ์ ์๋ ์ถ |
โ ํด๋์ค ๊ฐ ๋ถ์ฐ (between) ๊ณผ ํด๋์ค ๋ด๋ถ ๋ถ์ฐ (within) ์ ๋น์จ์ ์ต๋ํ ํ๋ ๋ฐฉ์์ผ๋ก ์ฐจ์์ ์ถ์ํ๋ค ๐จ ํด๋์ค ๊ฐ ๋ถ์ฐ์ ์ต๋ํ ํฌ๊ฒ, ํด๋์ค ๋ด๋ถ ๋ถ์ฐ์ ์ต๋ํ ์๊ฒ
๐ก LDA ๋์๊ณผ์
โ LDA ๋ ๊ณต๋ถ์ฐ ํ๋ ฌ์ด ์๋๋ผ ํด๋์ค ๊ฐ ๋ถ์ฐ๊ณผ ํด๋์ค ๋ด๋ถ ๋ถ์ฐ ํ๋ ฌ์ ๊ตฌํ์ฌ ์ด์ ๊ธฐ๋ฐํด ๊ณ ์ ๋ฒกํฐ๋ฅผ ๊ตฌํ๊ณ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ํฌ์ํ๋ค.
1. ํด๋์ค ๋ด๋ถ์ ํด๋์ค ๊ฐ ๋ถ์ฐ ํ๋ ฌ์ ๊ตฌํ๋ค. ์ด ๋ ๊ฐ์ ํ๋ ฌ์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๊ฒฐ์ ๊ฐ ํด๋์ค๋ณ๋ก ๊ฐ๋ณ ํผ์ฒ์ ํ๊ท ๋ฒกํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋ค. |
2. Sw, Sb ํ๋ ฌ์ ๊ณ ์ ๋ฒกํฐ๋ก ๋ถํดํ๋ค. Sw'Sb ๐ ๊ณ ์ ๋ฒกํฐ*๊ณ ์ ๊ฐ*๊ณ ์ ๋ฒกํฐ' |
3. ๊ณ ์ ๊ฐ์ด ๊ฐ์ฅ ํฐ ์์ผ๋ก K๊ฐ(=LDA๋ณํ ์ฐจ์๋งํผ) ๊ณ ์ ๋ฒกํฐ๋ฅผ ์ถ์ถ |
4. ๊ณ ์ ๊ฐ์ด ๊ฐ์ฅ ํฐ ์์ผ๋ก ์ถ์ถ๋ ๊ณ ์ ๋ฒกํฐ๋ฅผ ์ด์ฉํด ์๋กญ๊ฒ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ณํ |
๐ ์ค์ต - iris
LDA ๋ฅผ ์ ์ฉํ๋ ค๋ฉด ์ค์ผ์ผ๋ง์ ํ์, LDA fit ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ target ๊ฐ์ ๋ฃ์ด์ฃผ๋ ๊ฒ๋ ์์ง ์๊ธฐ
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis |
๐คธโ๏ธ PCA ๋ ๋น์ง๋ํ์ต, LDA ๋ ์ง๋ํ์ต
๐โ๏ธ 01. ๋ฐ์ดํฐ ๋ก๋ฉ, ์ค์ผ์ผ๋ง
# ๋ฐ์ดํฐ ๋ก๋, ์ค์ผ์ผ๋ง
iris = load_iris()
iris_scaled = StandardScaler().fit_transform(iris.data)
๐โ๏ธ 02. LDA ์ ์ฉ
# LDA ์ ์ฉ
lda = LinearDiscriminantAnalysis(n_components=2)
lda.fit(iris_scaled, iris.target) #๐ ํ๊ฒ ํด๋์ค ๊ฐ์ด ๋ณํ์์ ํ์!
iris_lda = lda.transform(iris_scaled)
print(iris_lda.shape)
# ์ฐจ์์ถ์๋ ๋ฐ์ดํฐ์
๊ฒฐ๊ณผ
(150, 2)
04. SVD
๐ ๊ฐ์
๐ก Singular value decomposition ํน์ด๊ฐ ๋ถํด
โ PCA ์ ์ ์ฌํ ํ๋ ฌ ๋ถํด ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ์ฐจ์์ถ์ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ PCA ๋ ์ ๋ฐฉํ๋ ฌ๋ง์ ๊ณ ์ ๋ฒกํฐ๋ก ๋ถํดํ ์ ์์ผ๋, SVD ๋ ์ผ๋ฐ์ ์ธ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ํ๋ ฌ์ ๋ถํดํ ์ ์๋ค.
โ U, V' : singluar vector ๋ผ ๋ถ๋ฅธ๋ค. ๋ชจ๋ ํน์ด๋ฒกํฐ๋ ์๋ก ์ง๊ตํ๋ ์ฑ์ง์ ๊ฐ์ง๋ค.
โ Σ : ๋๊ฐํ๋ ฌ์ ๋ชจ์ต์ ๋๊ณ ์์ผ๋ฉฐ 0์ด ์๋ ๊ฐ์ด ํ๋ ฌ A์ ํน์ด๊ฐ์ ํด๋นํ๋ค.
โ ์ผ๋ฐ์ ์ผ๋ก Σ ์ ๋น๋๊ฐ์ธ ๋ถ๋ถ๊ณผ ๋๊ฐ์์์ค์ ํน์ด๊ฐ์ด 0์ธ ๋ถ๋ถ์ ๋ชจ๋ ์ ๊ฑฐํ๊ณ ์ ๊ฑฐ๋ Σ ์ ๋์๋๋ U ์ V ์์๋ ํจ๊ป ์ ๊ฑฐํด ์ฐจ์์ ์ค์ธ ํํ๋ก SVD ๋ฅผ ์ ์ฉํ๋ค.
๐ก Truncated SVD
โ Truncated SVD ๋ Σ ์ ๋๊ฐ์์ ์ค์ ์์ ๋ช ๊ฐ๋ง ์ถ์ถํ์ฌ ์ฌ๊ธฐ์ ๋์ํ๋ U์ V์ ์์๋ ํจ๊ป ์ ๊ฑฐํด ๋์ฑ ์ฐจ์์ ์ค์ธ ํํ๋ก ๋ถํดํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๐ก ๋ํ์ด, ์ฌ์ดํ์ด, ์ฌ์ดํท๋ฐ ๋ชจ๋
๋ํ์ด SVD ๋ชจ๋ | from numpy.linalg import svd |
์ฌ์ดํ์ด SVD ๋ชจ๋ | from scipy.linalg import svd |
์ฌ์ดํ์ด Truncated SVD ๋ชจ๋ | from scipy.sparse.linalg import svds |
์ฌ์ดํท๋ฐ Truncated SVD ํด๋์ค | from sklearn.decomposition import TruncatedSVD, PCA |
๐ ์ค์ต - iris
๐โ๏ธ 01. ๋ฐ์ดํฐ ๋ก๋ฉ
iris = load_iris()
iris_ftrs = iris.data
๐โ๏ธ 02. TruncatedSVD ์ ์ฉ
from sklearn.decomposition import TruncatedSVD, PCA
tsvd = TruncatedSVD(n_components=2)
tsvd.fit(iris_ftrs)
iris_tsvd = tsvd.transform(iris_ftrs)
iris_tsvd
- Scaler + TruncatedSVD = PCA ๊ฒฐ๊ณผ ๐ ๋ฐ์ดํฐ ์ธํธ๊ฐ ์ค์ผ์ผ๋ง์ผ๋ก ๋ฐ์ดํฐ ์ค์ฌ์ด ๋์ผํด์ง๋ฉด ์ฌ์ดํท๋ฐ์ SVD ์ PCA ๋ ๋์ผํ ๋ณํ์ ์ํํ๋ค.
- PCA ๋ ๋ฐ์งํ๋ ฌ์ ๋ํ ๋ณํ๋ง ๊ฐ๋ฅํ๊ณ , SVD ๋ ํฌ์ํ๋ ฌ์ ๋ํ ๋ณํ๋ ๊ฐ๋ฅํ๋ค.
๐ SVD ํ์ฉ
- ์ปดํจํฐ ๋น์ : ์ด๋ฏธ์ง ์์ถ์ ํตํ ํจํด ์ธ์๊ณผ ์ ํธ์ฒ๋ฆฌ ๋ถ์ผ
- ํ ์คํธ : ํ ํฝ ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ์ธ LSA์ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉ๋จ
05. NMF
๐ ๊ฐ์
๐ก Non Negative Matrix Fatorization
โ Truncated SVD ์ฒ๋ผ ๋ฎ์ ๋ญํฌ (low rank) ๋ฅผ ํตํ ํ๋ ฌ ๊ทผ์ฌ ๋ฐฉ์์ ๋ณํ์ด๋ค.
โ ์๋ณธ ํ๋ ฌ ๋ด์ ๋ชจ๋ ์์ ๊ฐ์ด ๋ชจ๋ ์์ (0 ์ด์) ์ด๋ผ๋๊ฒ ๋ณด์ฅ๋๋ฉด W์ H ๋ผ๋ ๋ ๊ฐ์ ๊ธฐ๋ฐ ์์ ํ๋ ฌ๋ก ๋ถํด๋ ์ ์๋ ๊ธฐ๋ฒ์ ํด๋นํ๋ค.
๐ป W : ์๋ณธ ํ์ ๋ํด ์ ์ฌ์์์ ๊ฐ์ด ์ผ๋ง๋ ๋๋์ง์ ๋์
- ํ : ์๋ณธ ๋ฐ์ดํฐ์ ํ์ ๊ฐ์์ ํด๋น (R1, R2, R3, R4) , ์ด : ์ ์ฌ์์์ ํด๋น (LF1, LF2)
๐ป H : ์ ์ฌ์์๊ฐ ์๋ณธ ์ด (์๋ณธ ๋ฐ์ดํฐ์ ์์ฑ) ๋ก ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์๋์ง ๋ํ๋ด๋ ํ๋ ฌ
- ํ : ์ ์ฌ์์์ ํด๋น (LF1, LF2) , ์ด : ์๋ณธ ๋ฐ์ดํฐ์ ์ด์ ๊ฐ์์ ํด๋น (C1,...,C6)
๐ ์ค์ต - iris
from sklearn.decomposition import NMF |
๐โ๏ธ 01. ๋ฐ์ดํฐ ๋ก๋ฉ
iris = load_iris()
iris_ftrs = iris.data
๐โ๏ธ 02. NMF ์ ์ฉ
from sklearn.decomposition import NMF
nmf = NMF(n_components=2)
nmf.fit(iris_ftrs)
iris_nmf = nmf.transform(iris_ftrs)
๐ ํ์ฉ
- ์ปดํจํฐ ๋น์ : ์ด๋ฏธ์ง ์์ถ์ ํตํ ํจํด ์ธ์๊ณผ ์ ํธ์ฒ๋ฆฌ ๋ถ์ผ
- ํ ์คํธ : ํ ํฝ ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ, ๋ฌธ์ ์ ์ฌ๋ ๋ฐ ํด๋ฌ์คํฐ๋ง
- ์ถ์ฒ ์์คํ : Latent Factoring ๊ธฐ๋ฐ ์ถ์ฒ๋ฐฉ์
'1๏ธโฃ AIโขDS > ๐ ๋จธ์ ๋ฌ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ์ดํฐ๋ง์ด๋ Preprocessing โ (1) | 2023.03.15 |
---|---|
[05. ํด๋ฌ์คํฐ๋ง] K-means, ํ๊ท ์ด๋, GMM, DBSCAN (0) | 2022.05.07 |
[05. ํ๊ท] ์ ํํ๊ท, ๋คํญํ๊ท, ๊ท์ ํ๊ท, ๋ก์ง์คํฑํ๊ท, ํ๊ทํธ๋ฆฌ (0) | 2022.03.25 |
[04. ๋ถ๋ฅ] LightGBM, ์คํํน ์์๋ธ, Catboost (0) | 2022.03.20 |
[04. ๋ถ๋ฅ] GBM, XGboost (0) | 2022.03.14 |
๋๊ธ