Pandas (cont.) / 확률론

52930 단어 boostcampboostcamp

[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()
  • 한 개이상의 column을 묶을 수 있음
df.groupby(['Team', 'Year'])['Points'].sum()

Hierarchical index

  • Groupby 명령의 경과물도 결국은 dataframe
  • 두 개의 column으로 groupby를 할 경우, index가 두개 생성
  • Group으로 묶여진 데이터를 matrix 형태로 전환해줌

  • index level 을 변경할 수 있음
h_index.swaplevel()
# level 0 인덱스를 기준으로 sort
h_index.swaplevel().sort_index(level=0)

# value 값을 기준으로 정렬
h_index.sort_values()

groupby - grouped

  • groupby에 의해 split된 상태를 추출 가능함
grouped = df.groupby('Team') # generator 형태
  • 특정 key값을 가진 그룹의 정보만 추출 가능
grouped.get_group('Devils')
  • 추출된 group 정보에는 세 가지 유형의 apply가 가능함
    • aggregation
    • transformation
    • filtration
  • aggregation : 요약된 통계정보를 추출
# 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를 사용해서 실제 데이터를 다뤄본다
  • Data
    • 시간과 데이터 종류가 정리된 통화량 데이터
# wget : 데이터를 다운로드 받는 명령어
!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, # find the sum of the durations for each group
      'network_type':'count', # find the # of network type entries
      ' date':'first'}  # get the first date per group
                  )

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') # subect_id 기준으로 merge
  • join method

concat

  • 같은 형태의 데이터를 붙이는 연산작업
df_new = pd.concat([df_a, df_b], axis=0) # axis = 1 : 가로로 붙음
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\mathcal{X} x Y\mathcal{Y} 라 표기하고 D\mathcal{D} 는 데이터 공간에서 데이터를 추출하는 분포이다
    • 이 수업에선 데이터가 정답 레이블을 항상 가진 지도학습을 상정한다
  • 데이터는 확률변수로 (x\mathrm{x}, y\mathrm{y}) ~ D\mathcal{D} 라 표기
    • (x\mathrm{x}, y\mathrm{y}) \in X\mathcal{X} x Y\mathcal{Y} 는 데이터공간 상의 관측가능한 데이터 에 해당한다
  • 조건부확률분포 P(xy)\mathrm{P}(\mathrm{x}|y) 는 데이터 공간에서 입력 x\mathrm{x}와 출력 y\mathcal{y} 사이의 관계를 모델링한다
    • P(xy)\mathrm{P}(\mathrm{x}|y) 는 특정 클래스가 주어진 조건에서 데이터의 확률분포를 보여준다

이산형확률변수 vs 연속형확률변수

  • 확률변수는 확률분포 D\mathcal{D} 에 따라 이산형(discrete)연속형(continuous) 확률변수로 구분하게 된다

    • 데이터공간 X\mathcal{X} x Y\mathcal{Y} 에 의해 결정되는 것으로 오해를 하지만 D\mathcal{D}에 의해 결정된다
  • 이산형 확률변수는 확률변수가 가질 수 있는 경우의 수 를 모두 고려하여 확률을 더해서 모델링 한다

    • P(XA)\mathbb{P}(\mathrm{X} \in \mathrm{A})
    • 확률변수 X\mathrm{X}A\mathrm{A} 라는 집합에 속할 확률분포 = 확률변수 X\mathrm{X}x\mathrm{x} 가 될 확률 값을 모두 더하는 형태
    • P(X=x)\mathrm{P}(\mathrm{X} = \mathrm{x})
  • 연속형 확률변수는 데이터 공간에 정의된 확률변수의 밀도(density) 위에서의 적분을 통해 모델링 한다

    • P(XA)\mathbb{P}(\mathrm{X} \in \mathrm{A})
    • P(x)\mathrm{P}(\mathrm{x}) = limh0P(xhXx+h)2h\lim_{h \to 0} \mathbb{P}(\mathrm{x}-h\le X \le x + h) \over 2h

조건부확률과 기계학습

  • 조건부확률 P(yx)\mathrm{P}(y|\mathrm{x}) 는 입력변수 x\mathrm{x}에 대해 정답이 y\mathcal{y}일 확률을 의미한다
    • 연속확률분포의 경우 P(yx)\mathrm{P}(y|\mathrm{x}) 는 확률이 아니고 밀도로 해석한다는 것을 주의하자
  • 로지스틱 회귀에서 사용했던 선형모델과 소프트맥스 함수의 결합은 데이터에서 추출된 패턴을 기반으로 확률을 해석 하는데 사용된다
  • 분류 문제에서 softmax(Wϕ+b)\mathrm{W} \phi + \mathrm{b})
  • 딥러닝은 다층신경망을 사용하여 데이터로부터 특징패턴 ϕ\phi 을 추출한다
    • 특징패턴을 학습하기 위해 어떤 손실함수를 사용할지는 기계학습 문제와 모델에 의해 결정된다

기대값이 뭔가요?

  • 확률분포가 주어지면 데이터를 분석하는 데 사용가능한 여러 종류의 통계적 범함수(statiscal functional)를 계산 할 수 있다

  • 기대값(expectation)은 데이터를 대표하는 통계량 이면서 동시에 확률분포를 통해 다른 통계적 범함수를 계산하는데 사용된다

  • 기대값을 이용해 분산, 첨도, 공분산 등 여러 통계량을 계산할 수 있다

  • 명심할점!

    • 연속확률변수 or 이산확률변수에 따라서 적분 or 급수를 취해준다
    • 연속확률변수인 경우에는 밀도함수를, 이산확률변수인 경우에는 질량함수를 곱해준다

몬테카를로 샘플링

  • 기계학습의 많은 문제들은 확률분포를 명시적으로 모를 때가 대부분이다
  • 확률분포를 모를 때 데이터를 이용하여 기대값을 계산하려면 몬테카를로 (Monte Carlo) 샘플링 방법을 사용 해야 한다
    • 몬테카를로는 이산형이든 연속형이든 상관없이 성립한다
    • 샘플링하는 분포에서 독립적으로 샘플링을 해줘야만 작동한다
  • 몬테카를로 샘플링은 독립추출만 보장된다면 대수의 법칙(law of large number)에 의해 수렴성을 보장 한다

좋은 웹페이지 즐겨찾기