A A
[ML] Isomap (์•„์ด์†Œ๋งต)
์ด๋ฒˆ์—๋Š” Isomap์ด๋ผ๋Š” ๋จธ์‹ ๋Ÿฌ๋‹ ๊ธฐ๋ฒ•์— ๋ฐํ•˜์—ฌ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์•„์ด์†Œ๋งต(Isomap)์€ ๋น„์„ ํ˜• ์ฐจ์› ์ถ•์†Œ ๊ธฐ๋ฒ•์œผ๋กœ, ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ์˜ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ ์ €์ฐจ์›์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ(Geodesic Distance)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•˜๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

 

Isomap์˜ ํŠน์ง•

https://towardsdatascience.com/isomap-embedding-an-awesome-approach-to-non-linear-dimensionality-reduction-fc7efbca47a0

 

  • ๋น„์„ ํ˜• ์ฐจ์› ์ถ•์†Œ: Isomap์€ ๋ฐ์ดํ„ฐ์˜ ๋น„์„ ํ˜• ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ ์ฐจ์›์„ ์ถ•์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” PCA์™€ ๊ฐ™์€ ์„ ํ˜• ์ฐจ์› ์ถ•์†Œ ๊ธฐ๋ฒ•์œผ๋กœ๋Š” ์–ด๋ ค์šด ๋ฐ์ดํ„ฐ์˜ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ์ž˜ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜: ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„์˜ ์‹ค์ œ ๊ฑฐ๋ฆฌ(์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์  ๊ด€๊ณ„๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋‚ด์žฌ๋œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ์ž˜ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ: Isomap์€ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ์˜ k๊ฐœ์˜ ์ตœ๊ทผ์ ‘ ์ด์›ƒ์„ ์ฐพ์•„ ์—ฐ๊ฒฐํ•˜๊ณ , ์ด ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค.
  • MDS ์‚ฌ์šฉ: ๋‹ค์ฐจ์› ์ฒ™๋„๋ฒ•(Multidimensional Scaling, MDS)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์ฐจ์› ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. MDS๋Š” ์ž…๋ ฅ๋œ ๊ฑฐ๋ฆฌ ํ–‰๋ ฌ์„ ์ตœ๋Œ€ํ•œ ๋ณด์กดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

Isomap์˜ ๊ธฐ๋ณธ ์›๋ฆฌ

๊ทธ๋Ÿฌ๋ฉด Isomap์˜ ๊ธฐ๋ณธ ์›๋ฆฌ๋Š” ์–ด๋– ํ•œ ๊ฒƒ๋“ค์ด ์žˆ์„๊นŒ์š”? 

 

https://minye-lee19.gitbook.io/sw-engineer/business-analytics/class/1-6-isomap-and-lle

์ตœ๊ทผ์ ‘ ์ด์›ƒ ๊ทธ๋ž˜ํ”„ ๊ตฌ์„ฑ (Constructing Nearest Neighbor Graph)

  • ๊ฐ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ์— ๋Œ€ํ•ด, k๊ฐœ์˜ ์ตœ๊ทผ์ ‘ ์ด์›ƒ์„ ํƒ์ƒ‰ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ทธ๋ž˜ํ”„๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ๊ฐ„์˜ ๊ทผ์ ‘์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, Isomap์˜ ํ•ต์‹ฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ (Calculating Geodesic Distances)

  • ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ์Œ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Dijkstra's algorithm)๊ณผ ๊ฐ™์€ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์ฐจ์› ์ฒ™๋„๋ฒ• (Multidimensional Scaling, MDS)

  • ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ ํ–‰๋ ฌ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„, ์ €์ฐจ์› ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. MDS๋Š” ์ด ๊ฑฐ๋ฆฌ ํ–‰๋ ฌ์„ ๋ณด์กดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ, ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ (Calculating Geodesic Distances)

Isomap์—์„œ๋Š” ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ์Œ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ i์™€ j์‚ฌ์ด์˜ ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ dg(i. j)๋Š” ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

  • ์œ„์˜ ์ˆ˜์‹์„ ๋ณด๋ฉด P(i, j)๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ i์™€ j ์‚ฌ์‹œ์˜ ๋ชจ๋“  ๊ฒฝ๋กœ์˜ ์ง‘ํ•ฉ, d(u, v)๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ์—ฐ๊ฒฐ๋œ ํฌ์ธํŠธ u์™€ v๊ฐ„์˜ ๊ฑฐ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๋‹ค์ฐจ์› ์ฒ™๋„๋ฒ• (Multidimensional Scaling, MDS)

๋˜ํ•œ Isomap ์—์„œ ๋‹ค์ฐจ์› ์ฒ™๋„๋ฒ• (MDS)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์ฐจ์› ์ฒ™๋„๋ฒ• (MDS)์—์„  ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ ํ–‰๋ ฌ D๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์ฐจ์› ๊ณต๊ฐ„์—์„œ ์œ ์‚ฌํ•˜๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ ๋“ค์˜ ๋ฐฐ์น˜๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

Isomap์˜ ์žฅ, ๋‹จ์  & ๊ฐœ์„  ๋ฐฉ๋ฒ•

Isomap์˜ ์žฅ์ 

  1. ๋น„์„ ํ˜• ๊ตฌ์กฐ ๋ณด์กด: Isomap์€ ๋ฐ์ดํ„ฐ์˜ ๋น„์„ ํ˜• ๊ตฌ์กฐ๋ฅผ ์ž˜ ๋ณด์กดํ•˜๋ฉด์„œ ์ฐจ์›์„ ์ถ•์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋น„์ •ํ˜•์ ์ด๊ณ  ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ์— ํŠนํžˆ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ ์‚ฌ์šฉ: ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์  ๊ด€๊ณ„๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ๋ฐ์ดํ„ฐ์˜ ๋‚ด์žฌ๋œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”: ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ๋ฅผ ์ €์ฐจ์› ๊ณต๊ฐ„์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์–ด, ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Isomap์˜ ๋‹จ์ 

  1. ๊ณ„์‚ฐ ๋ณต์žก์„ฑ: ์ตœ๊ทผ์ ‘ ์ด์›ƒ ๊ทธ๋ž˜ํ”„ ๊ตฌ์„ฑ ๋ฐ ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ ๊ณผ์ •์—์„œ ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์—์„œ ๊ณ„์‚ฐ ๋ณต์žก์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋…ธ์ด์ฆˆ์— ๋ฏผ๊ฐ: ๋ฐ์ดํ„ฐ์— ๋…ธ์ด์ฆˆ๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ, ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๊ฐ€ ์™œ๊ณก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ €์ฐจ์› ์ž„๋ฒ ๋”ฉ์˜ ํ’ˆ์งˆ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. k๊ฐ’ ๊ฒฐ์ •: ์ ์ ˆํ•œ k๊ฐ’์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค. k๊ฐ’์ด ๋„ˆ๋ฌด ์ž‘๊ฑฐ๋‚˜ ํฌ๋ฉด ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์  ๋ณด์กด์ด ์ ์ ˆํžˆ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Isomap์˜ ๊ฐœ์„  ๋ฐฉ๋ฒ•

  1. ์ตœ์ ์˜ k๊ฐ’ ์„ ํƒ
    • ๋‹ค์–‘ํ•œ k๊ฐ’์„ ์‹œ๋„ํ•˜์—ฌ ์ตœ์ ์˜ k๊ฐ’์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ์„ ํƒ์€ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์  ๋ณด์กด์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
  2. ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ
    • ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ๋…ธ์ด์ฆˆ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ์˜ ์™œ๊ณก์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋Š” ๋” ์ •ํ™•ํ•œ ์ง€์˜ค๋ฐ์‹ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
    • ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ, ๋จผ์ € PCA ๋“ฑ์˜ ์ฐจ์› ์ถ•์†Œ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์—ฌ ์ฐจ์›์„ ์ค„์ธ ํ›„ Isomap์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ณ„์‚ฐ ๋น„์šฉ์„ ์ค„์ด๋ฉด์„œ๋„ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์š” ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Isomap Example Code (by Python)

# ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.manifold import Isomap
import matplotlib.pyplot as plt

 

 

# Iris ๋ฐ์ดํ„ฐ์…‹ ๋กœ๋“œ
iris = load_iris()
X = iris.data
y = iris.target

# ๋ฐ์ดํ„ฐ ํ‘œ์ค€ํ™”
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Isomap ์ ์šฉ
isomap = Isomap(n_components=2, n_neighbors=5)
X_isomap = isomap.fit_transform(X_scaled)

# Isomap ๊ฒฐ๊ณผ ์‹œ๊ฐํ™”
plt.figure(figsize=(10, 7))
for target in np.unique(y):
    plt.scatter(X_isomap[y == target, 0], X_isomap[y == target, 1], label=iris.target_names[target])
plt.xlabel('Isomap Component 1')
plt.ylabel('Isomap Component 2')
plt.title('Isomap of Iris Dataset')
plt.legend()
plt.show()