Skip to content
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
Empty file removed week1/0팀_홍길동.md
Empty file.
1 change: 1 addition & 0 deletions week1/3팀_김동연.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
test
60 changes: 60 additions & 0 deletions week2/3팀_김동연.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# 03 회귀 알고리즘과 모델 규제
> 농어의 무게 예측하기
---
## 3-1 K-최근접 이웃 회귀
<br>

### K-최근접 이웃 회귀
회귀는 샘플을 여러개의 클래스 중 하나로 예측하는 분류와 달리 임의의 수치, 어떤 숫자를 예측하는 지도학습 알고리즘이다.
* ex) 내년도 경제성장률 예측하기, 농어의 무게 예측하기



<br>

k-최근접 이웃 회귀는 k-최근접 이웃 분류 알고리즘과 작동 원리가 비슷하다.
예측하려는 샘플에 가장 가까운 샘플 k개를 선택하여 이 샘플들의 수치의 평균을 구하고 이 값이 예측 타깃값이 된다.
<br>
### 결정 계수 $ R^2$ (*coefficient of determination*)
회귀의 경우 모델의 정확도를 평가하는 점수로 **결정계수**라는 값을 사용한다.
결정계수는 각 샘플의 타깃과 예측한 값의 차이를 제곱하여 더한 후, 타깃과 타깃 평균의 차이를 제곱하여 더한 값으로 나누는 것으로 계산된다.

따라서 만약 모든 샘플을 타깃의 평균으로 예측한다면 결정계수는 0에 가까워지고, 타깃에 정확히 예측한다면 1에 가까운 값이 된다.
<br>
### 과대적합 (*overfitting*) vs 과소적합 (*underfitting*)
**과대적합** 이란 훈련 세트에서는 점수가 높지만 테스트 세트에서는 상대적으로 점수가 낮은 상황이를 말한다. 한마디로 훈련 세트에만 잘 맞는 모델이라고 할 수 있다. 모델이 과대적합되었다면, 실전에 투입되어 새로운 샘플들에 대해 내린 모델의 예측은 정확도가 낮을 것이다.

**과소적합** 이란 반대로 훈련 세트에서의 점수보다 테스트 세트에서의 점수가 높거나 두 점수가 모두 낮은 경우이다. 이때는 모델이 너무 단순하여 훈련 세트에도 적절히 훈련되지 않은 경우이다.

과대적합과 과소적합 모두 모델을 훈련시킬 때 경계해야하는 상황이며 모델이 훈련 세트와 테스트 세트에서 모두 적절한 점수가 나오도록 조정해야한다.
<br>
<br>
## 3-2 선형 회귀
<br>

### K-최근접 이웃의 한계
K-최근접 이웃 회귀모델은 가장 가까운 샘플을 찾아 타깃을 평균하므로 새로운 샘플이 훈련 세트의 범위를 벗어나는 경우 합당한 값을 예측할 수 없다.
<br>
### 선형 회귀 (*liner regression*)
**선형 회귀** 알고리즘은 이름에서 짐작할 수 있듯이 특성이 하나인 경우 어떤 직섭을 학습하는 알고리즘이다. 특성 $a$가 있고 이에 따라 타깃값 $y$를 예측한다면
$y = ax + b$ 라는 직선을 찾는다.
이때 모델이 찾은 $a$와 $b$값을 계수또는 가중치라고 부른다.
<br>
### 다항 회귀 (*polynomial regression*)
특성에 따른 타깃값이 직선의 형태를 띄지않을 때는 직선으로 타깃값을 예측하는데 어려움이 있다. 이럴 땐 특성을 제곱한 항을 추가하여 새로운 다항식을 만들 수 있는데 이 다항식을 사용한 선형 회귀를 **다항 회귀**라고 한다. 다항 회귀를 이용하면 특성에 따라 타깃값을 그래프에서 곡선형태로 예측할 수 있다.
<br>
<br>
## 3-3 특성 공학과 규제
<br>

### 다중 회귀 (*multiple regression*)
여러 개의 특성을 사용한 선형 회귀를 **다중회귀**라고 한다.
예를 들어 선형 회귀 모델이 2개의 특성을 사용하여 학습하면 직선이 아닌 평면을 학습하게 된다.
따라서 생선의 길이 뿐만이 아니라 높이와 두께 등 다양한 특성을 사용하여 생선의 무게를 예측할 수 있게 된다. 이때 각 특성의 값들을 제곱하거나 서로 곱해서 또다른 특성을 만들어 더 복잡한 방정식을 학습할 수 있는데, 이처럼 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업을 **특성 공학** (*feature engineering)* 이라 한다.
<br>
### 규제 (*regularization*)
**규제**는 머신러닝 모델이 훈련 세트를 너무 과도하게 학습하지 못하도록 제한을 두는 것이다. 즉 모델의 과대적합을 막는 역할을 한다. 선형 회귀 모델의 경우 특성에 곱해지는 계수를 작게 만드는 식으로 수행할 수 있다.
<br>
선형 회귀 모델에 규제를 추가한 모델로는 **릿지**(*ridge*)와 **라쏘**(*lasso*)가 있다.
릿지는 계수를 제곱한 값을 기준으로 규제를 적용하고, 라쏘는 계수의 절대값을 기준으로 규제를 적용한다. 일반적으로 릿지가 조금더 선호되며, 두 알고리즘 모두 계수의 크기를 줄이지만 라쏘는 아예 0으로 만들 수 있다.

43 changes: 43 additions & 0 deletions week3/3팀_김동연.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# 04 다양한 분류 알고리즘
> 럭키백의 확률 계산하기
---
## 4-1 로지스틱 회귀
<br>

### 로지스틱 회귀 (*logistic regression*)
**로지스틱 회귀**는 이름은 회귀이지만 분류 모델이다. 이 알고리즘은 선형 회귀와 동일하게 다음과 같은 선형 방정식을 학습한다.
$z = a × (weight) + b × (length) + c ×(height)$
<br>
여기서 $a, b, c$는 가중치 혹은 계수이다. 하지만 $z$는 실수의 값을 가지고 이것이 확률이 되려면 0\~1의 값을 가져야 한다. 따라서 z를 **시그모이드 함수** (*sigmoid function*)로 변환하여 확률값을 얻는다.
$$ϕ = \frac{1}{1+\frac{1}{z}}$$
$z$가 무한하게 큰 음수일 경우 이 함수는 0에 가까워지고, $z$가 무한하게 큰 양수일 때는 1에 가까워지므로 0\~1사이의 값을 얻을 수 있다.
<br>
로지스틱 회귀를 사용하여 다중분류를 할 수도 있다.
각 클래스마다 $z$값을 구한 후 **소프트맥스**(*softmax*)함수를 사용하여 7개의 $z$값을 총합이 1인 확률로 변환한다.
<br>
<br>
## 4-2 확률적 경사 하강법
<br>

### 점진적 학습
훈련 데이터가 한번에 준비되는 것이 아닌 조금씩 전달될 때, 앞서 훈련한 모델을 버리지 않고 새로운 데이터에 대해서만 조금씩 더 훈련하는 방식을 **점진적 학습**또는 온라인 학습이라고 한다.
<br>
<br>
### 확률적 경사 하강법 (*Stochastic Gradient Descent*)
**확률적 경사 하강법**은 대표적인 점진적 학습 알고리즘이다.
확률적 경사 하강법에서 경사 하강법은 모델이 얼마나 엉터리인지 판단하는 기준인 **손실 함수**(*loss function*)라 하는 수치를 줄이는 방향으로 학습한다는 의미이다. 또한 확률적이란 말은 '무작위하게'라는 의미를 포함하여, 확률적 경사 하강법은 훈련을 할 때 전체 샘플을 사용하지 않고 딱 하나의 샘플을 훈련 세트에서 랜덤하게 골라 손실 함수가 줄어드는 가장 가파른 길을 찾는 방식으로 훈련을 진행한다.
이때 전체 훈련 세트를 한 번 모두 사용하는 과정을 **에포크**(*epoch*)라 하고 경사 하강법은 일반적으로 수십, 수백 번 이상 에포크를 수행한다.
<br>
1개씩 말고 무작위로 여러개의 샘플을 사용해 경사 하강법을 수행하는 방식을 **미니배치 경사 하강법**(*minibatch gradient descent*)라 하고, 한 번에 전체 샘플을 사용하는 방법을 **배치 경사 하강법**(*batch gradient descent*)라 한다.
<br>

이진 분류에서 사용하는 손실 함수를 **로지스틱 손실 함수**(*logistic loss function*) 또는 **이진 크로스엔트로피 손실 함수**(*binary cross-entropy loss function*)이라 하고, 다중 분류에서 사용하는 손실 함수를 **크로스엔트로피 손실 함수**라고 한다.
<br>

### 에포크와 과대/과소적합
경사 하강법을 사용한 모델은 에포크 횟수에 따라 과소적합이나 과대적합이 될 수 있다.
에포크 횟수가 적으면 모델이 조금밖에 훈련하지 않아 훈련 세트와 테스트 세트에 잘 맞지 않는 과소적합된 모델이 될 가능성이 높고, 에포크 횟수가 너무 많으면 훈련 세트에 너무 잘 맞아 테스트 세트에는 정확도가 낮은 과대적합된 모델이 될 가능성이 높다.
<br>
에포크가 진행됨에 따라 훈련 세트 점수는 꾸준히 증가하지만 테스트 세트 점수는 어느 순간 감소하기 시작하는데, 이 과대적합이 시작하는 지점 전에 훈련을 멈추는 것을 **조기종료**(*early stopping*)라고 한다.
<br>
사이킷런에서 제공하는 **SGDClassifier** 모델은 *tol* 매개변수 값을 따라 일정 에포크 동안 성능이 향상되지 않으면 더 훈련하지 않고 자동으로 훈련을 종료한다.
60 changes: 60 additions & 0 deletions week4/3팀_김동연.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# 05 트리 알고리즘
> 와인 분류하기
---
## 5-1 결정트리
<br>

### 결정 트리 (*Decision Tree*)
**결정 트리**는 예 / 아니오에 대한 질문을 이어나가면서 정답을 찾아 학습하는 알고리즘이다. 비교적 예측 과정을 이해하기 쉽고 성능도 뛰어나다. scikit-learn의 **DesicionTreeClassifier**클래스를 이용하여 결정 트리 모델을 다룬다.
<br>

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

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

결정 트리는 제한 없이 성장하면 훈련 세트에 과대적합되기 쉬우므로 **가지치기**를 통해 결정 트리의 성장을 제한한다. 사이킷런의 결정 트리 알고리즘은 *max_depth, min_samples_split* 등의 여러 가지 가지치기 매개변수를 제공한다.
<br>
**특성 중요도**는 결정 트리에 사용된 특성이 불순도를 감소하는데 기여한 정도를 나타낸다. 특성 중요도를 계산할 수 있는 것이 결정트리의 또다른 장점이다.
<br>
<br>

## 5-2 교차 검증과 그리드 서치
<br>

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

**교차 검증**은 훈련 세트를 여러 폴드로 나눈 다음 한 폴드가 검증 세트의 역할을 하고 나머지 폴드에서는 모델을 훈련한다. 교차 검증은 이런 식으로 모든 폴드에 대해 검증 점수를 얻어 평균하는 방법이다. <br>
scikit-learn에서는 **cross_validate()**함수를 이용하여 교차 검증을 수행한다.
<br>
<br>
### 하이퍼파라미터 튜닝
머신러닝 모델이 학습할 수 없어서 사용자가 지정해야만 하는 파라미터를 **하이퍼파라미터**라고 한다. 머신러닝 라이브러리에선 이런 하이퍼파라미터는 모두 클래스나 메서드의 매개변수로 표현된다.
<br>

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

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

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

**랜덤 포레스트**는 대표적인 결정 트리 기반의 앙상블 학습 방법이다 .부트스트랩 샘플을 사용하고 랜덤하게 일부 특성을 선택하여 트리를 만드는 것이 특징이다. <br>
scikit-learn의 **RandomForestClassifier**클래스를 이용하여 랜덤 포레스트 분류 모델을 사용할 수 있다.
<br>

**엑스트라 트리**는 랜덤 포레스트와 비슷하게 결정 트리를 사용하여 앙상블 모델을 만들지만 부트스트랩 샘플을 사용하지 않는다. 대신 랜덤하게 노드를 분할해 과대적합을 감소시킨다. <br>
scikit-learn의 **ExtraTreesClassifier**클래스를 이용하여 엑스트라 트리 분류 모델을 사용할 수 있다.
<br>

**그래디언트 부스팅**은 랜덤 포레스트나 엑스트라 트리와 달리 결정 트리를 연속적으로 추가하여 손실 함수를 최소화하는 앙상블 방법이다. 이런 이유로 훈련 속도가 조금 느리지만 더 좋은 성능을 기대할 수 있다. 그래디언트 부스팅의 속도를 개선한 것이 **히스토그램 기반 그레이디언트 부스팅**이며 안정적인 결과와 높은 성능으로 정형 데이터를 다루는 머신러닝 알고리즘 중에 가장 인기가 높다.<br>
scikit-learn의 **GradientBoostingClassifier**클래스를 이용하여 그레이디언트 부스팅 분류 모델을 사용할 수 있고, **HistGradientBoostingClassifier**클래스를 사용하여 히스토그램 기반 그레이디언트 부스팅 분류 모델을 사용할 수 있다.
48 changes: 48 additions & 0 deletions week5/6조_김동연.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# 06 비지도 학습
> 비슷한 과일끼리 모으기
---
## 6-1 군집 알고리즘
<br>

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

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

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

## 6-2 k-평균
<br>

### k-평균 (*k-means*)
k-평균알고리즘이 각 과일의 평균을 자동으로 찾을 수 있게한다. 이 평균값이 클러스터의 중심에 위치하기 때문에 클러스터중심 또는 센트로이드(centroid)라고 한다. <br>

**k-평균** 알고리즘은 처음에 랜덤하게 클러스터 중심을 정하고 클러스터를 만든다. 그 다음 클러스터의 중심을 이동하고 다시 클러스터를 만드는 식으로 반복해서 최적의 클러스터를 구성하는 알고리즘이다.<br>
scikit-learn에서는 **KMeans**클래스를 이용하여 k-평균 알고리즘 모델을 사용한다..
<br>

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

**엘보우 방법**은 최적의 클러스터 개수를 정하는 방법 중 하나이다.<br> 이너셔는 클러스터 중심과 샘플 사이 거리의 제곱 합이다. 클러스터 개수에 따라 이너셔 감소가 꺾이는 지점이 적절한 클러스터 개수 k가 될 수 있다.
<br>
<br>
## 6-3 주성분 분석
<br>

### 주성분 분석 (*principal component analysis, PCA*)
머신러닝에서는 특성의 개수를 **차원**(dimension)이라고도 부른다. 예를 들어 10,000개의 특성을 가진 사진의 경우 10,000개의 차원을 가진다.
<br>

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

**주성분 분석**은 차원 축소 알고리즘의 하나로 데이터에서 가장 분산이 큰 방향을 찾는 방법이다. 이런 방향을 주성분이라고 한다. 원본 데이터를 주성분에 투영하여 새로운 특성을 만들 수 있다. 일반적으로 주성분은 원본 데이터에 있는 특성 개수보다 작다. <br>
scikit-learn의 **PCA**클래스를 이용하여 주성분 분석을 수행할 수 있다.
<br>

**설명된 분산**은 주성분 분석에서 주성분이 얼마나 원본 데이터의 분산을 잘 나타내는지 기론한 것이다. 사이킷런의 PCA 클래스는 주성분 개수나 설명된 분산의 비율을 지정하여 주성분 분석을 수행할 수 있다.