Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[8주차 과제 제출] 4팀 배연욱 #94

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
Binary file added week1/.DS_Store
Binary file not shown.
Empty file removed week1/0팀_홍길동.md
Empty file.
109 changes: 109 additions & 0 deletions week1/[1주차 과제] 4팀 배연욱.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# [1주차 과제] 4팀 배연욱

---

### Chapter 1. 나의 첫 머신러닝

---

**인공지능(artificial intelligence, AI)**은 사람처럼 학습하고 추론할 수 있는 지능을 가진 시스템을 만드는 기술이다.

**인공지능**

* 강인공지능
* 약인공지능


**머신러닝(machine learning, ML)**은 규칙을 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야. Scikit-learn이 대표적인 라이브러리이다.

**머신러닝**

* 지도학습
* 분류
* 회귀
* 비지도학습
* 강화학습


**딥러닝(deep learning, DL)**은 인공 신경망이라고도 하며, TensorFlow, PyTorch가 대표적인 라이브러리이다.


**인공지능**

* **머신 러닝**
* **딥러닝**

---

**코랩(Colab)**은 구글 계정이 있으면 누구나 사용할 수 있는 웹 브라우저 기반의 Python 코드 실행 환경이다.

**텍스트 셀에 사용할 수 있는 마크다운**
![텍스트 셀에 사용할 수 있는 마크다운](/Users/yeonukpae/Desktop/HAI BasicML Study/week1/markdown for text cells.png)

---

**특성**은 데이터를 표현하는 하나의 성질이다.


머신러닝 알고리즘이 데이터에서 규칙을 찾는 과정을 **훈련**이라고 한다. Scikit-learn에서는 fit() 메서드가 하는 역할이다.


**k-최근접 이웃 알고리즘**은 가장 간단한 머신러닝 알고리즘 중 하나이다. 사실 어떤 규칙을 찾기보다는 전체 데이터를 메모리에 가지고 있는 것이 전부이다.


머신러닝 프로그램에서는 알고리즘이 구현된 객체를 **모델**이라고 부른다. 종종 알고리즘 자체를 모델이라고 부르기도 한다.


**정확도**는 정확한 답을 몇 개 맞혔는지를 백분율로 나타낸 값이다. Scikit-learn에서는 0~1 사이의 값으로 출력된다.
> 정확도 = (정확히 맞힌 개수) / (전체 데이터 개수)

---

### Chapter 2. 데이터 다루기

---

**지도 학습**은 입력과 타깃을 전달하여 모델을 훈련한 다음 새로운 데이터를 예측하는 데 활용한다. 1장에서부터 사용한 k-최근접 이웃이 지도 학습 알고리즘이다.


**비지도 학습**은 타깃 데이터가 없다. 따라서 무엇을 예측하는 것이 아니라 입력 데이터에서 어떤 특지을 찾는 데 주로 활용한다.


**훈련 세트**는 모델을 훈련할 때 사용하는 데이터이다. 보통 훈련 세트가 클수록 좋다. 따라서 테스트 세트를 제외한 모든 데이터를 사용한다.


**테스트 세트**는 전체 데이터에서 20~30%를 테스트 세트로 사용하는 경우가 많다. 전체 데이터가 아주 크다면 15%만 덜어내도 충분할 수 있다.

---

**데이터 전처리**는 머신러닝 모델에 훈련 데이터를 주입하기 전에 가공하는 단계를 말한다. 때로는 데이터 전처리에 많은 시간이 소모되기도 한다.

**데이터 전처리**

* 이상치(outliers) 제거
* 결측값(missing values) 처리
1. 결측값이 있는 행 제거 (.dropna() 사용)
2. 결측값 보강 (imputation)
* 평균값 또는 중앙값 또는 최빈값으로 대체
* 예측값으로 대체
* Feature Scaling
* 정규화(normalization)
* 표준화(standardization)


**표준점수**는 훈련 세트의 스케일을 바꾸는 대표적인 방법 중 하나이다. 표준점수를 얻으려면 특성의 평균을 빼고 표준편차로 나눈다. 반드시 훈련 세트의 평균과 표준편차로 테스트 세트를 바꿔야 한다.


**브로드캐스팅**은 크기가 다른 NumPy 배열에서 자동으로 사칙 연산을 모든 행이나 열로 확장항여 수행하는 기능이다.

---

### 기타 발표 내용 정리

---

**교차 검증**

* Holdout method
* Leave-one-out cross validation
* k-fold cross validation
Binary file added week1/markdown for text cells.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
41 changes: 41 additions & 0 deletions week3/[3주차 과제] 4팀 배연욱.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# [3주차 과제] 4팀 배연욱

---

### Chapter 4. 다양한 분류 알고리즘
#### 04-1 로지스틱 회귀

---

* k-최근접 이웃은 주변 이웃의 클래스 비율을 확률로 출력한다.

**로지스틱 회귀**는 선형 방정식을 사용한 분류 알고리즘이다. 선형 회귀와 달리 시그모이드 함수나 소프트맥스 함수를 사용하여 클래스 확률을 출력할 수 있다. 분류 알고리즘임에도 로지스틱 '회귀'라고 이름 붙여진 것은 그 기저 기술이 선형 회귀와 거의 같기 때문이다.

**다중 분류**는 타깃 클래스가 2개 이상인 분류 문제이다. 로지스틱 회귀는 다중 분류를 위해 소프트맥스 함수를 사용하여 클래스를 예측한다.

**시그모이드 함수**는 선형 방정식의 출력을 0과 1 사이의 값으로 압축하며 이진 분류를 위해 사용한다.
![시그모이드 함수](/Users/yeonukpae/Desktop/HAI BasicML Study/week3/sigmoid function.png)

**소프트맥스 함수**는 다중 분류에서 여러 선형 방정식의 출력 결과를 정규화하여 합이 1이 되도록 만든다.
![소프트맥스 함수](/Users/yeonukpae/Desktop/HAI BasicML Study/week3/softmax function.png)

---

#### 04-2 확률적 경사 하강법

**점진적 학습**은 앞서 훈련한 모델을 버리지 않고 새로운 데이터에 대해서만 조금씩 더 훈련하는 방식이다. 온라인 학습이라고 불리기도 한다. 대표적인 점진적 학습 알고리즘이 확률적 경사 하강법이다.

**확률적 경사 하강법**은 훈련 세트에서 샘플을 하나씩 꺼내 손실 함수의 경사를 따라 최적의 모델을 찾는 알고리즘이다. 샘플을 하나씩 사용하지 않고 여러 개를 사용하면 **미니배치 경사 하강법**이 된다. 한 번에 전체 샘플을 사용하면 **배치 경사 하강법**이 된다.

* 신경망 모델은 확률적 경사 하강법이나 미니배치 경사 하강법을 사용한다.

**손실 함수**는 확률적 경사 하강법이 최적화할 대상이다. 대부분의 문제에 잘 맞는 손실 함수가 이미 정의되어 있다. 이진 분류에는 로지스틱 회귀(또는 이진 크로스엔트로피) 손실 함수를 사용한다. 다중 분류에는 크로스엔트로피 손실 함수를 사용한다. 회귀 문제에는 평균 제곱 오차 손실 함수를 사용한다. 손실 함수는 미분 가능해야 한다.

* 엄밀히 말하면 손실 함수는 샘플 하나에 대한 손실을 정의하고 비용 함수는 훈련 세트에 있는 모든 샘플에 대한 손실 함수의 합을 말한다.
* 회귀의 손실 함수로는 평균 절댓값 오차(타깃에서 예측을 뺀 절댓값을 모든 샘플에 평균한 값) 또는 평균 제곱 오차(타깃에서 예측을 뺀 값을 제곱한 다음 모든 샘플에 평균한 값)를 많이 사용한다. 이 값이 작을수록, 즉 오차가 작을수록 좋은 모델이다.

**힌지 손실**은 **서포트 벡터 머신**이라 불리는 다른 머신러닝 알고리즘을 위한 손실 함수이다.

**에포크**는 확률적 경사 하강법에서 전체 샘플을 모두 사용하는 한 번 반복을 의미한다. 일반적으로 경사 하강법 알고리즘은 수십에서 수백 번의 에포크를 반복한다.

**조기 종료**는 과대적합이 시작하기 전에 훈련을 멈추는 것이다.
Binary file added week3/sigmoid function.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added week3/softmax function.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 42 additions & 0 deletions week4/[4주차 과제] 4팀 배연욱.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# [4주차 과제] 4팀 배연욱

---

### Chapter 5. 트리 알고리즘
#### 05-1 결정 트리

---

**결정 트리**는 예 / 아니오에 대한 질문을 이어나가면서 정답을 찾아 학습하는 알고리즘이다. 비교적 예측 과정을 이해하기 쉽고 성능도 뛰어나다.

**불순도**는 결정 트리가 최적의 질문을 찾기 위한 기준이다. 사이킷런은 지니 불순도와 엔트로피 불순도를 제공한다.

**정보 이득**은 부모 노드와 자식 노드의 불순도 차이이다. 결정 트리 알고리즘은 정보 이득이 최대화되도록 학습한다.

결정 트리는 제한 없이 성장하면 훈련 세트에 과대적합되기 쉽다. **가지치기**는 결정 트리의 성장을 제한하는 방법이다. 사이킷런의 결정 트리 알고리즘은 여러 가지 가치지기 매개변수를 제공한다.

**특성 중요도**는 결정 트리에 사용된 특성이 불순도를 감소하는데 기여한 정도를 나타내는 값이다. 특성 중요도를 계산할 수 있는 것이 결정 트리의 또다른 큰 장점이다.

---

#### 05-2 교차 검증과 그리드 서치

**검증 세트**는 하이퍼파라미터 튜닝을 위해 모델을 평가할 때, 테스트 세트를 사용하지 않기 위해 훈련 세트에서 다시 떼어 낸 데이터 세트이다.

**교차 검증**은 훈련 세트를 여러 폴드로 나눈 다음 한 폴드가 검증 세트의 역할을 하고 나머지 폴드에서는 모델을 훈련한다. 교차 검증은 이런 식으로 모든 폴드에 대해 검증 점수를 얻어 평균하는 방법이다.

**그리드 서치**는 하이퍼파라미터 탐색을 자동화해 주는 도구이다. 탐색할 매개변수를 나열하면 교차 검증을 수행하여 가장 좋은 검증 점수의 매개변수 조합을 선택한다. 마지막으로 이 매개변수 조합으로 최종 모델을 훈련한다.

**랜덤 서치**는 연속된 매개변수 값을 탐색할 때 유용하다. 탐색할 값을 직접 나열하는 것이 아니고 탐색 값을 샘플링할 수 있는 확률 분포 객체를 전달한다. 지정된 횟수만큼 샘플링하여 교차 검증을 수행하기 때문에 시스템 자원이 허락하는 만큼 탐색량을 조절할 수 있다.

---

#### 05-3 트리의 앙상블

**앙상블 학습**은 더 좋은 예측 결과를 만들기 위해 여러 개의 모델을 훈련하는 머신러닝 알고리즘을 말한다.

**랜덤 포레스트**는 대표적인 결정 트리 기반의 앙상블 학습 방법이다. 부트스트랩 샘플을 사용하고 랜덤하게 일부 특성을 선택하여 트리를 만드는 것이 특징이다.

**엑스트라 트리**는 랜덤 포레스트와 비슷하게 결정 트리를 사용하여 앙상블 모델을 만들지만 부트스트랩 샘플을 사용하지 않는다. 대신 랜덤하게 노드를 분할해 과대적합을 감소시킨다.

**그레이디언트 부스팅**은 랜덤 포레스트나 엑스트라 트리와 달리 결정 트리를 연속적으로 추가하여 손실 함수를 최소화하는 앙상블 방법이다. 이런 이유로 훈련 속도가 조금 느리지만 더 .좋은 성능을 기대할 수 있다. 그레이디언트 부스팅의 속도를 개선한 것이 **히스토그램 기반 그레이디언트 부스팅**이며 안정적인 결과와 높은 성능으로 매우 인기가 높다.
34 changes: 34 additions & 0 deletions week5/[5주차 과제] 4팀 배연욱.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# [5주차 과제] 4팀 배연욱

---

### Chapter 6. 비지도 학습
#### 06-1 군집 알고리즘

---

**비지도 학습**은 머신러닝의 한 종류로 훈련 데이터에 타깃이 없다. 타깃이 없기 때문에 외부의 도움 없이 스스로 유용한 무언가를 학습해야 한다. 대표적인 비지도 학습 작업은 군집, 차원 축소 등이다.

**히스토그램**은 구간별로 값이 발생한 빈도를 그래프로 표시한 것이다. 보통 x축이 값의 구간(계급)이고 y축이 발생 빈도(도수)이다.

**군집**은 비슷한 샘플끼리 하나의 그룹으로 모으는 대표적인 비지도 학습 작업이다. 군집 알고리즘으로 모은 샘플 그룹을 클러스터라고 부른다.

---

#### 06-2 k-평균

**k-평균** 알고리즘은 처음에 랜덤하게 클러스터 중심을 정하고 클러스터를 만든다. 그다음 클러스터의 중심을 이동하고 다시 클러스터를 만드는 식으로 반복해서 최적의 클러스터를 구성하는 알고리즘이다.

**클러스터 중심**은 k-평균 알고리즘이 만든 클러스터에 속한 샘플의 특성 평균값이다. 센트로이드(centroid)라고도 부른다. 가장 가까운 클러스터 중심을 샘플의 또 다른 특성으로 사용하거나 새로운 샘플에 대한 예측으로 활용할 수 있다.

**엘보우 방법**은 최적의 클러스터 개수를 정하는 방법 중 하나이다. 이너셔는 클러스터 중심과 샘플 사이 거리의 제곱 합이다. 클러스터 개수에 따라 이너셔 감소가 꺾이는 지점이 적절한 클러스터 개수 k가 될 수 있다. 이 그래프의 모양을 따서 엘보우 방법이라고 부른다.

---

#### 06-3 주성분 분석

**차원 축소**는 원본 데이터의 특성을 적은 수의 새로운 특성으로 변환하는 비지도 학습의 한 종류이다. 차원 축소는 저장 공간을 줄이고 시각화하기 쉽다. 또한 다른 알고리즘의 성능을 높일 수도 있다.

**주성분 분석**은 차원 축소 알고리즘의 하나로 데이터에서 가장 분산이 큰 방향을 찾는 방법이다. 이런 방향을 주성분이라고 부른다. 원본 데이터를 주성분에 투영하여 새로운 특성을 만들 수 있다. 일반적으로 주성분은 원본 데이터에 있는 특성 개수보다 작다.

**설명된 분산**은 주성분 분석에서 주성분이 얼마나 원본 데이터의 분산을 잘 나타내는지 기록한 것이다. 사이킷런의 PCA 클래스는 주성분 개수나 설명된 분산의 비유를 지정하여 주성분 분석을 수행할 수 있다.
36 changes: 36 additions & 0 deletions week6/[6주차 과제] 4팀 배연욱.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# [6주차 과제] 4팀 배연욱

---

### Chapter 7. 딥러닝을 시작합니다
#### 07-1 인공 신경망

---

**인공 신경망**은 생물학적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘입니다. 이름이 신경망 이지만 실제 우리 뇌를 모델링한 것은 아닙니다. 신경망은 기존의 머신러닝 알고리즘으로 다루기 어려웠던 이미지, 음성, 텍스트 분야에서 뛰어난 성능을 발휘하면서 크게 주목받고 있습니다. 인공 신경망 알고리즘을 종종 딥러닝이라고도 부릅니다.

**텐서플로**는 구글이 만든 딥러닝 라이브러리로 매우 인기가 높습니다. CPU와 GPU를 사용해 인공 신경망 모델을 효율적으로 훈련하며 모델 구축과 서비스에 필요한 다양한 도구를 제공합니다. 텐서플로 2.0부터는 신경망 모델을 빠르게 구성할 수 있는 케라스를 핵심 API로 채택하였습니다. 케라스를 사용하면 간단한 모델에서 아주 복잡한 모델까지 손쉽게 만들 수 있습니다.

**밀집층**은 가장 간단한 인공 신경망의 층입니다. 인공 신경망에는 여러 종류의 층이 있습니다. 밀집층에서는 뉴런들이 모두 연결되어 있기 때문에 완전 연결 층이라고도 부릅니다. 특별히 출력층에 밀집층을 사용할 때는 분류하려는 클래스와 동일한 개수의 뉴런을 사용합니다.

**원-핫 인코딩**은 정숫값을 배열에서 해당 정수 위치의 원소만 1이고 나머지는 모두 0으로 변환합니다. 이런 변환이 필요한 이유는 다중 분류에서 출력층에서 만든 확률과 크로스 엔트로피 손실을 계산하기 위해서 입니다. 텐서플로에서는 ‘sparse _ categorical _ entropy’ 손실을 지정하면 이런 변환을 수행할 필요가 없습니다.

---

#### 07-2 심층 신경망

**심층 신경망**은 2개 이상의 층을 포함한 신경망입니다. 종종 다층 인공 신경망, 심층 신경망, 딥 러닝을 같은 의미로 사용합니다.

**렐루 함수**는 이미지 분류 모델의 은닉층에 많이 사용하는 활성화 함수입니다. 시그모이드 함수는 층이 많을수록 활성화 함수의 양쪽 끝에서 변화가 작기 때문에 학습이 어려워집니다. 렐루 함수는 이런 문제가 없으며 계산도 간단합니다.

**옵티마이저**는 신경망의 가중치와 절편을 학습하기 위한 알고리즘 또는 방법을 말합니다. 케라스에는 다양한 경사 하강법 알고리즘이 구현되어 있습니다. 대표적으로 SGD, 네스테로프 모멘텀, RMSprop, Adam 등이 있습니다.

---

#### 07-3 신경망 모델 훈련

**드롭아웃**은 은닉층에 있는 뉴런의 출력을 랜덤하게 꺼서 과대적합을 막는 기법입니다. 드롭아웃은 훈련 중에 적용되며 평가나 예측에서는 적용하지 않습니다. 텐서플로는 이를 자동으로 처리합니다.

**콜백**은 케라스 모델을 훈련하는 도중에 어떤 작업을 수행할 수 있도록 도와주는 도구입니다. 대표적으로 최상의 모델을 자동으로 저장해 주거나 검증 점수가 더 이상 향상되지 않으면 일찍 종료할 수 있습니다.

**조기 종료**는 검증 점수가 더 이상 감소하지 않고 상승하여 과대적합이 일어나면 훈련을 계속 진행하지 않고 멈추는 기법입니다. 이렇게 하면 계산 비용과 시간을 절약할 수 있습니다.
38 changes: 38 additions & 0 deletions week8/[8주차 과제] 4팀 배연욱.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# [8주차 과제] 4팀 배연욱

---

### Chapter 9. 텍스트를 위한 인공 신경망
#### 09-1 순차 데이터와 순환 신경망

---

**순차 데이터**는 텍스트나 시계열 데이터와 같이 순서에 의미가 있는 데이터입니다. 대표적인 순차 데이터로는 글, 대화, 일자별 날씨, 일자별 판매 실적 등을 예로 들 수 있습니다.

**순환 신경망**은 순차 데이터에 잘 맞는 인공 신경망의 한 종류입니다. 순차 데이터를 처리하기 위해 고안된 순환층을 1개 이상 사용한 신경망을 순환 신경망이라고 부릅니다.

순환 신경망에서는 종종 순환층을 **셀**이라 부릅니다. 일반적인 인공 신경망과 마찬가지로 하나의 셀은 여러 개의 뉴런으로 구성됩니다.

순환 신경망에서는 셀의 출력을 특별히 **은닉 상태**라고 부릅니다. 은닉 상태는 다음 층으로 전달될 뿐만 아니라 셀이 다음 타임스텝의 데이터를 처리할 때 재사용됩니다.

---

#### 09-2 순환 신경망으로 IMDB 리뷰 분류하기

**말뭉치**는 자연어 처리에서 사용하는 텍스트 데이터의 모음, 즉 훈련 데이터셋을 일컫습니다.

**토큰**은 텍스트에서 공백으로 구분되는 문자열을 말합니다. 종종 소문자로 변환하고 구둣점은 삭제합니다.

**원-핫 인코딩**은 어떤 클래스에 해당하는 원소만 1이고 나머지는 모두 0인 벡터입니다. 정수로 변환된 토큰을 원-핫 인코딩으로 변환하려면 어휘 사전 크기의 벡터가 만들어집니다.

**단어 임베딩**은 정수로 변환된 토큰을 비교적 작은 크기의 실수 밀집 벡터로 변환합니다. 이런 밀집 벡터는 단어 사이의 관계를 표현할 수 있기 때문에 자연어 처리에서 좋은 성능을 발휘합니다.

---

#### 09-3 LSTM과 GRU 셀

**LSTM(Long Short-Term Memory)** 셀은 타임스텝이 긴 데이터를 효과적으로 학습하기 위해 고안된 순환층입니다. 입력 게이트, 삭제 게이트, 출력 게이트 역할을 하는 작은 셀이 포함되어 있습니다.

LSTM 셀은 은닉 상태 외에 셀 상태를 출력합니다. **셀 상태**는 다음 층으로 전달되지 않으며 현재 셀에서만 순환됩니다.

**GRU(Gated Recurrent Unit)** 셀은 LSTM 셀의 간소화 버전으로 생각할 수 있지만 LSTM 셀에 못지않는 성능을 냅니다.