강의 복습 내용

  • python의 pandas를 사용하는 방법에 대해 알아본다.
    • pandas의 column인 Series와 테이블구조인 Data Frame을 구별한다.
    • pandas에서 Sereis와 Data Frame에 사용되는 함수들을 익힌다.
  • 딥러닝의 학습방법
    • softmax가 무엇인지 안다.
    • 활성함수로 종류와 사용하는 이유를 공부한다.
    • 역전파를 계산하는 이유를 알아본다.

얻은 지식

  • pandas 함수.
  • 딥러닝의 학습방법.

pandas!

  • panel datas의 약자
  • python의 엑셀임
  • R의 구조와 유사하다.
  • 인덱싱, 연사용 함수, 전처리 함수 등을 제공함
  • 데이터 처리및 통계 분석을 위해 사용
    • matrix(행렬)데이터
    • tabular 형태를 다루는데 최적화 되어있다.

테이블 용어

  • data table,sample
  • attribute, field, feature,columm
    • 세로축을 칭한다.
  • instance,tuple,row
    • 가로축을 칭한다.
  • data,값
    • 하나의 요소
  • feature vector
    • 세로축을 vector형태로 가진다.
    • 자주 사용되는 용어는 아니라고한다.

pandas 실행

  • conda로 설치
    conda install pandas
    
  • pandas 호출
import pandas as pd
  • 데이터 호출
    • pd.read_csv
pd.read_csv(data_url,sep="\s+",header=None)
# sep는 separate로 분리 방식
#header는 column이름을 정해줄 수 있다.

pandas 구성

  • DataFrame
    • Data Table 전체를 포함하는 object
  • Series
    • Data Frame중 하나의 Column 데이터 모음 object

Series

  • numpy와 차이는 index를 숫자 뿐만 아니라 문자를 index로 지정 할 수 있다.
    • Sereis의 index를 통해 지정 가능
  • ndarrya의 subclass이다.
  • Dict타입도 입력 가능
    • 키값이 index, value값이 데이터 값으로 저장된다.
  • 데이터 접근
    • a[인덱스]
    • dict,list처럼 접근이 가능
  • 데이터 변환
    • a.astype(타입)
  • index를 기준으로 생성한다.
ex_data = [1,2,3,4]
ex = Series(data = ex_data)
# index : 0 1 2 3 
    # 숫자뿐만 아니라 문자로 index를 정할 수 있음
# data :  1 2 3 4

ex_name = ['a','b','c','d']
ex = Series(data = ex_data,index = ex_name)
# index : a b c d
    # 숫자뿐만 아니라 문자로 index를 정할 수 있음
# data :  1 2 3 4

ex.values # 값들만
ex.index # index이름들만


# index기준
ex_name = ['a','b','c','d','e','f']
ex = Series(data = ex_data,index = ex_name)
# index : a b c d e f
# data :  1 2 3 4 nan nan

dataframe

  • Series가 연속된 형태
  • column이 존재
  • 각 column마다 타입이 다르게 지정 가능
  • csv형태로 부를때
  • loc
    • index 이름을 기준
  • iloc
    • index 번호(0으로 시작)를 기준
  • boolean index
    • df.age>40
    • 40보다 큰지 아닌지에 대한 boolean 값을 추가할 수 있다.
    • 이 값을 새로 할당 가능
  • transpase
    • df.T
  • 값 출력
    • df.values
  • csv출력
    • df.to_csv()
    • 옵션을 통해 파일로 저장도 가능하다
  • column삭제
    • del df['debt'] - df에서 바로 삭제된다.
    • df.drop("debt",axis=1) - df자체는 그대로이다.
      • axis를 1로 하여 세로축인 column이라고 표현한다.

# 연습

raw_data = {'first':['a','b','c'],'last':['a','b','c']}

# data는 불러올 데이터, columns는 어느 column을 저장할지 정해준다.
df = pd.DataFrame(raw_data,columns['first','last'])

# 특정 column추출 , series 추출
df.first
df['first']

# boolean index
df.debt = df.age>40

selection

  • 데이터를 가져오는것
    • ex[컬럼명].head(2)
      • 특정 컬럼 추출 , 상위에서 2개 가져온다.
      • Series로 가져온다
    • ex[[컬럼1,컬럼2,..]]
      • 여러개 추출도 가능
      • dataframe으로 가져온다.
    • ex[:3]
      • column이름 없이 row index number 기준으로
    • ex["컬럼명"][:3]
    • ex[[0,1,2]]
      • 여러개의 index를 list를 이용해 뽑을 수 있다.
    • ex[acc<2000]
      • boolean index도 사용가능
      • numpy에서 사용한 기능
      • 조건에 맞는 값에 대해서만 추출해준다.
  • basic
    • ex[['a','b']][:2]
      • a와 b컬럼에서 2번index까지 추출
    • ex.loc[[211,320],["a","b"]]
      • index가 211과 320이고, coloumn이 a,b인것을 추출
    • ex.iloc[:2,:2]
      • index가 2번째까지, column은 2번째까지를 추출
  • reindex
    • index 재설정
    • ex.index = list(range(0,15))
      • index를 0부터 15로 변경
    • ex.reset_index(drop=True)
      • index를 재설정
    • ex.reset_index(inplace=True,drop=True)
      • inplace를 true하면 자기자신을 직접 변경한다.

drop

  • ex.drop(1)
    • index번호로 drop
  • ex.drop([1,2,3])
    • 한개이상의 index번호로 삭제
  • ex.drop("a",axis=1)
    • axis를 1로 하면 축이 변경된다.
    • index->column으로 변경된다 column에서 a를 삭제 한다.

dataframe operation

  • 두개의 Series 더하기
    • s1.add(s2) , s1 + s2
    • 같은 index이름끼리 적용이된다.
    • 다른 index이름이 존재하면 Nan이 입력된다.
  • 두개의 dataframe 더하기
    • df1+df2, df1.add(df2,fill_value=0)
    • fill_Value NaN대신 출력하게 할 수 있는 옵션
  • Series와 dataframe더하기
    • 단순 더하기 하면 안됨
    • df1.add(s2,axis=0)
      • axis를 기준으로 더하기가진행
      • 0이므로 각 컬럼마다 같은 index끼리 더하기가 진행된다.

map

  • pandas의 series 타입에 map함수 적용 가능
  • function 대신 DICT,SEQUENCE형 데이터자료구조로도 대체 가능
  • s1.map(lambda x:x**2)
    • s1을 순회하면서 lambda함수인 제곱하는 연산이 수행되어 반환된다.
  • s1.replace()
    • map의 기능중 데이터 변환 기능만 담당
z={1:'a',2:'b'}
s1.map(z) # 인덱스번호가 키로 들어가서 값이 새로운 시리즈로 반환

apply

  • map과 다르게 series전체(column)에 함수를 적용
    • sum, mean,std,min,max
  • df1.sum(), df1.apply(sum)
  • applymap
    • 모든 element에 적용시킬수 잇따.
    • df1.applymap(함수)

pandas built-in functions

  • 내부함수
  • describe
    • numeric type 데이터의 요약정보
  • unique
    • 유일한 값을 list로 반환
  • sum
    • column또는 row값의 연산
    • sub, mean, min, max, count, median, mad, var 등
  • isnull
    • null인지 True,False로 보여준다.
    • sum이랑 같이 쓰면 좀더 보기 쉽다.
  • sort_values
    • column값을 기준으로 데이터를 sorting해준다.
  • corr,cov,corrwith
    • 상관계수와 공분산을 구하는 함수

딥러닝 학습

  • 신경망을 수식으로
\[o = XW + b\]
  • 이를 행렬로 표시하면
\[\begin{bmatrix} o_1,\cdots,o_{1p} \\ o_2,\cdots,o_{2p} \\ \vdots \\ o_n,\cdots,o_{np} \\ \end{bmatrix} = \begin{bmatrix} x_1,\cdots,x_{1d} \\ x_2,\cdots,x_{2d} \\ \vdots \\ x_n,\cdots,x_{nd} \\ \end{bmatrix} \begin{bmatrix} w_{11},w_{12}, \cdots ,w_{1p} \\ w_{21},w_{22}, \cdots ,w_{2p} \\ \vdots \\ w_{d1},w_{d2}, \cdots ,w_{dp} \\ \end{bmatrix} + \begin{bmatrix} b_1,\cdots,b_{1p} \\ b_2,\cdots,b_{2p}\\ \vdots \\ b_n,\cdots,b_{np} \\ \end{bmatrix}\]
  • O는 (n,p),X는 (n,d), W는 (d,p),b는 (n,p)의 모양을 가진다.
  • 이해하기 쉽게 한 행렬에 대해 계산식을 풀어보면 아래와 같다.
\[\begin{matrix} [O_1,O_2, \cdots ,O_p] = [(x_{11}W_{11}+x_{12}W_{21}+ \cdots +x_{1d}W_{d1}) + b_{11}, \\ (x_{11}W_{12}+x_{12}W_{22}+ \cdots +x_{1d}W_{d2})+b_{12},\\ \cdots \\ ,(x_{11}W_{1p}+x_{12}W_{2p}+ \cdots +x_{1d}W_{dp})+b_{1p}] \end{matrix}\] \[O_1 = (x_{11}W_{11}+x_{12}W_{21}+ \cdots +x_{1d}W_{d1}) + b_{11}\]
  • 많이 길어지지만 아래 표현한 그림으로 표현된것이, 하나의 행에대한 결과를 표현한것이 된다.

  • 그림으로 표현하면 아래와 같다.

    • 그림으로
    • 각 간선을 W라고 볼 수 있다.

softmax

  • 확률 벡터가 되므로 특정 클래스 k에 속할 확률
  • 모델의 출력을 확률로 해설 할 수 있게 변환해 주는 연산
  • 분류문제를 풀때 선형 모델과 소프트 맥스 함수를 결합하여 예측
  • 추론할땐 출력값에서 최대값을 가진것만 1로 출력하는 one-hot vector를 사용한다.
  • 비선형 함수\(z=(z_1,z_2,\cdots,z_n)\)에 활성함수 \(\sigma\) 각 노드에 적용하여 \(H =(\sigma(z_1),\sigma(z_2),\cdots,\sigma(z_n))\)를 만든다.
  • H그림

활성함수

  • 실수값을 입력으로 실수값을 출력하는 비선형 함수
  • 특정 값을 버리는 용도로 사용가능하다.
    • 너무 크거나, 음수인 값을 걸러낸다.
  • 시그모이드
  • tanh(하이퍼블릭 탄센트)
  • ReLU
    • max{0,x}
    • 딥러닝에서 자주 쓰인다.

신경망

  • 선형모델과 활성함수를 합성한 함수
    • 한번의 가중치를 적용하고, 활성함수를 적용한 과정 하나를 신경망 하나라고 본다.
  • x로부터 z를 출력한다. 이 z로부터 활성함수로 나온 결과 H를 다시 입력으로 사용하면서 최종 출력까지 반복한다.
    • 다층 신경망 (multi-layer perceptron) MLP
    • 딥러닝의 가장 기본적인 구조가된다.
  • MLP는 L개의 가중치행렬과, y절편b행렬로 구성된다.
  • 순전파
    • 1부터 순차적으로 진행하는것
  • 왜 층을 여러개 사용하는지
    • 층이 깊어질수록 목적 함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빠르게 줄어든다
    • 좀더 효율적으로 학습이 가능하다.
      • 뉴런이라고 하면 입력값이라고 생각.
    • 층이 작아지면 뉴런(노드)가 늘어나는 wide신경망이 된다.
    • 층이 깊다고 최적화가 쉽다고 할 수 없다.
      • 학습이 어려워 질 수 있다.
    • 적은 뉴런를 가지고 복잡한 패턴을 학습 할 수 있기 때문에

역전파

  • 위층으로부터 그래디언트 벡터를 계산하여 아랫층으로 넘긴다.
    • 합성함수의 연쇄법칙을 통해 그레디언트 벡터를 전달
  • 합성함수 미분법인 연쇄법칙 기반 자동미분을 사용

좀더 찾아보기

  • Series
  • DataFrame
  • loc,iloc차이
  • inplace=True

피어세션 정리

  • matplotlib.pyplot

  • dot
    • 2차원
  • matmul
    • 3차원 이상도 계산가능
  • 선형회귀
    • 고유벡터를 뺀다?
  • 내일 조 소개 발표 준비