강의 복습 내용
- python의 pandas를 사용하는 방법에 대해 알아본다.
- pandas의 column인 Series와 테이블구조인 Data Frame을 구별한다.
- pandas에서 Sereis와 Data Frame에 사용되는 함수들을 익힌다.
- 딥러닝의 학습방법
- softmax가 무엇인지 안다.
- 활성함수로 종류와 사용하는 이유를 공부한다.
- 역전파를 계산하는 이유를 알아본다.
얻은 지식
- pandas 함수.
- 딥러닝의 학습방법.
pandas!
pan
elda
tas
의 약자- 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는 (n,p),X는 (n,d), W는 (d,p),b는 (n,p)의 모양을 가진다.
- 이해하기 쉽게 한 행렬에 대해 계산식을 풀어보면 아래와 같다.
-
많이 길어지지만 아래 표현한 그림으로 표현된것이, 하나의 행에대한 결과를 표현한것이 된다.
-
그림으로 표현하면 아래와 같다.
- 각 간선을 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))\)를 만든다.
활성함수
- 실수값을 입력으로 실수값을 출력하는 비선형 함수
- 특정 값을 버리는 용도로 사용가능하다.
- 너무 크거나, 음수인 값을 걸러낸다.
- 시그모이드
- 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차원 이상도 계산가능
- 선형회귀
- 고유벡터를 뺀다?
- 내일 조 소개 발표 준비