๐Ÿ’  AIchemist 8th Session | ์ฐจ์› ์ถ•์†Œ

yellowsubmarine372ยท2023๋…„ 11์›” 20์ผ

AIchemist

๋ชฉ๋ก ๋ณด๊ธฐ
10/14
post-thumbnail

01. ์ฐจ์› ์ถ•์†Œ(Dimension Reduction) ๊ฐœ์š”

์ฐจ์› ์ถ•์†Œ
๋งค์šฐ ๋งŽ์€ ํ”ผ์ฒ˜๋กœ ๊ตฌ์„ฑ๋œ ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ์ฐจ์›์„ ์ถ•์†Œํ•ด ์ƒˆ๋กœ์šด ์ฐจ์›์˜ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ

(๊ธฐ์กด์˜ ๋ฌธ์ œ์ )
์ฐจ์›์ด ํด์ˆ˜๋ก ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋ฉ€์–ด์ ธ ํฌ์†Œํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋จ -> ์˜ˆ์ธก ์‹ ๋ขฐ๋„๊ฐ€ ๋–จ์–ด์ง
๊ฐœ๋ณ„ ํ”ผ์ฒ˜ ๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ๋†’์„ ๊ฐ€๋Šฅ์„ฑ์ด ํผ (์„ ํ˜•ํšŒ๊ท€ ๋ชจ๋ธ์—์„œ ๋‹ค์ค‘๊ณต์‚ฐ์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ)

  • ํ”ผ์ฒ˜ ์ˆ˜๋ฅผ ์ค„์ด๋ฉด ๋” ์ง๊ด€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์Œ
  • ์‹œ๊ฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•ด์„œ ํ‘œํ˜„ ๊ฐ€๋Šฅ
  • ํ•™์Šต์— ํ•„์š”ํ•œ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ๋„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  1. ํ”ผ์ฒ˜ ์„ ํƒ
    ํŠน์ • ํ”ผ์ฒ˜์— ์ข…์†์„ฑ์ด ๊ฐ•ํ•œ ๋ถˆํ•„์š”ํ•œ ํ”ผ์ฒ˜๋Š” ์•„์˜ˆ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ ํŠน์ง•์„ ์ž˜ ๋‚˜ํƒ€๋‚ด๋Š” ์ฃผ์š” ํ”ผ์ฒ˜๋งŒ ์„ ํƒ
  2. ํ”ผ์ฒ˜ ์ถ”์ถœ
    ๊ธฐ์กด ํ”ผ์ฒ˜๋ฅผ ์ €์ฐจ์›์˜ ์ค‘์š” ํ”ผ์ฒ ๋กœ ์••์ถ•ํ•ด์„œ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ
    ๋˜ ๋‹ค๋ฅธ ๊ณต๊ฐ„์œผ๋กœ ๋งคํ•‘ํ•ด ์ถ”์ถœ -> ํ•จ์ถ•์ ์ธ ์š”์•ฝ ํŠน์„ฑ์œผ๋กœ ์ถ”์ถœ

์ฐจ์› ์ถ•์†Œ๋ฅผ ํ†ตํ•ด ์ข€ ๋” ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ์„ค๋ช…ํ•  ์ˆ˜์žˆ๋Š” ์ž ์žฌ์ ์ธ ์š”์†Œ๋ฅผ ์ถ”์ถœ

02. PCA(Principal Component Analysis)

PCA ๊ฐœ์š”

์—ฌ๋Ÿฌ ๋ณ€์ˆ˜ ๊ฐ„์— ์กด์žฌํ•˜๋Š” ์ƒ๊ด€ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•ด ์ด๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ์ฃผ์„ฑ๋ถ„์„ ์ถ”์ถœํ•ด ์ฐจ์›์„ ์ถ•์†Œ
์ฃผ์„ฑ๋ถ„ (๊ฐ€์žฅ ๋†’์€ ๋ถ„์‚ฐ์„ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ ์ถ•์„ ์ฐพ์•„ ์ด ์ถ•์œผ๋กœ ์ฐจ์›์„ ์ถ•์†Œ)

๋ฐ์ดํ„ฐ ๋ณ€๋™์„ฑ์ด ๊ฐ€์žฅ ํฐ ๋ฐฉํ–ฅ์œผ๋กœ ์ถ•์„ ์ƒ์„ฑํ•˜๊ณ , ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ์ถ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํˆฌ์˜

๋ฒกํ„ฐ ์ถ•์˜ ๊ฐœ์ˆ˜๋งŒํผ์˜ ์ฐจ์›์œผ๋กœ ์›๋ณธ ๋ฐ์ดํ„ฐ ์ฐจ์› ์ถ•์†Œ๋จ

๊ณ ์œ  ๋ฒกํ„ฐ๊ฐ€ PCA์˜ ์ฃผ์„ฑ๋ถ„ ๋ฒกํ„ฐ๋กœ์„œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ์ด ํฐ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋ƒ„
๊ณ ์œณ๊ฐ’์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ์„ ๋‚˜ํƒ€๋ƒ„

1. ์„ ํ˜• ๋ณ€ํ™˜

ํŠน์ • ๋ฒกํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ๊ณต๊ฐ„์—์„œ ๋‹ค๋ฅธ ๊ณต๊ฐ„์œผ๋กœ ํˆฌ์˜
๊ณต๋ถ„์‚ฐ์€ ๋‘ ๋ณ€์ˆœ ๊ฐ„์˜ ๋ณ€๋™(๋ถ„์‚ฐ)์„ ์˜๋ฏธ

2. ๊ณ ์œ  ๋ฒกํ„ฐ

ํ–‰๋ ฌ A๋ฃฐ ๊ณฑํ•˜๋”๋ผ๋„ ๋ฐฉํ–ฅ์ด ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ๊ทธ ํฌ๊ธฐ๋งŒ ๋ณ€ํ•˜๋Š” ๋ฒกํ„ฐ๋ฅผ ์ง€์นญ

Ax = ax (a๋Š” ๊ณ ์œณ๊ฐ’, x๋Š” ๊ณ ์œ  ๋ฒกํ„ฐ)

3. ๊ณต๋ถ„์‚ฐ ํ–‰๋ ฌ

์ •๋ฐฉํ–‰๋ ฌ์ด์ž ๋Œ€์นญํ–‰๋ ฌ

e1์€ ๊ฐ€์žฅ ๋ถ„์‚ฐ์ด ํฐ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง„ ๊ณ ์œ ๋ฒกํ„ฐ์ด๋ฉฐ, e2๋Š” e1์— ์ˆ˜์ง์ด๋ฉด์„œ ๋‹ค์Œ์œผ๋กœ ๊ฐ€์žฅ ๋ถ„์‚ฐ์ด ํฐ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง„ ๊ณ ์œ ๋ฒกํ„ฐ

PCA ์œ„ ์‹์„ ์ด์šฉํ•ด ๋ถ„ํ•ด๋œ ๊ณ ์œ ๋ฒกํ„ฐ๋ฅผ ๊ตฌํ•˜๊ณ  ์ฐพ์€ ๊ณ ์œ ๋ฒกํ„ฐ๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํ˜• ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹

1. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ๊ณต๋ถ„์‚ฐ ํ–‰๋ ฌ์„ ์ƒ์„ฑ
2. ๊ณต๋ถ„์‚ฐ ํ–‰๋ ฌ์˜ ๊ณ ์œ ๋ฒกํ„ฐ์™€ ๊ณ ์œ ๊ฐ’์„ ๊ณ„์‚ฐ
3. ๊ณ ์œ ๊ฐ’์ด ๊ฐ€์žฅ ํฐ ์ˆœ์œผ๋กœ K๊ฐœ ๋งŒํผ ๊ณ ์œ ๋ฒกํ„ฐ๋ฅผ ์ถ”์ถœ
4. ๊ณ ์œ ๊ฐ’์ด ๊ฐ€์žฅ ํฐ ์ˆœ์œผ๋กœ ์ถ”์ถœ๋œ ๊ณ ์œ ๋ฒกํ„ฐ๋ฅผ ์ด์šฉํ•ด ์ƒˆ๋กญ๊ฒŒ ์ž…๋ ฅ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜

์„ž์—ฌ์„œ ๋ถ„ํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— length/width๋กœ ํ’ˆ์ข… ๋ถ„๋ฅ˜ ์–ด๋ ค์›€
-> 4๊ฐœ์˜ ์†์„ฑ(sepal_length, sepal_width, petal_length, petal_width)์„ 2๊ฐœ์˜ PCA ์†์„ฑ์œผ๋กœ ์••์ถ•

1. ์Šค์ผ€์ผ๋ง

์—ฌ๋Ÿฌ ์†์„ฑ์˜ ๊ฐ’์„ ์—ฐ์‚ฐํ•ด์•ผ ๋˜๋ฏ€๋กœ StandardScaler๋ฅผ ์ด์šฉํ•ด ์ •๊ทœ๋ถ„ํฌ๋กœ ์Šค์ผ€์ผ๋ง

from sklearn.preprocessing import StandardScaler

# Target ๊ฐ’์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์†์„ฑ ๊ฐ’์„ StandardScaler๋ฅผ ์ด์šฉํ•ด ํ‘œ์ค€ ์ •๊ทœ ๋ถ„ํฌ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ’๋“ค๋กœ ๋ณ€ํ™˜
iris_scaled= StandardScaler().fit_transform(irisDF.iloc[:, :-1])

2. PCA ํ›ˆ๋ จ

from sklearn.decomposition import PCA 

pca = PCA(n_components=2)

# fit()๊ณผ transform()์„ ํ˜ธ์ถœํ•ด PCA ๋ณ€ํ™˜ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
pca.fit(iris_scaled)
iris_pca = pca.transform(iris_scaled)
print(iris_pca.shape)

PCA๊ฐ€ ๋ถ„์‚ฐ์„ ๊ณ ๋ ค ์ƒˆ๋กœ์šด component(์••์ถ•๋œ ํ”ผ์ฒ˜)๋ฅผ ์ƒ์„ฑ

PCA ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ์ฐจ์ง€ํ•˜๋Š” ๋ณ€๋™์„ฑ ๋น„์œจ์„ ์ œ๊ณต

print(pca.explained_variance_ratio_)

[Output]
[0.72962445 0.22850762]

pca_component_1์ด ์ „์ฒด ๋ณ€๋™์„ฑ์˜ ์•ฝ 72.9% ์ฐจ์ง€, pca_component_2๊ฐ€ ์•ฝ 22.8% ์ฐจ์ง€

Default of credit card client Data set

read_excel ์—๋Ÿฌ ๋ฐœ์ƒํ•ด์„œ csv๋กœ ๋ณ€ํ™˜
'default payment next month' ์†์„ฑ์ด Target ๊ฐ’์œผ๋กœ '์—ฐ์ฒด'์ผ ๊ฒฝ์šฐ 1, '์ •์ƒ ๋‚ฉ๋ถ€'์ผ ๊ฒฝ์šฐ 0
>> ํƒ€๊นƒ๊ฐ’์„ ๋ถ„๋ฅ˜ ์˜ˆ์ธก(์—ฐ์ฒด์ธ ๊ฒฝ์šฐ/ ์ •์ƒ๋‚ฉ๋ถ€์ธ ๊ฒฝ์šฐ๋กœ ๋ถ„๋ฅ˜)

24๊ฐœ์˜ ์†์„ฑ๋ผ๋ฆฌ ์ƒ๊ด€๋„๊ฐ€ ๋งค์šฐ ๋†’์Œ

BILL_AMT1~BILL_AMT6 ์†์„ฑ ๋ผ๋ฆฌ ์ƒ๊ด€๋„๊ฐ€ ๋งค์šฐ ๋†’์Œ
6๊ฐœ์˜ ์†์„ฑ์„ 2๊ฐœ์˜ component๋กœ PCA ๋ณ€ํ™˜

  • scaling & PCA
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
โ€‹
#BILL_AMT1 ~ BILL_AMT6๊นŒ์ง€ 6๊ฐœ์˜ ์†์„ฑ๋ช… ๊ฐ€์ง
cols_bill = ['BILL_AMT'+str(i) for i in range(1, 7)]
print('๋Œ€์ƒ ์†์„ฑ๋ช…:', cols_bill)
โ€‹
#2๊ฐœ์˜ PCA ์†์„ฑ์„ ๊ฐ€์ง„ PCA ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ณ , explained_variance_ratio_ ๊ณ„์‚ฐ์„ ์œ„ํ•ด fit() ํ˜ธ์ถœ
scaler = StandardScaler()
df_cols_scaled = scaler.fit_transform(X_features[cols_bill])
pca = PCA(n_components = 2)
pca.fit(df_cols_scaled)
print('PCA Component ๋ณ„ ๋ณ€๋™์„ฑ:', pca.explained_variance_ratio_)
[Output]
๋Œ€์ƒ ์†์„ฑ๋ช…: ['BILL_AMT1', 'BILL_AMT2', 'BILL_AMT3', 'BILL_AMT4', 'BILL_AMT5', 'BILL_AMT6']
PCA Component ๋ณ„ ๋ณ€๋™์„ฑ: [0.90555253 0.0509867 ]

2๊ฐœ์˜ PCA ์ปดํฌ๋„ŒํŠธ ๋งŒ์œผ๋กœ 6๊ฐœ ์†์„ฑ ๋ณ€๋™์„ฑ์„ ์•ฝ 95% ์ด์ƒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Œ.

์ตœ์ข… ์˜ˆ์ธก ๊ฒฐ๊ณผ๋Š” ์›๋ณธ๊ณผ ๋น„๊ตํ•ด 1~2% ์ •๋„์˜ ์˜ˆ์ธก ์„ฑ๋Šฅ ์ €ํ•˜๋งŒ ๋ฐœ์ƒ
PCA์˜ ๋›ฐ์–ด๋‚œ ์••์ถ• ๋Šฅ๋ ฅ์„ ๋ณด์—ฌ์คŒ


03. LDA(Linear Discriminant Analysis)

์„ ํ˜• ํŒ์—ด ๋ถ„์„๋ฒ•, PCA์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ง€๋„ํ•™์Šต์˜ ๋ถ„๋ฅ˜์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋„๋ก ๊ฐœ๋ณ„ ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ค€์„ ์ตœ๋Œ€ํ•œ ์œ ์ง€ํ•˜๋ฉด์„œ ์ฐจ์›์„ ์ถ•์†Œ

ํด๋ž˜์Šค ๊ฐ„ ๋ถ„์‚ฐ๊ณผ ํด๋ž˜์Šค ๋‚ด๋ถ€ ๋ถ„์‚ฐ ๋น„์œจ์„ ์ตœ๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฐจ์›์„ ์ถ•์†Œ
ํด๋ž˜์Šค ๊ฐ„ ๋ถ„์‚ฐ์€ ์ตœ๋Œ€ํ•œ ํฌ๊ฒŒ ๊ฐ€์ ธ๊ฐ€๊ณ , ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ถ„์‚ฐ์€ ์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋Š” ๋ฐฉ์‹

  • ๋ถ“๊ฝƒ ๋ฐ์ดํ„ฐ ์„ธํŠธ์— LDA ์ ์šฉํ•˜๊ธฐ
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris

iris = load_iris()
iris_scaled = StandardScaler().fit_transform(iris.data)
lda = LinearDiscriminantAnalysis(n_components=2)

lda.fit(iris_scaled, iris.target)
iris_lda = lda.transform(iris_scaled)
print(iris_lda.shape)

iris.target ํด๋ž˜์Šค์˜ ๊ฒฐ์ •๊ฐ’์ด ๋ณ€ํ™˜ ์‹œ์— ํ•„์š”

04. SVD(Singular Value Decomposition)

PCA์™€ ์œ ์‚ฌํ•œ ํ–‰๋ ฌ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์ง€๋งŒ SVD๋Š” ์ •๋ฐฉํ–‰๋ ฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ–‰๊ณผ ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ํ–‰๋ ฌ์—๋„ ์ ์šฉ ๊ฐ€๋Šฅ

SVD(ํŠน์ด๊ฐ’ ๋ถ„ํ•ด), U์™€ V์— ์†ํ•œ ๋ฒกํ„ฐ๋Š” ํŠน์ด ๋ฒกํ„ฐ

Trincated SVD
ํŠน์ด๊ฐ’ ์ค‘ ์ƒ์œ„ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•ด ๋ถ„ํ•ดํ•˜๋Š” ๋ฐฉ์‹
์ธ์œ„์ ์œผ๋กœ ๋” ์ž‘์€ ์ฐจ์›์˜ U, Sigma, V^T๋กœ ๋ถ„ํ•ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›๋ณต ํ–‰๋ ฌ์„ ์ •ํ™•ํ•˜๊ฒŒ ๋‹ค์‹œ ์›๋ณตํ•  ์ˆ˜๋Š” ์—†์Œ. ์›๋ž˜ ์ฐจ์›์˜ ์ฐจ์ˆ˜์— ๊ฐ€๊น๊ฒŒ ์ž˜๋ผ๋‚ผ์ˆ˜๋ก ์›๋ณตํ–‰๋ ฌ์— ๋” ๊นŒ๊น๊ฒŒ ๋ณต์›

Normal SVD๋กœ ๋ถ„ํ•ดํ•ด ๋ถ„ํ•ด๋œ ํ–‰๋ ฌ์˜ ์ฐจ์›๊ณผ Sigma ํ–‰๋ ฌ ๋‚ด์˜ ํŠน์ด๊ฐ’์„ ํ™•์ธ ํ•œ๋’ค ๋‹ค์‹œ Truncated SVD๋กœ ๋ถ„ํ•ด๋œ ํ–‰๋ ฌ์˜ ๋‚ด์ ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋‹ค์‹œ ๋ณต์›๋œ ๋ฐ์ดํ„ฐ์™€ ์›๋ณธ ๋ฐ์ดํ„ฐ๋Š” ์ฐจ์ด ์กด์žฌ

  • ์‚ฌ์ดํ‚ท๋Ÿฐ TruncatedSVD ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ ๋ณ€ํ™˜

๋ฐ์ดํ„ฐ ์„ธํŠธ๊ฐ€ ์Šค์ผ€์ผ๋ง์œผ๋กœ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์ด ๋™์ผํ•ด์ง€๋ฉด ์‚ฌ์ดํ‚ท๋Ÿฐ SVD์™€ PCA๋Š” ๋™์ผํ•œ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰.
PCA๋Š” ๋ฐ€์ง‘ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ๋ณ€ํ™˜๋งŒ ๊ฐ€๋Šฅ, SVD๋Š” ํฌ์†Œ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ๋ณ€ํ™˜๋„ ๊ฐ€๋Šฅ.

05. NMF(Non-Negative Matrix Factorization)

(๋ชจ๋“  ์›์†Œ ๊ฐ’์ด ๋ชจ๋‘ ์–‘์ˆ˜๋ผ๋Š” ๊ฒŒ ๋ณด์žฅ๋˜์–ด์•ผ ํ•จ)
๋‚ฎ์€ ๋žญํฌ๋ฅผ ํ†ตํ•œ ํ–‰๋ ฌ ๊ทผ์‚ฌ ๋ฐฉ์‹์˜ ๋ณ€ํ˜•

X = WH

W(์›๋ณธ ํ–‰๋ ฌ๊ณผ ํ–‰ ํฌ๊ธฐ๋Š” ๋™์ผํ•˜๊ณ  ์—ด ํฌ๊ธฐ๋Š” ์ž‘์€ ํ–‰๋ ฌ)์™€ H(์›๋ณธ ํ–‰๋ ฌ์˜ ํ–‰ํฌ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘๊ณ  ์—ด ํฌ๊ธฐ๋Š” ๊ฐ™์€ ํ–‰๋ ฌ)๋กœ ํ–‰๋ ฌ ๋ถ„ํ•ด

NMF ์ฐธ๊ณ  ์ž๋ฃŒ

์™œ NMF๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?
non-negative ๋ฐ์ดํ„ฐ๋Š” non-negative feature๋กœ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
NMF๊ฐ€ ์œ ์šฉํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ์ถ”์ถœํ•˜๊ฒŒ ๋˜๋Š” feature๋“ค์ด ๋ชจ๋‘ non-negative feature์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
...
๊ทธ๋Ÿฐ๋ฐ, ๋งŽ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” matrix factorization ๋ฐฉ๋ฒ•๋“ค(๊ฐ€๋ น, SVD)์ด๋‚˜ ์ฐจ์› ๊ฐ์†Œ ๋ฐฉ๋ฒ•(์š”์ธ ๋ถ„์„, ์ฃผ์„ฑ๋ถ„ ๋ถ„์„, cluster ๋ถ„์„ ๋“ฑ)์—์„œ๋Š” ํš๋“ํ•  ์ˆ˜ ์žˆ๋Š” feature๋“ค์ด ์Œ์ˆ˜์ด๋ฉด ์•ˆ๋œ๋‹ค๋˜์ง€ ํ•˜๋Š” ์ œํ•œ์‚ฌํ•ญ๊ฐ™์€ ๊ฒƒ์€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์ธ non-negativity๋ฅผ ๋ณด์กดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์„ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค๋Š” ํ•œ๊ณ„์ ์ด ์žˆ๋‹ค. -(Angelo's Math Notes)

  • ์‚ฌ์ดํ‚ท๋Ÿฐ NMF ํด๋ž˜์Šค ์ด์šฉํ•ด 2๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€ํ™˜
from sklearn.decomposition import NMF
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
%matplotlib inline

iris = load_iris()
iris_ftrs = iris.data
nmf = NMF(n_components=2)
nmf.fit(iris_ftrs)
iris_nmf = nmf.transform(iris_ftrs)
plt.scatter(x=iris_nmf[:,0], y= iris_nmf[:,1], c= iris.target)
plt.xlabel('NMF Component 1')
plt.ylabel('NMF Component 2')

plt.show()

์ด๋Ÿฌํ•œ ํ–‰๋ ฌ๋ถ„ํ•ด๋ฅผ ์ ์šฉํ•˜๋ฉด ์›๋ณธํ–‰๋ ฌ์—์„œ ์ž ์žฌ๋œ ์š”์†Œ๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ† ํ”ฝ ๋ชจ๋ธ๋ง์ด๋‚˜ ์ถ”์ฒœ ์‹œ์Šคํ…œ์—์„œ ํ™œ๋ฐœํ•˜๊ฒŒ ์‚ฌ์šฉ๋จ.

profile
for well-being we need nectar and ambrosia

0๊ฐœ์˜ ๋Œ“๊ธ€