[Contents]
1) pandas 2
2) 확률론 맛보기
Pandas 2
- pandas 1 강의에 이어서 pandas 라이브러리의 다음과 같은 기능에 대해 알아본다
- groupby
- pivot_table
- joint method (merge/concat)
- Database connection
- Xls persistence
groupby
- SQL groupby 명령어와 같음
- split -> apply -> combine 과정을 거쳐 연산함
df.groupby('Team')['Points'].sum()
df.groupby(['Team', 'Year'])['Points'].sum()
Hierarchical index
- Groupby 명령의 경과물도 결국은 dataframe
- 두 개의 column으로 groupby를 할 경우, index가 두개 생성
- Group으로 묶여진 데이터를 matrix 형태로 전환해줌
h_index.swaplevel()
h_index.swaplevel().sort_index(level=0)
h_index.sort_values()
groupby - grouped
- groupby에 의해 split된 상태를 추출 가능함
grouped = df.groupby('Team')
- 특정 key값을 가진 그룹의 정보만 추출 가능
grouped.get_group('Devils')
- 추출된 group 정보에는 세 가지 유형의 apply가 가능함
- aggregation
- transformation
- filtration
- aggregation : 요약된 통계정보를 추출
grouped.agg(sum)
import numpy as np
grouped.agg(np.mean)
grouped['Points'].agg([np.sum, np.mean, np.std])
- Transformation : 해당 정보를 변환
- aggregation과 달리 key값 별로 요약된 정보가 아님
- 개별 데이터의 변홚을 지원
score = lambda x:(x.max())
grouped.transform(score)
- filtration : 특정 정보를 제거 하여 보여주는 필터링 기능
- 특정 조건으로 데이터를 검색할 때 사용
- filter안에는 boolean 조건이 존재해야함
df.groupby('Team').filter(lambda x:len(x) >= 3)
df.groupby('Team').filter(lambda x: x['Rank'].sum() > 2)
df.groupby('Team').filter(lambda x: x['Points'].sum() > 1000)
df.groupby('Team').filter(lambda x: x['Rank'].mean() > 1)
Case study
- groupby를 사용해서 실제 데이터를 다뤄본다
!wget https://www.shanelynn.ie/wp-content/uploads/2015/06/pthone_data.csv
import pandas as pd
df_phone=pd.read_csv('phone_data.csv')
import dateutil
df_phone['date']=df_phone['date].apply(dateutil.parser.parse, dayfirst=True)
df_phone.groupby('month')['duration'].mean()
df_phone[df_phone['item']=='call'].groupby('month')[duration].mean()
df_phone.groupby(['month','item']).agg(
{ 'duration':sum,
'network_type':'count',
' date':'first'}
)
pivot table crosstab
- Pivot Table
- 우리가 excel에서 보던 그 것!
- index 축은 groupby와 동일
- column에 추가로 labeling 값을 추가하여 Value에 numeric type 값을 aggregation하는 형태
- 위와 비슷한 결과를 반환하는 pandas 코드
df_phone.groupby(['month','item','network'])['duration'].sum().unstack()
crosstab
- 특허 두 칼럼에 교차 빈도, 비율, 덧셈 등을 구할 때 사용
- Pivot table의 특수한 형태
- User - Item Rating Matrix 등을 만들 때 사용가능함
Merge & Concat
- merge
- SQL에서 많이 사용하는 Merge와 같은 기능
- 두 개의 데이터를 하나로 합침
pd.merge(df_a, df_b, on='subject_id', how ='inner')
concat
df_new = pd.concat([df_a, df_b], axis=0)
df_new.reset_index()
persistence
- XLS persistence
- Dataframe의 엑셀 추출 코드
- Xls 엔진으로 openpyxls 또는 XlsxWrite 사용
- pickle persistence
- 가장 일반적인 python 파일 persistence
- to_pickle, read_pickle 함수 사용
확률론 맛보기
- 확률분포, 조건부확률, 기대값 의 개념과 몬테카를로 샘플링 방법을 설명
- 데이터의 초상화로써 확률분포가 가지는 의미와 이에 따라 분류될 수 있는 이산확률번수, 연속확률분수의 차이점에 대해 설명
- 기대값을 계산하는 방법, 특히 확률분포를 모를 때 몬테카를로 방법을 통해 기대값을 계산하는 방법 등은 머신러닝에서 매무 빈번하게 사용되므로 충분히 공부하자!
딥러닝에서 확률론이 왜 필요한가?
- 딥러닝은 확률론 기반의 기계학습 이론 에 바탕을 두고 있다
- 기계학습에서 사용되는 손실함수(loss function)들의 작동 원리는 데이터 공간을 통계적으로 해석해서 유도하게 된다
- 예측이 틀릴 위험을 최소화하도록 데이터를 학습하는 원리는 통계적 기계학습의 기본 원리이다
- 회귀 분석에서 손실함수로 사용되는 L2 노름은 예측오차의 분산을 가장 최소화하는 방향으로 학습 하도록 유도한다
- 분류 문제에서 사용되는 교차엔트로피(cross-entrophy)는 모델 예측의 불확실성을 최소화하는 방향으로 학습 하도록 유도한다
- 분산 및 불확실헝을 최소화하기 위해서는 측정하는 방법 을 알아야 한다
Norm, Regularization
Norm
- 우리가 쉽게 알고 있는 Norm은 절대값이다
- |-1| = 1 이런식으로 썻었는데 |?| 속에는 단순 실수뿐만 아니라 |(1,2)| 이런식으로 벡터도 들어간다
- 그리고 이는 절대값이 아니라 벡터의 크기로 칭했다
- Norm이란, 수학적 정의는 복잡하지만 결국 어떤 값의 크기를 계산하여, 비교가 가능하게끔하는 어떤 함수 이다.
Regularization
- 모델의 오버피팅을 줄이고자 하는 것
- 즉 모델을 조금 더 general하게 만들고자 하는것
- 모델을 학습시킨다는건 결국 모델의 weight matrix를 좋은 방향으로 업데이트해나가는 것이다
- 그런데 이 weight 중 일부가 학습과정 중 과도하게 커져버린다면 몇몇개의 input에 극단적으로 의존하는 상황이 벌어진다
- 이 경우 모델의 일반화 성능은 감소할 것이다
- 때문에 특정 weight가 과도하게 커지지 않게끔 lock을 걸어주는 역할을 Regularization이 해준다
확률분포는 데이터의 초상화
- 데이터공간을 X x Y 라 표기하고 D 는 데이터 공간에서 데이터를 추출하는 분포이다
- 이 수업에선 데이터가 정답 레이블을 항상 가진 지도학습을 상정한다
- 데이터는 확률변수로 (x, y) ~ D 라 표기
- (x, y) ∈ X x Y 는 데이터공간 상의 관측가능한 데이터 에 해당한다
- 조건부확률분포 P(x∣y) 는 데이터 공간에서 입력 x와 출력 y 사이의 관계를 모델링한다
- P(x∣y) 는 특정 클래스가 주어진 조건에서 데이터의 확률분포를 보여준다
이산형확률변수 vs 연속형확률변수
-
확률변수는 확률분포 D 에 따라 이산형(discrete) 과 연속형(continuous) 확률변수로 구분하게 된다
- 데이터공간 X x Y 에 의해 결정되는 것으로 오해를 하지만 D에 의해 결정된다
-
이산형 확률변수는 확률변수가 가질 수 있는 경우의 수 를 모두 고려하여 확률을 더해서 모델링 한다
- P(X∈A) = ∑x∈AP(X=x)
- 확률변수 X 가 A 라는 집합에 속할 확률분포 = 확률변수 X 가 x 가 될 확률 값을 모두 더하는 형태
- P(X=x) 는 확률변수가 x값을 가질 확률로 해석할 수 있다
-
연속형 확률변수는 데이터 공간에 정의된 확률변수의 밀도(density) 위에서의 적분을 통해 모델링 한다
- P(X∈A) = ∫AP(x)dx
- P(x) = 2hlimh→0P(x−h≤X≤x+h) # 밀도는 누적확률분포의 변화율을 모델링하며 확률로 해석하면 안된다
조건부확률과 기계학습
- 조건부확률 P(y∣x) 는 입력변수 x에 대해 정답이 y일 확률을 의미한다
- 연속확률분포의 경우 P(y∣x) 는 확률이 아니고 밀도로 해석한다는 것을 주의하자
- 로지스틱 회귀에서 사용했던 선형모델과 소프트맥스 함수의 결합은 데이터에서 추출된 패턴을 기반으로 확률을 해석 하는데 사용된다
- 분류 문제에서 softmax(Wϕ+b) 은 데이터 x 로부터 추출된 특징패턴 ϕ(x)과 가중치행렬 W 을 통해 조건부확률 P(y∣x) 을 계산한다
- P(y∣ϕ(x)) 이라 써도 된다
- 주어진 x 로 부터 특징을 통해 정답이 y 일 확률을 계산해볼 수 있다
- 회귀 문제의 경우 조건부기대값 B[y∣x] 을 추청한다
- 회귀 문제에서 L2 노름을 사용하면 조건부기대값과 일치한다
- 딥러닝은 다층신경망을 사용하여 데이터로부터 특징패턴 ϕ 을 추출한다
- 특징패턴을 학습하기 위해 어떤 손실함수를 사용할지는 기계학습 문제와 모델에 의해 결정된다
기대값이 뭔가요?
-
확률분포가 주어지면 데이터를 분석하는 데 사용가능한 여러 종류의 통계적 범함수(statiscal functional)를 계산 할 수 있다
-
기대값(expectation)은 데이터를 대표하는 통계량 이면서 동시에 확률분포를 통해 다른 통계적 범함수를 계산하는데 사용된다
-
기대값을 이용해 분산, 첨도, 공분산 등 여러 통계량을 계산할 수 있다
-
명심할점!
- 연속확률변수 or 이산확률변수에 따라서 적분 or 급수를 취해준다
- 연속확률변수인 경우에는 밀도함수를, 이산확률변수인 경우에는 질량함수를 곱해준다
몬테카를로 샘플링
- 기계학습의 많은 문제들은 확률분포를 명시적으로 모를 때가 대부분이다
- 확률분포를 모를 때 데이터를 이용하여 기대값을 계산하려면 몬테카를로 (Monte Carlo) 샘플링 방법을 사용 해야 한다
- 몬테카를로는 이산형이든 연속형이든 상관없이 성립한다
- 샘플링하는 분포에서 독립적으로 샘플링을 해줘야만 작동한다
- 몬테카를로 샘플링은 독립추출만 보장된다면 대수의 법칙(law of large number)에 의해 수렴성을 보장 한다