[Week 2-1] ๐Ÿ“ŠNumpy, ๋ฒกํ„ฐ, ํ–‰๋ ฌ

Jadeยท2021๋…„ 1์›” 25์ผ
0

๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech

๋ชฉ๋ก ๋ณด๊ธฐ
6/54

2์ฃผ์ฐจ ์›”์š”์ผ

  • Numpy
  • Numpy operation
  • ๋ฒกํ„ฐ
  • ํ–‰๋ ฌ

๐Ÿ“Š[Numpy]

์„ ํ˜•๋Œ€์ˆ˜๋‚˜ ๊ณผํ•™ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. ๋‹ค์–‘ํ•œ ๊ณ ๊ธ‰ ๊ณ„์‚ฐ์„ ์ง€์›ํ•œ๋‹ค.
np๋ผ๋Š” alias๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒŒ ์•”๋ฌต์ ์ธ ๊ทœ์น™์ด๋‹ค. import numpy as np

  • array
    ๋„˜ํŒŒ์ด์˜ array๋Š” np.array()๋กœ ์„ ์–ธํ•˜๋Š”๋ฐ, ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ ๊ฐ™์€ ๊ฒŒ ์•„๋‹ˆ๋ผ ๋„˜ํŒŒ์ด ๊ณ ์œ ์˜ ndarray ํƒ€์ž…์ด๋‹ค. ndarray ๊ฐ์ฒด๋Š” ๋™์  ํƒ€์ดํ•‘์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— C์–ธ์–ด์˜ array์ฒ˜๋Ÿผ ํ•œ ์ข…๋ฅ˜์˜ data type๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. (์‹ค์ œ๋กœ C๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค)
import numpy as np

myarr = np.array([1, "2", 3.0], float)
# ์—ฌ๋Ÿฌ ํƒ€์ž…์ด ์„ž์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ ์ž๋ฃŒํ˜•์„ ์ง€์ •ํ•ด์„œ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค

print(myarr)

>>> [1. 2. 3.]

๋ฆฌ์ŠคํŠธ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์— ์—ฌ๊ธฐ์ €๊ธฐ ํฉ์–ด์ง„ ๊ฐ’๋“ค์˜ ์ฃผ์†Œ๋งŒ ๋ชจ์•„ ๋†“์€ ์ž๋ฃŒํ˜•์ธ ๋ฐ˜๋ฉด array๋Š” ๊ฐ’๋“ค์ด ์ฐจ๋ก€๋Œ€๋กœ(์ง‘์–ด๋„ฃ์€ ์ˆœ์„œ๋Œ€๋กœ) ๋ชจ์—ฌ ์žˆ์–ด์„œ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.


  • array์˜ ์†์„ฑ shape, ndim, size
print(np.array([1, 2, 3, 4]).shape)
>>> (4,) # shape ์†์„ฑ์€ ํŠœํ”Œ

print(np.array([[1,2,3,4], [5,6,7,8]]).shape)
>>> (2,4) # ์ฃผ์˜!!! (4,2)๊ฐ€ ์•„๋‹ˆ๋‹ค!!!

ndarray ๊ฐ์ฒด์˜ ์†์„ฑ shape๋ฅผ ์ฐ์–ด๋ณด๋ฉด ๋‚˜์ค‘์— ์ถ”๊ฐ€๋œ axis๊ฐ€ ๋” ๋จผ์ € ๋‚˜์˜จ๋‹ค!

ndim ์†์„ฑ์€ ์ฐจ์› ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๊ณ , size ์†์„ฑ์€ ์ด ์›์†Œ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

print(np.array([[1,2,3,4], [5,6,7,8]]).ndim)
print(np.array([[1,2,3,4], [5,6,7,8]]).size)
>>> 2
    8

  • reshape, flatten
    reshape()๋Š” array์˜ ์ฐจ์›์„ ์žฌ์กฐ์ •ํ•ด์ค€๋‹ค. ๋‹จ, ์žฌ์กฐ์ • ์ „ํ›„์˜ size๋Š” ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.
myarr = np.array([1,2,3,4,5,6,7,8])
print(myarr.reshape(4,2)) # ์ฐจ์› ํ‘œ๊ธฐ ์ฃผ์˜
>>> [[1 2]
     [3 4]
     [5 6]
     [7 8]]

reshape์˜ ์ธ์ˆ˜ ์ค‘ ํ•˜๋‚˜์— -1์„ ์ง‘์–ด๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค(unknown dimension). ๊ทธ๋Ÿฌ๋ฉด array์˜ size์™€ ์ž…๋ ฅํ•œ ํ•ญ๋ชฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์•Œ์•„์„œ ์ฐจ์›์„ ์žฌ์กฐ์ •ํ•ด์ค€๋‹ค.

myarr = np.array([1,2,3,4,5,6,7,8])
print(myarr.reshape(2,-1,2))
>>> [[[1 2]
      [3 4]]

     [[5 6]
      [7 8]]]

flatten()์€ array๋ฅผ 1์ฐจ์›์œผ๋กœ ๋‚ฉ์ž‘ํ•˜๊ฒŒ ํŽด ์ค€๋‹ค.

myarr = np.array([[1,2,3,4], [5,6,7,8]])
print(myarr.flatten())

>>> [1, 2, 3, 4, 5, 6, 7, 8]

  • arange
    ๋ฆฌ์ŠคํŠธ์˜ range์™€ ๋น„์Šทํ•œ๋ฐ step์„ float๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
myarr = np.array(arange(0,2,0.5))
print(myarr)
>>> [0.,  0.5,  1.,  1.5]

๐Ÿ“Š[Numpy operation]

array๋ผ๋ฆฌ์˜ ์—ฐ์‚ฐ์€ element-wiseํ•˜๋‹ค. (๋ฒกํ„ฐ ์—ฐ์‚ฐํ•˜๋“ฏ์ด ์›์†Œ๋ผ๋ฆฌ ์—ฐ์‚ฐํ•œ๋‹ค)

  • axis
    ์—ฐ์‚ฐ์˜ ๊ธฐ์ค€์ด ๋˜๋Š” dimension์˜ ์ถ•. 0๋ถ€ํ„ฐ ์„ธ๋ฉฐ ์ƒˆ๋กœ ์ƒ๊ธด ์ถ•์ด ํ•ญ์ƒ axis 0์ด๋‹ค.
    2์ฐจ์› array๋Š” 1์ฐจ์› array๋ฅผ ์Œ“์•„์„œ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ๊นŒ ๊ฐ€๋กœ์ถ•์ด axis 1, ์„ธ๋กœ์ถ•์ด axis 0์ด๋‹ค.

  • ์—ฐ๊ฒฐํ•˜๊ธฐ
    ๋‘ array๊ฐ€ ๋ถ™๋Š” ๋ถ€๋ถ„์˜ ์ฐจ์›์ด ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.

    • concatenate([arr1, arr2]) : ์ถ•์„ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ง€์ •ํ•œ ์ถ• ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.
    • vstack([arr1, arr2]) : ๋‘ array๊ฐ€ ์ˆ˜์ง์œผ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.
    • hstack([arr1, arr2]) : ๋‘ array๊ฐ€ ์ˆ˜ํ‰์œผ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.

๐Ÿ“ˆ[๋ฒกํ„ฐ]

๊ณต๊ฐ„ ์ƒ์—์„œ ํ•œ ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•. ํ‘œ๊ธฐํ•  ๋•Œ๋Š” ์ฃผ๋กœ x์ฒ˜๋Ÿผ ์†Œ๋ฌธ์ž ๋ณผ๋“œ์ฒด๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • norm(๋…ธ๋ฆ„, ๋†ˆ)
    ์›์ ์—์„œ ์–ด๋–ค ๋ฒกํ„ฐ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ์‹. L1 norm, L2 norm ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์ธ ์ž„์˜์˜ d์ฐจ์›์— ๋Œ€ํ•ด ์„ฑ๋ฆฝํ•œ๋‹ค.

    • L1 norm, ||x||1 : ๊ฐ ๋ฒกํ„ฐ์˜ ์›์†Œ๋“ค์˜ ์ ˆ๋Œ€๊ฐ’์˜ ํ•ฉ
    • L2 norm, ||x||2 : ํ”ผํƒ€๊ณ ๋ผ์Šค ์ •๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ์œ ํด๋ฆฌ๋“œ ๊ฑฐ๋ฆฌ

    ๊ฑฐ๋ฆฌ์˜ ์ •์˜๋กœ ์–ด๋–ค norm์„ ์‚ฌ์šฉํ•˜๋ƒ์— ๋”ฐ๋ผ ๊ธฐํ•˜ํ•™์  ์„ฑ์งˆ๋„ ๋‹ฌ๋ผ์ง„๋‹ค.
    ์›์€ ์›์ ์—์„œ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ(norm)๊ฐ€ 1์ธ ์ ๋“ค์˜ ์ง‘ํ•ฉ์ธ๋ฐ, L1 norm ๊ณต๊ฐ„ ์ƒ์˜ ์›๊ณผ L2 norm ๊ณต๊ฐ„ ์ƒ์˜ ์›์€ ๋ชจ์Šต์ด ์•„์ฃผ ๋‹ค๋ฅด๋‹ค.

  • ๋ฒกํ„ฐ์˜ ๋‚ด์ 
    ํ•œ ๋ฒกํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๋ฒกํ„ฐ์— ํˆฌ์˜ํ–ˆ์„ ๋•Œ์˜ ๊ธธ์ด.
    ๋ฒกํ„ฐ y์— x๋ฅผ ํˆฌ์˜ํ•˜๋ฉด ||y|| ||x|| cosฮธ๊ฐ€ ๋˜๋Š”๋ฐ, ์ด๊ฒƒ์€ x์˜ ์ •์‚ฌ์˜์„ y์˜ ๊ธธ์ด๋งŒํผ ์กฐ์ •ํ•œ ๊ฐ’์ด๋‹ค. ๋‚ด์ ์„ ์ด์šฉํ•ด ๋‘ ๋ฒกํ„ฐ์˜ ์œ ์‚ฌ๋„๋ฅผ ์ธก์ •ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

  • ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ
    ๋ฒกํ„ฐ์˜ ๋บ„์…ˆ๊ณผ norm์„ ํ†ตํ•ด ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๋‘ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ : ||x - y||

  • ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฐ๋„
    L2 norm์œผ๋กœ๋งŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์ œ2์ฝ”์‚ฌ์ธ๋ฒ•์น™์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋ถ„์ž๋ฅผ ์‰ฝ๊ฒŒ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฒกํ„ฐ์˜ ๋‚ด์ ์„ ์‚ฌ์šฉํ•œ๋‹ค.
    <x,y> : ๋ฒกํ„ฐ x, y์˜ ๋‚ด์ 


๐Ÿ“ˆ[ํ–‰๋ ฌ]

  • ํ–‰๋ ฌ์˜ ์˜๋ฏธ
    ํ–‰๋ ฌ์€ ๋‘ ๊ฐ€์ง€ ์˜๋ฏธ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ํ–‰๋ ฌ์„ ํ‘œ๊ธฐํ•  ๋•Œ๋Š” ์ฃผ๋กœ A์ฒ˜๋Ÿผ ๋Œ€๋ฌธ์ž ๋ณผ๋“œ์ฒด๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    • ๋ฒกํ„ฐ๋“ค์˜ ์ง‘ํ•ฉ
      n์ฐจ์› ๋ฒกํ„ฐ๋ฅผ n์ฐจ์› ๊ณต๊ฐ„ ์ƒ์˜ ์ ์œผ๋กœ ๋ณธ๋‹ค๋ฉด ํ–‰๋ ฌ์€ ๊ทธ ์ ๋“ค์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž
      ์–ด๋–ค ๋ฒกํ„ฐ x์— ํ–‰๋ ฌ A๋ฅผ ๊ณฑํ•˜๋ฉด ๋ฒกํ„ฐ์˜ ์ฐจ์›์ด ๋ณ€ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ–‰๋ ฌ์€ ๋ฒกํ„ฐ๋ฅผ ๋‹ค๋ฅธ ์ฐจ์›์˜ ๊ณต๊ฐ„์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฒกํ„ฐ์— ๋ณ€ํ™˜ํ–‰๋ ฌ์„ ๊ณฑํ•˜๋ฉด ์ •๋ง ๊ทธ๋ ‡๊ฒŒ ๋œ๋‹ค)

  • ํ–‰๋ ฌ์˜ ๊ณฑ์…ˆ
    ๋‘ ํ–‰๋ ฌ A์™€ B๋ฅผ ๊ณฑํ•œ ํ–‰๋ ฌ AB์˜ ์„ฑ๋ถ„ (i, j)๋Š” ๊ฐ๊ฐ A์˜ i๋ฒˆ์งธ ํ–‰๋ฒกํ„ฐ์™€ j๋ฒˆ์งธ ์—ด๋ฒกํ„ฐ์˜ ๋‚ด์ ์ด๋‹ค.
    ํ–‰๋ ฌ์˜ ๊ณฑ์…ˆ์€ ์ฐจ์›์ด ๋งž์•„์•ผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(a x n ํ–‰๋ ฌ๊ณผ n x b ํ–‰๋ ฌ๋ผ๋ฆฌ), ๊ตํ™˜๋ฒ•์น™์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ์—ญํ–‰๋ ฌ
    ํ–‰๋ ฌ๊ณฑ์„ ๋˜๋Œ๋ฆฌ๋Š” ์—ฐ์‚ฐ์œผ๋กœ, ํ–‰๋ ฌ A-1๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ธ๋‹ค. ํ–‰๋ ฌ์— ์—ญํ–‰๋ ฌ์„ ๊ณฑํ•˜๋ฉด ๋‹จ์œ„ํ–‰๋ ฌ I๊ฐ€ ๋˜๋ฉฐ, ํ–‰๋ ฌ์— ์—ญํ–‰๋ ฌ์„ ๊ณฑํ•  ๋•Œ๋Š” ๊ตํ™˜๋ฒ•์น™์ด ์„ฑ๋ฆฝํ•œ๋‹ค. ์ •์น™ ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์—ญํ–‰๋ ฌ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. (n x n ํ–‰๋ ฌ์ด๋ฉฐ determinant๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค)
    numpy์—์„œ๋Š” np.linalg.inv(A)๋ฅผ ํ†ตํ•ด ์—ญํ–‰๋ ฌ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์˜์‚ฌ ์—ญํ–‰๋ ฌ(pseudo inverse, ๋ฌด์–ด-ํŽœ๋กœ์ฆˆ ์—ญํ–‰๋ ฌ)
    ์ •์น™ ํ–‰๋ ฌ์ด ์•„๋‹Œ ํ–‰๋ ฌ (n x m์ด๊ฑฐ๋‚˜ determinant๋ฅผ ๊ตฌํ•  ์ˆ˜ ์—†๋Š” ํ–‰๋ ฌ)์˜ ์—ญํ–‰๋ ฌ๋กœ, A+๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ธ๋‹ค. n๊ณผ m์˜ ํฌ๊ธฐ ์ฐจ์ด์— ๋”ฐ๋ผ ์ขŒ์ธก/์šฐ์ธก์œผ๋กœ ๊ณฑํ•˜๋Š” ์œ„์น˜๊ฐ€ ๋‹ค๋ฅด๋‹ค.

    • n >= m (์šฐ ์—ญํ–‰๋ ฌ)
      A+ = (ATA)-1 AT
      AA+ = I

    • n <= m (์ขŒ ์—ญํ–‰๋ ฌ)
      A+ = AT (ATA)-1
      A+A = I

      ์ขŒ / ์šฐ๋กœ ๊ณฑํ•˜๋Š” ์œ„์น˜๊ฐ€ ๋‹ค๋ฅธ ์ด์œ ๋Š” ํ–‰๋ ฌ์˜ ๋ชจ์–‘ ๋•Œ๋ฌธ์ด๋‹ค.

      ์—ฐ๋ฆฝ๋ฐฉ์ •์‹์˜ ํ•ด๊ฐ€ ๋ถ€์ •(๋ณ€์ˆ˜>์‹)์ธ ๊ฒฝ์šฐ ์˜์‚ฌ ์—ญํ–‰๋ ฌ์„ ์ด์šฉํ•˜๋ฉด ๋ฌดํ•œํ•œ ํ•ด ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ[ํ”ผ์–ด ์„ธ์…˜]

์ŠคํŒŒํฌ์™€ ํ•˜๋‘ก์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด๋‹ค. ์ŠคํŒŒํฌ์™€ ํ•˜๋‘ก ๋ชจ๋‘ ํด๋Ÿฌ์Šคํ„ฐ ์ปดํ“จํŒ… ํ™˜๊ฒฝ์—์„œ ๋น…๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์ฒ˜๋ฆฌ, ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ, ์ŠคํŒŒํฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ค ๋ชป ์˜ฌ๋ฆด ์ •๋„๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‘ก์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ ๋ฐ–์—๋„ ์› ํ•ซ ์ธ์ฝ”๋”ฉ ๋“ฑ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ์˜ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ์™€ ์˜ˆ์ธก/๋ถ„๋ฅ˜ ๋ชจ๋ธ์˜ ์ž‘๋™ ๋ฐฉ์‹ ์ฐจ์ด์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด๋‹ค.

profile
๋ฐ˜๊ฐ€์›Œ์šฉ

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