[Day 8] Math for AI - Pandas & MLP
๐ Pandas - Python Data Analysis Library
- Panel datas -> Pandas๋ก R๊ณผ ๋น์ทํ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํ์ง๋ง numpy์ ํตํฉํด ๊ฐ๋ ฅํ "์คํ๋ ๋์ํธ" ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก Python๊ณ์ ์์ ์ด๋ผ ๋ถ๋ฆฐ๋ค.
- ์ธ๋ฑ์ฑ, ์ฐ์ฐ์ฉ ํจ์, ์ ์ฒ๋ฆฌ ํจ์ ๋ฑ์ ์ ๊ณตํ๊ณ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ํต๊ณ ๋ถ์์ ์ํด ์ฌ์ฉํ๊ธฐ ์ข๋ค.
๐ฅ Pandas์ Data Frame ๊ตฌ์ฑ
- ์๋์ ๊ฐ์ด ํ๋์ ํ ์ด๋ธ์ DataFrame์ด๋ผ ํ๊ณ df๋ก ์ค์ฌ์ ๋ถ๋ฅธ๋ค.
- ํ Column์ ์ด์ Series๋ผ๊ณ ๋ถ๋ฆ
๐ฅ Series - column vector๋ก ํด๋นํ๋ ๋ฐ์ดํฐ์ ๋ชจ์ object
- index๋ฅผ ์ซ์ ๋ฟ๋ง ์๋๋ผ ์์ด๋ก๋ ๊ฐ๋ฅ
- astype() ํจ์๋ก Series data type์ ๋ณ๊ฒฝํ ์ ์์.
- values, index ๋ฑ์ ํค์๋ ์ฌ์ฉ ๊ฐ๋ฅ
- loc() : index location / iloc() : index position
-> loc์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค์ ์ด๋ฆ์ ์ฐพ์๊ฐ์ ์๋ผ์ค๋ค
-> iloc์ ๊ฒฝ์ฐ๊ฐ ์๋ list์์ ์๊ณ ์๋ ์๋ฏธ๋ก ์ฐ์ธ๋ค
๐ฅ Data Frame - Series object๋ฅผ ๋ชจ์๋ ๊ฒ.
- ๋๋ถ๋ถ csvํ์ผ์ ๋ถ๋ฌ์์ ์ฒ๋ฆฌํ๋ค.(Dict type์ผ๋ก๋ data๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์์)
- del, drop()์ผ๋ก column ์ญ์ ๊ฐ ๊ฐ๋ฅํ์ง๋ง del์ ๊ฒฝ์ฐ ์๋์ df์ ์ํฅ์ ์ฃผ๊ณ drop์ ๊ฒฝ์ฐ๋ inplace = true๋ฅผ ์ฌ์ฉํด์ผ ์๋ณธ df์ ์ํฅ์ ์ค
- Selection
โ> df["a"].read(3) <- ํ๊ฐ์ column ์ ํ์(Seriesํํ๋ก ์ถ๋ ฅ) <-> df[['a']]๋ก ํ๋ฉด Dataframeํํ๋ก ๋ฐํ
โ> df[['a', 'b', 'c',]].head(3) <- ์ฌ๋ฌ๊ฐ์ column์ dataframeํ์์ผ๋ก ๋ฐํ, head(3)์ ์์์ 3๊ฐ์ ๋ฐ์ดํฐ๋ง ๋ฐํ
โ> df[:3] - column์ด ์๋ index๊ธฐ์ค์ผ๋ก row๊ฐ ๋ฐํ
โ> df['a'][:3] - column๊ณผ ํจ๊ป ์ฌ์ฉ์, ํด๋น column์ row๊ฐ ๋ฐํ
โ> df[['name', 'street']][:2] - column๊ณผ index number
โ> df.loc[['a', 'b']]['name', 'stree'] - column๊ณผ index name
โ> df.iloc[:2, :2] - column number ๊ณผ index number
- Reindex
-> df.index = list(range(0, 15)) - index ์ง์ (0~14)
-> df.reset_index() - index ์ด๊ธฐํ(๋ค๋ฅธ ์ด๋ฆ์ index์๋๋ผ๋ 0๋ถํฐ ์์ํด index ์ง์ )
โ> drop = True ์, ๊ธฐ์กด index ์ญ์
โ> inplace = True ์, data frame ์์ฒด๊ฐ ๋ณํ
- drop(index, axis, inplace)๋ฅผ ์ฌ์ฉํ์ฌ column์ ์ญ์ ์ํฌ ์ ์์
๐ฅ Data Frame Operations
- Series: add(+)๋ก ๊ฐ์ ์ธ๋ฑ์ค๋ผ๋ฆฌ ์ฐ์ฐ(๋ง์ฝ ๊ฒน์น๋ index๊ฐ ์๋ค๋ฉด NaN๊ฐ ๋ฐํ)
- data frame: add(+)๋ก column๊ณผ index๋ชจ๋ ๊ณ ๋ คํด ์ฐ์ฐ
โ> add์ฐ์ฐ์ ์ฌ์ฉ์ fill_value=0์ ์ฌ์ฉํ์ฌ column๊ณผ row์ index๊ฐ ๋ฌ๋ผ๋ 0์ผ๋ก ๊ฐ์ฃผ(sub, mul div ๋ค ๊ฐ๋ฅ)
- Series + data frame: add๋ก ๊ฐ๋ฅํ๊ณ Series๊ฐ broadcating๋์ด ์ฐ์ฐ๋๋ค
๐ฅ Map: function, dict, sequenceํ ์๋ฃ๋ฑ์ผ๋ก ๋์ฒด ๊ฐ๋ฅ(lambda ์ฌ์ฉ ๊ฐ๋ฅ)
-> dictionary type์ผ๋ก ๊ต์ฒด๊ฐ ๊ฐ๋ฅ(data ์๋ค๋ฉด NaN๊ฐ)
-> ๊ฐ์ ์์น๋ก ๋ฐ์ดํฐ๋ฅผ ์นํ
- replace: Mapํจ์์ ๊ธฐ๋ฅ ์ค ๋ฐ์ดํฐ ๋ณํ๋ง ๋ด๋นํ๋ ํจ์ -> ๋ฐ์ดํฐ ๋ณํ ์ ๋ง์ด ์ฌ์ฉ
- Apply: map๊ณผ ๋ฌ๋ฆฌ series ์ ์ฒด(column)์ ํด๋น ํจ์๋ฅผ ์ ์ฉํ๋ ํจ์
-> ์ ๋ ฅ๊ฐ์ด Series๋ฐ์ดํฐ๋ก ์ ๋ ฅ๋ฐ์ handling ๊ฐ๋ฅ
-> ๋ด์ฅ ์ฐ์ฐ ํจ์๋ ์ฌ์ฉ๊ฐ๋ฅ(sum, mean, std ๋ฑ)
-> scalar๊ฐ ์ด์ธ์ Series๋ก ๋ณํ ๊ฐ๋ฅ
-> element๋จ์๋ก ํจ์๋ฅผ ์ ์ฉํ ์๋ ์์
๐ฅ pandas built-in function
- describe - numeric type ๋ฐ์ดํฐ์ ์์ฝ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค
- unique - Series data์ ์ ์ผํ ๊ฐ์ list๋ก ๋ฐํ
- sum - axis๋ก column(0) ๋๋ row(1)๊ฐ์ ์ฐ์ฐ ์ง์(sub, mean, min, max, count, median, mad, var ๋ฑ ์ง์)
- is_null - column or row ๊ฐ์ NaN๊ฐ์ index๋ฅผ ๋ฐํ(sum๊ณผ ํจ๊ป ์ฌ์ฉํด NaN๊ฐ์ด ๋ช๊ฐ์ธ์ง ํ์ )
- sort_values - column ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ sorting(ascenting์ ์ฌ์ฉํด ์ค๋ฆ(True)/๋ด๋ฆผ(False) ๊ฒฐ์ )
- correlation & covariance - ์๊ด๊ณ์์ ๊ณต๋ถ์ฐ์ ๊ตฌํ๋ ํจ์(corr, cov, corrwith - ์ ์ฒด์์ ๋น๊ต)
๐ ๋ฅ๋ฌ๋ ํ์ต๋ฐฉ๋ฒ ์ดํดํ๊ธฐ
๐ฅ ์ ํ๋ชจ๋ธ
- ์์ ์์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์๊ณผ ๊ฐ์ด ๋์ค๊ฒ ๋๋ค.
- d๊ฐ์ ๋ณ์๋ก p๊ฐ์ ์ ํ๋ชจ๋ธ์ ๋ง๋ค์ด์ p๊ฐ์ ์ ์ฌ๋ณ์๋ฅผ ์ค๋ช ํ๋ ๋ชจ๋ธ์ ์์ํด ๋ณผ์ ์๋ค.
- ์ ์ W๋ผ๊ณ ๋งํ ์ ์๋ค.
๐ฅ Softmaxํจ์
- ๋ถ๋ฅ๋ฌธ์ ๋ฅผ ํ๋ ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐ์ผ๋ก ๋ชจ๋ธ์ ์ถ๋ ฅ์ ํ๋ฅ ๋ก ํด์ํ ์ ์๊ฒ ๋ณํํด ์ฃผ๋ ์ฐ์ฐ
-> ex) [0, 1, 2]๋ฅผ softmax ์ทจํด์ฃผ์์ ๋, [0, 0.34, 0.66]์ด ๋์ค๋ ๊ฒ
- ์ถ๋ก ์์๋ One-hot encoding์ ์ฌ์ฉํด ์ต๋๊ฐ์ ๊ฐ์ง ์ฃผ์๋ง ์ถ๋ ฅํ๋ ์ฐ์ฐ์ ์ฌ์ฉํ๋ค.(์ต๋๊ฐ - 1, ๋๋จธ์ง - 0)
๐ฅ ์ ๊ฒฝ๋ง์ ์์์ผ๋ก ๋ถํดํด๋ณด์
- ๋ถ๋ฅ(Classification)์์ softmax๋ฅผ ์ฌ์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ฒ๋ผ ๋น์ ํ ๋ฌธ์ ๋ฅผ ํ๋ ์ ์ ํ Activation Function(ํ์ฑ ํจ์)๋ฅผ ์ด์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
- ํ์ฑ ํจ์(Activation Function, sigma): ๋น์ ํ ํจ์๋ก ์ ์ฌ๋ฒกํฐ O=(O1, O2, ..., Op)์ ๊ฐ ๋ ธ๋์ ๊ฐ๋ณ์ ์ผ๋ก ์ ์ฉํ์ฌ ์๋ก์ด ์ ์ฌ๋ฒกํฐ H=(sigma(O1), ..., sigma(Op))(๋ด๋ฐ, Hidden vector๋ผ๊ณ ๋ ๋ถ๋ฆผ)๋ฅผ ๋ง๋ฌ
-> ํ์ฑ ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๋ฅ๋ฌ๋์ ์ ํ ๋ชจํ๊ณผ ์ฐจ์ด๊ฐ ์๋ค.(๋ฅ๋ฌ๋์์๋ Relu๋ฅผ ๋ง์ด ์)
- ์ ๊ฒฝ๋ง์ ์ ํ๋ชจ๋ธ๊ณผ ํ์ฑํจ์๋ฅผ ํฉ์ฑํ ํจ์์ด๋ค.
๐ฅ MLP(Multi-Layer Perceptron, ๋ค์ธต ํผ์ ํธ๋ก )
- ์ ๊ฒฝ๋ง์ด ์ฌ๋ฌ์ธต ํฉ์ฑ๋ ํจ์
- Parameter์ ๊ฐ์๋ L๊ฐ์ ๊ฐ์ค์น ํ๋ ฌ(w1, w2, ..., wl)๊ณผ biasํ๋ ฌ(b1, b2, ..., bl)๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์์ฐจ์ ์ผ๋ก ์ ๊ฒฝ๋ง์ ๊ณ์ฐํด ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ฉด Forward Propagation(์์ ํ)๋ผ๊ณ ํ๊ณ , ์ด ๊ณผ์ ์ ํ์ต์ด ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ๊ฒ์ด๋ค.
๐ ์ ์ธต์ ์ฌ๋ฌ๊ฐ ์๋ ๊ฑด๊ฐ์?
- ์ด๋ก ์ ์ผ๋ก๋ 2๊ฐ์ ์ธต์ผ๋ก๋ ์์์ ์ฐ์ํจ์๋ฅผ ๊ทผ์ฌํ ์ ์๋ค(Universial approximation theorem)
- ํ์ง๋ง, ์ธต์ด ๊น์ด์ง๋ฉด ๋ชฉ์ ํจ์์ ๊ทผ์ฌํ๋๋ฐ ํ์ํ ๋ด๋ฐ(๋ ธ๋)์ ์์๊ฐ ํจ์ฌ ๋นจ๋ฆฌ ์ค์ด๋ค์ด ์ข ๋ ํจ์จ์ ์ผ๋ก ํ์ต์ด ๊ฐ๋ฅํ๋ค. <-> ์ธต์ด ์๋ค๋ฉด ๋ด๋ จ์ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋ ๋์ ์ ๊ฒฝ๋ง์ด ํ์ํ๋ค.
- ๊ทธ๋ผ์๋ ์ธต์ด ๊น์ด์ง๋ค๊ณ ์ต์ ํ๊ฐ ๋๋ค๋ ๊ฒ์ ์๋๋ค(์คํ๋ ค ํ์ต์ด ์ด๋ ค์ธ ์๋ ์๋ค. ํ์ ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์์ ๋ค๋ฃธ)
๐ฅ ์ญ์ ํ ์๊ณ ๋ฆฌ์ฆ(Back-Propagation)
- ๊ฐ ์ธต์ ์ฌ์ฉ๋ ํ๋ผ๋ฏธํฐ {wl, bl}_l=1 ^L๋ฅผ ํ์ต
- ๊ฐ ์ธต ํ๋ผ๋ฏธํฐ์ ๊ทธ๋ ๋์ธํธ ๋ฒกํฐ๋ ์์ธต๋ถํฐ ์ญ์์ผ๋ก ๊ณ์ฐ - ํฉ์ฑํจ์ ๋ฏธ๋ถ๋ฒ์ธ ์ฐ์๋ฒ์น(Chain-rule)์ ๊ธฐ๋ฐ์ผ๋ก ์๋ ๋ฏธ๋ถ(Auto differentiation)์ ์ฌ์ฉ - ๊ฐ ๋ ธ๋์ ํ ์ ๊ฐ(๋ด๋ฐ์ ๊ฐ)์ ์ปดํจํฐ๊ฐ ๊ธฐ์ตํด์ผ ๋ฏธ๋ถ ๊ณ์ฐ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์์ ํ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉ
์ญ์ ํ ์๊ณ ๋ฆฌ์ฆ ์์
https://www.youtube.com/watch?v=573EZkzfnZ0