Boostcamp AI Tech (Day 009)
1. Pandas (2)
-
Groupby
- SQL groupby 명령어와 동일
- split - apply - combine 과정을 거쳐 연산
# groupby(묶음의 기준 컬럼)[적용받는 컬럼].적용받는 연산 df.groupby("Team")["Points"].sum()
-
apply 유형
- aggregation: 요약된 통계정보 추출 ex. sum, mean
- transformation: 해당 정보 변환 ex. lambda
- filtration: 특정 정보 제거 (필터링)
grouped.agg(sum) grouped.agg(np.mean) # normalize score = lambda x: (x - x.mean()) / x.std() grouped.transform(socore) df.groupby("Team").filter(lambda x: x["Points"].max() > 700)
-
pivot table
- index 축은 groupby와 동일
- column에 추가로 labeling 값 추가
- value에 numeric type 값을 aggregation
# 값: duration df.pivot_table([duration], index=[df.month, df.item], columns=df.network, aggfunc="sum", fill_value=0)
-
merge & concat
pd.merge(df_a, df_b, on='subject_id') # pd.merge(df_a, df_b, left_on='subject_id', right_on='id', how='right') # join: inner, left, right, full pd.concat([df_a, df_b])
-
persistence
- db 연결 conn을 사용해 dataframe 생성
import sqlite3 conn = sqlite3.connet('./data.db') cur = conn.cursor() cur.execute('select * from airlines limit 5;') res = cur.fetchall() # tuple 형태로 나옴 df_airlines = pd.read_sql_query('select * from airlines;', conn)
- XLS
- openpyxls, XlsxWrite
writer = pd.ExcelWriter('./df_routes.xlsx', engine='xlswriter') df_routes.to_excel(writer, sheet_name='Sheet1') df_routes.to_pickle('./df_routes.pickle')
- openpyxls, XlsxWrite
- db 연결 conn을 사용해 dataframe 생성
2. 확률론
-
딥러닝과 확률론
- 딥러닝은 확률론 기반의 기계학습 이론에 바탕을 두고 있음
- loss functions의 작동 원리는 데이터 공간을 통계적으로 해석해서 유도함
- 회귀 분석에서 손실함수로 사용되는 L2-norm은 예측오차의 분산을 최소화하는 방향으로 학습하도록 유도
- 분류문제에서 사용되는 cross-entropy는 모델 예측의 불확실성을 최소화하는 방향으로 학습하도록 유도
- 분산과 불확실성을 최소화하기 위해서는 측정 방법을 알아야 함
-
확률분포는 데이터의 초상화
- 데이터공간: $\mathcal X \times \mathcal Y$
- 데이터를 추출하는 분포: $\mathcal D$
- 데이터 확률변수: $(X, y) \sim \mathcal D$
-
확률변수
- 확률 분포 $\mathcal D$에 따라 이산형/연속형으로 구분됨
-
discrete: 확률변수가 가질 수 있는 경우의 수를 모두 고려해 확률을 더해서 모델링
$\mathbb P(X \in A) = \sum_{X \in A}P(X = x)$
-
continuous: 데이터 공간에 정의된 확률변수의 밀도(density) 위에서의 적분을 통해 모델링
$\mathbb P(X \in A) = \int_A P(x)dx$
- 밀도는 누적확률분포의 변화율을 모델링
-
확률분포
- 결합분포(joint distribution) $P(X, y)$는 $\mathcal D$를 모델링
- $\mathcal D$는 이론적으로 존재하는 확률분포기 때문에 사전에 알 수 없음
- $P(X)$는 입력 $X$에 대한 주변확률분포로 $y$에 대한 정보를 주진 않음
- $P(X) = \sum_y P(X, y)$
- $P(X) = \int_{\mathcal y} P(X, y)dy$
- 조건부확률분포 $P(X \mid y)$는 데이터 공간에서 입력 X와 출력 y 사이의 관계를 모델링 (특정 클래스가 주어진 조건에서 데이터의 확률분포)
-
조건부확률과 기계학습
- $P(X \mid y)$: 입력변수 X에 대해 정답이 y일 확률
- 로지스틱 회귀에서 사용했던 선형모델과 소프트맥스 함수의 결합은, 데이터에서 추출된 패턴을 기반으로 확률을 해석하는 데 사용
- 분류 문제에서 $softmax(W\phi + b)$는 데이터 X로부터 추출된 특징패턴 $\phi(x)$와 가중치행렬 $W$를 통해 조건부확률 $P(X \mid y)$를 계산함
- 회귀 문제의 경우 조건부기대값 $\mathbb E[y \mid X]$를 추정함
- $\mathbb E_{y \sim P(y \mid X)}[y \mid X] = \int_{\mathcal y} yP(y \mid X)dy)$
- 조건부기대값은 $\mathbb E \Vert y - f(x) \Vert_2$를 최소화하는 함수 $f(x)$와 일치함
- 딥러닝은 다층신경망을 사용해 데이터로부터 특징패턴 $\phi$를 추출
-
기대값(expectation)
- 확률분포가 주어지면 데이터를 분석하는 데 사용 가능한 여러 종류의 통계적 범함수(statistical function)를 계산할 수 있음
-
기대값은 데이터를 대표하는 통계량이면서, 동시에 확률분포를 통해 다른 통계적 범함수를 계산하는 데 사용됨
이산확률분포: $\mathbb E_{X \sim P(X)}[f(X)] = \sum_{X \in \mathcal X} f(X)P(X)$
연속확률분포: $\mathbb E_{X \sim P(X)}[f(X)] = \int_{\mathcal X} f(X)P(X)dX$
-
기대값을 이용해 분산, 첨도, 공분산 등 계산 가능
$\mathbb V (X) = \mathbb E_{X \sim P(X)}[X - \mathbb E [X]^2]$
$Cov(X_1, X_2) = \mathbb E_{X_1,X_2 \sim P(X_1, X_2)} [(X_1 - \mathbb E [X_1])] [(X_2 - \mathbb E [X_2])]$
-
몬테카를로(Monte Carlo) 샘플링
- 기계학습의 많은 문제들은 확률분포를 명시적으로 모를 때가 많음
- 확률분포를 모를 때 데이터를 이용해 기대값을 계산할 때 몬테카를로 샘플링 방법을 사용
-
몬테카를로는 이산형/연속형 상관없이 성립 (i.i.d. $X^{(i)} \sim P(X)$)
$\mathbb E_{X \sim P(X)} [f(X)] \approx \frac{1}{N} \sum_{i=1}^N f(X^{(i)})$
- 몬테카를로 샘플링은 독립추출만 보장된다면, 대수의 법칙(law of large number)에 의해 수렴성을 보장함