해당 포스팅은 네이버 부스트캠프 AI Tech 학습 정리 자료임을 알려드립니다.
1. 강의 정리
최성철 교수님 - Pandas
1) pandas
pandas는 구조화된 데이터의 처리를 지원하는 Python 라이브러리입니다. panel data의 줄인 말입니다. 고성능 array 계산 라이브러리인 numpy와 통합하여, 강력한 스프레드시트 처리 기능을 제공합니다. 인덱싱, 연산용 함수, 전처리 함수 등을 제공합니다. 데이터 처리 및 통계 분석을 위해서 사용합니다.
2) series
DataFrame 중 하나의 Column에 해당하는 데이터의 모음 object를 series라고 합니다. 하나의 column vector를 표현하는 object입니다. Series 인덱스는 숫자뿐만 아니라 문자로도 지정이 가능하다는 차이가 있습니다. 딕셔너리를 Series에 넣어주면, 키값이 인덱스가 됩니다. 기본적으로 series 데이터는 인덱스 기준으로 생성이 됩니다. 만약, 인덱스에 값이 없다면 NaN(null)으로 표현됩니다.
3) dataframe
data Table 전체를 포함하는 object를 dataframe이라고 합니다. 데이터 프레임은 DataFrame 명령어를 쓰기보다는 CSV 파일이나 Excel 파일을 불러와서 사용합니다.
4) selection & drop
원하는 값을 선택하기 위해서는 다양한 방법이 존재합니다. 1개의 column을 선택시에는 해당 column의 이름으로 선택할 수 있고, 다양한 column값을 구하고 싶다면, 리스트에 원하는 column명을 넣어서 선택할 수 있습니다. 앞에서 언급한 방법 이외에도 column 이름 없이 index number만 사용할 수도 있고, column과 index를 모두 사용할 수도 있습니다. column명 자리에 boolean index 적용도 가능합니다. 선택할 때, loc와 iloc를 많이 활용하게 되는데, iloc는 column number와 index number로 접근하고, loc는 column명과 index명으로 접근한다는 차이가 있습니다.
5) dataframe operation
series는 index를 기준으로 연산을 수행합니다. 겹치는 index가 없을 경우 NaN값으로 반환합니다. 데이터 프레임은 column과 index를 모두 고려하며 계산을 수행합니다. +대신 add operation을 쓰면 NaN값을 다른 값으로 변환해서 넣어줄 수 있습니다.
6) lambda, map, apply
pandas의 series type의 데이터에도 map 함수 사용가능합니다. function 대신 dict, sequence형 자료 등으로 대체도 가능합니다. map과 비슷하게 데이터 변환하는 replace 함수도 존재합니다. 다만, 변경사항을 저장하기 위해서는 inplace=True를 반드시 작성해야 합니다. apply는 series 전체(column)에 적용하는 함수입니다.
7) panda built-in functions
함수 | 특징 |
describe() | Numeric type 데이터의 요약 정보를 반환 |
unique() | series data의 유일한 값을 list로 반환 |
sum(axis) | 기본적인 column(axis=0) 또는 row(axis=1) 값의 연산을 지원 |
isnull() | column 또는 row 값의 NaN (null) 값의 index를 반환 / sum이랑 같이 활용하기도 함 |
sort_values() | column 값을 기준으로 데이터를 sorting (ascending=True : 오름차순) |
corr, cov, corrwith | 상관계수와 공분산을 구하는 함수 |
임성빈 교수님 - 딥러닝 학습방법 이해하기
1) 신경망
선형 모델은 단순한 데이터에서는 도움이 되겠지만, 분류 문제나 복잡한 문제들의 경우 선형 모델로 높은 예측을 가지는 모델을 얻어내기 어렵습니다. 그래서 이러한 문제들을 풀기 위해서 신경망 모델을 사용하게 됩니다. 여기서 사용되는 신경망 모델은 비선형 모델이지만, 수식으로 분해해보면 선형 모델과 비선형 모델의 결합으로 되어있습니다.
위 그림은 수식적인 선형모델의 형태입니다. 각 행 벡터 $o_{i}$(n×p)는 데이터 $x_{i}$(n×d)와 가중치 행렬 $W$(d×p) 사이의 행렬곱과 절편 $b$(n×p) 벡터의 합으로 표현된다고 가정해봅시다. 입력으로 넣어준 d개의 $X$ 변수로 p개의 선형 모델을 만들어서 p개의 잠재 변수 $o$를 설명하는 모델을 만드는 형태라고 보시면 되겠습니다. 이러한 선형 모델과 활성 함수를 반복적으로 사용해서 여러층을 쌓은 것을 다층 퍼셉트론(MLP)이라고 합니다. 왜 층을 여러 개를 쌓나요? 이론적으로는 2층 신경망으로도 임의의 연속함수를 근사할 수 있습니다. 이것을 universal approximation theorem이라고 부릅니다. 그러나 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습이 가능하기 때문에 사용합니다. 만약, 층이 얇으면 필요한 뉴런의 숫자가 기하급수적으로 늘어나 넓은 신경망이 되어야 합니다. 그렇지만 층이 깊다고 해서 복잡한 함수를 근사는 할 수 있겠지만 최적화가 쉽다는 것은 아닙니다. 이 부분에 대해서는 CNN파트에서 더 자세히 다룹니다.
2) softmax
softmax 함수는 모델의 출력을 확률로 해석할 수 있게 변환해 주는 연산이며, 분류 문제를 풀 때 선형모델과 softmax 함수를 결합하여 예측합니다. 출력 벡터 $o$에 softmax 함수를 합성하면 확률 벡터가 되므로 특정 클래스 $k$에 속할 확률이라고 해석할 수 있습니다. 선형 모델로 얻어진 결과 값이 확률 벡터가 아닌 경우가 많은데 이를 확률 벡터로 변환시켜주는 함수입니다. 추론을 할 때는 원-핫(one-hot) 벡터로 최대값을 가진 주소만 1로 출력하는 연산을 사용해서 softmax를 사용하지 않습니다.
3) 활성함수
활성 함수는 실수 값을 입력으로 받아서 실수 값을 반환해주는 비선형 함수입니다. 활성 함수를 쓰지 않은 딥러닝은 선형 모형과 차이가 없습니다. 시그모이드 함수나 tanh 함수는 전통적으로 많이 쓰이던 활성 함수이지만 딥러닝에서는 ReLU 함수를 많이 쓰고 있습니다.
4) 역전파 알고리즘
딥러닝은 역전파(backpropagation) 알고리즘을 이용하여 각 층에 사용된 파라미터 $W$와 $b$를 학습합니다. 역전파는 손실 함수를 $W$에 대한 그레디언트 값을 계산할 때 사용됩니다. 이때, 합성함수의 미분법인 연쇄 법칙(chain-rule)을 기반으로 자동 미분(auto-differentiation)을 사용합니다. 각 노드의 텐서 값을 컴퓨터가 기억하고 있어야 미분 계산이 가능합니다. 그래서 역전파 알고리즘은 메모리 사용량이 많이 필요로 합니다.
2. 피어 세션 정리
[1월 27일 피어세션 정리]
1. 판다스 경험 공유
- 직접 써보면서 익숙해지는 것이 좋을 것 같다.
- 판다스 속도처리관련 이슈가 있었다. 벡터화해서 최적화하면 속도가 빨라진다. 해당 링크로 도움을 받았음.
- 판다스 실습을 해보면 좋을 것 같다. 예시) 타이타닉(Kaggle)
- 속도보다 메모리 이슈가 있었던 경험도 있었다. 해결 방법은 무엇이 있을까요?
[답변]
1). 당시에는 전처리 과정을 저장하고 불러오는 방식으로 했었는데 좋은 해결방법은 아니였음.
2). R을 사용했을 때, 비슷한 경험이 있었음. R에서는 힙메모리 사용량을 올려주니까 메모리 이슈가 덜 발생했음.
2. 분류 문제에서 softmax 함수가 사용되는 이유가 뭘까요?
- softmax는 모든 확률 중에 해당 케이스가 될 수 확률을 나타낼 수 있어서 다중 분류했을 때, 확률 값을 추정하기에 가장 좋은 방법이다.
- 굳이 왜 exp함수를 쓸까? 링크
- softmax 함수의 결과값을 분류 모델의 학습에 어떤식으로 사용할 수 있을까요? 답변 : 각 클래스에 대한 확률값을 나타내므로 분류를 진행할 수 있다.
3. 내일 발표준비