[Day 9] Math for AI - Pandas โ ก & Probability theory
๐ Pandas โ ก
๐ฅ Groupby
- SQL์์์ ๋ช ๋ น์ด์ ๋์ผํ๊ณ ๊ฒฐ๊ณผ๋ฌผ์ Seriesํํ๋ก ๋์ค๊ฒ ๋๋ค.
- Split -> apply -> combine์ ๊ณผ์ ์ ๊ฑฐ์ณ ์ฐ์ฐ์ด ๋๋ค.
- unstack(): dataframe ํ์์ผ๋ก ๋ฌถ์ด์ฃผ๋ ์์ <-> stack()
- reset_index() ๋ฑ์ ์ฐ์ฐ๋ ์ฌ์ฉ ๊ฐ๋ฅ
- swaplevel(): index์ ์์๊ฐ ๋ฐ๋
๐ฅ Grouped: groupby์ ์ํด split๋ ์ํ๋ฅผ ์ถ์ถํด ์ฒ๋ฆฌํ ์ ์๊ฒ ํจ(Tupleํํ๋ก key, value๊ฐ ์ถ์ถ)
- Generatorํํ๋ก ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ์ ์ ํ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
- ์ถ์ถ๋ ์ ๋ณด์๋ ์ธ๊ฐ์ง ์ ํ์ Apply๊ฐ ๊ฐ๋ฅ(Aggregation-์์ฝ, transformation-๋ณํ, Filteration-ํํฐ)
๐ฅ Pivot table
- excel์์์ ๋์ผํ๊ณ index ์ถ์ groupby์ ๋์ผ(groupby์ unstack๋ณด๋ค ๊ฐ๊ฒฐ)
- column์ ์ถ๊ฐ๋ก labeling๊ฐ์ ์ถ๊ฐํด, value์ numeric type๊ฐ์ aggregationํ๋ ํํ
- Crosstab: ํนํ ๋ ์ปฌ๋ผ์ ๊ต์ฐจ๋น๋, ๋น์จ, ๋์ ๋ฑ์ ๊ตฌํ ๋ ์ฌ์ฉํ๋ pivot table์ ํน์ ํํ
๐ฅ Merge & Concat
- merge: SQL์์ ๋ง์ด ์ฌ์ฉํ๋ merge์ ๊ธฐ๋ฅ๊ณผ ๋์ผ(join, ๋๊ฐ์ data๋ฅผ ํฉ์นจ)
-> ex) pd.merge(df_left, df_right, on = 'id') => on - ๋ df์ ๊ฐ์ ๊ฐ์ด ์์ ๊ฒฝ์ฐ์ฌ์ฉ(๋ค๋ฅด๋ค๋ฉด left_on, right_on)
- concat: ๊ฐ์ ํํ์ data๋ฅผ ๋ถ์ด๋ ์ฐ์ฐ์์ (list ํํ)
-> df_new = pd.concat([df_a, df_b]) ==> default๋ axis = 0(๋ฐ์ผ๋ก ๋ถ์)์ด๊ณ , axis = 1๋ก ์์ผ๋ก ๋ถ์ผ ์ ์์
๐ฅ Persistence
- database connection์ ์ง์ํด์ฃผ๋ ๊ธฐ๋ฅ(pymysql library๋ฅผ ์ค์นํด sqlite3์ importํ์ฌ ์ฌ์ฉ๊ฐ๋ฅ)
-> data loading์ db connection ๊ธฐ๋ฅ ์ ๊ณต
- XLS persistence: openpyxl ์ด๋ XlsxWriter ์ค์น ํ ์ฌ์ฉ๊ฐ๋ฅ
๐ ํ๋ฅ ๋ก ๋ง๋ณด๊ธฐ
- DL์์ ํ๋ฅ ๋ก ์ด ํ์ํ ์ด์ ๋ ๋ญ๊ฐ์?
-> ๊ธฐ๊ณํ์ต์์ ์ฌ์ฉ๋๋ ์์คํจ์(Loss function)๋ค์ ์๋ ์๋ฆฌ๋ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ํต๊ณ์ ์ผ๋ก ํด์ํ์ฌ ์ ๋ํ๊ฒ ๋จ ==> ์์ธก์ด ํ๋ฆด ์ํ์ ์ต์ํ
-> ์๋ฅผ ๋ค์ด, ํ๊ท ๋ถ์์ ๊ฒฝ์ฐ(L2-norm), ์์ธก ์ค์ฐจ์ ๋ถ์ฐ์ ๊ฐ์ฅ ์ต์ํํ๋ ๋ฐฉํฅ์ผ๋ก ํ์ต์ ์ ๋
๋ถ๋ฅ ๋ฌธ์ (๊ต์ฐจ ์ํธ๋กํผ)์ ๊ฒฝ์ฐ, ๋ชจ๋ธ ์์ธก์ ๋ถํ์ค์ฑ์ ์ต์๋กํ๋ ๋ฐฉํฅ์ผ๋ก ํ์ต์ ์ ๋
-> ์ด๋ฌํ ๊ฐ๋ , ์ด๋ก ๋ค์ด ํ๋ฅ ๋ก ์ ๊ธฐ๋ฐ์ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ DL์์ ํ๋ฅ ๋ก ์ด ์ค์ํ๋ค.
๐ฅ ํ๋ฅ ๋ถํฌ: ๋ฐ์ดํฐ ๊ณต๊ฐ(X x Y)์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๋ถํฌ(D)๋ฅผ ๋งํจ.
- (x, y) ~ D ๋ก ํ๊ธฐํ๊ณ (x, y)๋ ๋ฐ์ดํฐ ๊ณต๊ฐ์์ ๊ด์ธก ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ๋งํ๋ค.
- ํ๋ฅ ๋ถํฌ ๋ณ์๋ ํ๋ฅ ๋ถํฌ์ ๋ฐ๋ผ ์ด์ฐํ(Discret) ๊ณผ ์ฐ์ํ(Continuous)๋ก ๋๋๋ค.
- ๋ถํฌ์ ์ข ๋ฅ์ ๋ฐ๋ผ์ D(ํ๋ฅ ๋ถํฌ)๋ฅผ ๋ชจ๋ธ๋งํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค.
- ์ด์ฐํ: ํ๋ฅ ๋ณ์๊ฐ ๊ฐ์ง ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๊ณ ๋ คํ์ฌ ํ๋ฅ ์ ๋ํด์ ๋ชจ๋ธ๋ง ํจ(ํ๋ฅ ์ง๋ ํจ์)
* P(X = x)๋ ํ๋ฅ ๋ณ์๊ฐ x๊ฐ์ ๊ฐ์ง ํ๋ฅ
- ์ฐ์ํ: ๋ฐ์ดํฐ ๊ณต๊ฐ์ ์ ์๋ ํ๋ฅ ๋ณ์์ ๋ฐ๋(Density) ์์์์ ์ ๋ถ์ ํตํด ๋ชจ๋ธ๋ง(ํ๋ฅ ๋ฐ๋ ํจ์)
* P(x)๋ ๋์ ํ๋ฅ ์ ๋ณํ์จ์ ๋งํ๋ค.
-> ํ๋ฅ ๋ก ์ ๊ทผํ๋ฉด ์๋จ!!
๐ฅ ์ฃผ๋ณํ๋ฅ ๋ถํฌ(P(x))
- ์ ๋ ฅ x์ ๋ํ ์ฃผ๋ณํ๋ฅ ๋ถํฌ๋ก y์ ๋ํด ์ ๋ณด๋ฅผ ์ฃผ์ง ์์, ํ์ง๋ง ๋ํ๊ฑฐ๋ ์ ๋ถ์ ํตํด ๊ฐ๋ฅ(์์ ์)
๐ฅ ์กฐ๊ฑด๋ถ ํ๋ฅ ๋ถํฌ(P(x|y))
- ๋ฐ์ดํฐ ๊ณต๊ฐ ์์์ ์ ๋ ฅ x์ ์ถ๋ ฅ y ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ชจ๋ธ๋ง
-> y๊ฐ ์ฃผ์ด์ง ์ํฉ์์ x์ ๋ถํฌ๋ฅผ ๊ตฌํ๋ ๊ฒ. => ํต๊ณ์ ๊ด๊ณ๋ฅผ ๋ชจ๋ธ๋ง ํ ๋ ์ฌ์ฉํ ์ ์์
** P(y|x)๋ ์ ๋ ฅ ๋ณ์ x์ ๋ํด ์ ๋ต์ด y์ผ ํ๋ฅ ์ ์๋ฏธ(์ฐ์ํ๋ฅ ๋ณ์์ ๊ฒฝ์ฐ์๋ ๋ฐ๋๋ก ํด์)
- ๋ก์ง์คํฑ ํ๊ท์์ ์ฌ์ฉํ๋ ์ ํ ๋ชจ๋ธ๊ณผ softmax ํจ์์ ๊ฒฐํฉ์ ๋ฐ์ดํฐ์์ ์ถ์ถ๋ ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฅ ์ ํด์ํ๋๋ฐ ์ฌ์ฉ
** ๋ถ๋ฅ๋ฌธ์ ์์ softmax(wΦ + b)๋ ๋ฐ์ดํฐ x๋ก๋ถํฐ ์ถ์ถ๋ ํน์งํจํด Φ(x)์ ๊ฐ์ค์น ํ๋ ฌ W๋ฅผ ํตํด ์กฐ๊ฑด๋ถํ๋ฅ P(y|x)๋ฅผ ๊ณ์ฐ (== P(y|Φ(x))๋ผ๊ณ ๋ ํ์ง๋ง ์ ์ฐ์ง ์์)
** ํ๊ท ๋ฌธ์ ์ ๊ฒฝ์ฐ, ์กฐ๊ฑด๋ถ ๊ธฐ๋๊ฐ E[y|x]๋ฅผ ์ถ์
-> ์ ์ฌ์ฉํ๋์? L2-norm์ผ๋ก ๋ฝ์ ํจ์(f(x))์ ์ผ์นํ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ฅ ๊ธฐ๋๊ฐ(Expectation, ํ๊ท (mean)๊ณผ ๋น์ทํ ์๋ฏธ)
- ํ๋ฅ ๋ถํฌ๊ฐ ์ฃผ์ด์ง๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋๋ฐ ์ฌ์ฉ๊ฐ๋ฅํ ์ฌ๋ฌ ์ข ๋ฅ์ ํต๊ณ์ ๋ฒํจ์(Statistical functional)๋ฅผ ๊ณ์ฐํ ์ ์๋๋ฐ ๊ทธ ์ค ๊ธฐ๋๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ํํ๋ ํต๊ณ๋์ด๋ฉด์ ํ๋ฅ ๋ถํฌ๋ฅผ ํตํด ๋ค๋ฅธ ํต๊ณ์ ๋ฒํจ์๋ฅผ ๊ณ์ฐํ ์ ์๋ ๋๊ตฌ
- ๊ธฐ๋๊ฐ์ ์ด์ฉํด ๋ถ์ฐ, ์ฒจ๋, ๊ณต๋ถ์ฐ ๋ฑ ์ฌ๋ฌ ํต๊ณ๋์ ๊ณ์ฐ
๐ฅ ๋ชฌํ ์นด๋ฅผ๋ก ์ํ๋ง(Monte Carlo)
- ๊ธฐ๊ณํ์ต์ ๋ง์ ๋ฌธ์ ๋ค์ ํ๋ฅ ๋ถํฌ๋ฅผ ๋ช ์์ ์ผ๋ก ๋ชจ๋ฅผ ๋๊ฐ ๋ง์๋ฐ ์ด๋ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ด๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ๋๊ฐ์ ๊ณ์ฐํ๋ ค๊ณ ํ ๋ ์ฌ์ฉํ๊ณ ์ด์ฐํ, ์ฐ์ํ์ ์๊ด์์ด ์ฑ๋ฆฝํ๋ค.
* i.i.d. - ๋ ๋ฆฝ ๋์ผ ๋ถํฌ
- ๊ฐ๊ฐ์ ๋ณ์๋ค์ด ๋ ๋ฆฝ์ ์ด๊ณ ๋์ผํ ํ๋ฅ ๋ถํฌ๋ฅผ ๊ฐ์ง๋ ๋ถํฌ(์ฃผ์ฌ์)
- ์์ ์์ ๋ณด๋ฉด, x๋ฅผ ์ํ๋งํ ๋ฐ์ดํฐ์ด๊ณ , ์ ์ฌ์(์ฐ์ ํ๊ท )์ ๊ตฌํด์ฃผ๋ฉด ๊ทผ์ฌ๊ฐ์ด ๋์ถ๋๋ค.
** ์ฌ๊ธฐ์ sampling data๋ ๋ ๋ฆฝ์ ์ผ๋ก ํด์ฃผ์ด์ผ ๊ฐ๋ฅํ๋ค.
- ๋ ๋ฆฝ ์ถ์ถ์ด ๋ณด์ฅ๋๋ค๋ฉด ๋์์ ๋ฒ์น(Law of large number)์ ์ํด ์๋ ด์ฑ์ ๋ณด์ฅ
- ํ์ง๋ง ์ํ ์ฌ์ด์ฆ๊ฐ ์ ๋ค๋ฉด ์ค์ฐจ ๋ฒ์๊ฐ ์ปค์ง๊ณ True๊ฐ๊ณผ ๋ฉ์ด์ง ์ ์์ผ๋ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.