선형 회귀(Linear Regression)
종속 변수 y와 한 개 이상의 독립 변수 (또는 설명 변수) X와의 선형 상관 관계를 모델링하는 회귀분석 기법
- 데이터는 다양한 형태를 가지기 때문에, 가장 최선이 되는 직선(y = ax + b)을 그리기 위해 최선의 기울기 a와 y 절편 b를 결정하는 방법이 필요하며, 이것을 선형 회귀라고 함
- 최선의 회귀모델은 전체 데이터의 오차 합이 최소가 되는 모델을 의미
- 회귀 분석은 독립 변수의 개수를 기준으로 단순 회귀와 다중 회귀로 분류
단순 회귀
- 한 개의 독립 변수가 종속 변수에 영향을 미치는 선형 회귀
x값 하나만으로 y값을 설명할 수 있는 경우
- 모델 학습 후에 회귀 계수를 확인할 수 있음
model.coef_ # 회귀계수(가중치)
model.intercept_ # 절편(편형)
다중 회귀
- 여러 독립 변수가 종속 변수에 영향을 미치는 선형 회귀
- y값을 설명하기 위해서 여러 개의 x값이 필요한 경우
- 독립 변수가 여러 개이기 때문에 회귀계수도 여러 개이므로 이름과 같이 확인하는 것을 권고
print(list(x_train))
print(model.coef_)
print(model.intercept_)
K-Nearest Neighbor
학습용 데이터에서 k개의 최근접 이웃의 값을 찾아 그 값들로 새로운 값을 예측하는 알고리즘
- 회귀와 분류에 사용되는 매우 간단한 지도학습 알고리즘
- 다른 알고리즘에 비해 매우 직관적이고 간단해 이해하기 쉽지만, 연산 속도가 느림
k값의 중요성
- k(탐색하는 이웃 개수)에 따라 데이터를 다르게 예측할 수도 있음
- k값에 따라 예측 값이 달라지므로 적절한 k값을 찾는 것이 중요함
- k를 1로 설정 안 함 -> 이웃 하나로 현재 데이터를 판단하기에는 너무 편향된 정보
- k를 홀수로 설정 -> 짝수인 경우 과반수 이상의 이웃이 나오지 않을 수 있음(짝수의 경우 더 가까운 이웃에게 가중치를 주는 등 나름의 규칙이 있고, 짝수로 설정한다고 해서 에러가 나지는 않음)
거리 구하기
- 거리를 구하는 방법에는 유클리드 거리(Euclidean Distance), 맨하튼 거리(Manhattan Distance)가 있음
- 맨하튼 거리는 유클리드 거리보다 항상 크거나 같음
Scaling 필요성
- 스케일링 여부에 따라 KNN 모델 성능이 달라질 수 있음
1) 정규화(Normalization) : 각 변수의 값이 0과 1 사이 값이 됨
2) 표준화(Standardization) : 각 변수의 평균이 0, 표준편차가 1이 됨
- 평가용 데이터에도 학습용 데이터를 기준으로 스케일링을 수행함(==학습용 데이터의 최댓값, 최솟값, 평균 등을 사용)
- 공식을 직접 사용하거나, sklearn이 제공하는 함수를 사용할 수 있음
Decision Tree
- 특정 변수에 대한 의사결정 규칙을 나무가지가 뻗는 형태로 분류해 나감
- 분류와 회귀 모두에 사용되는 지도학습 알고리즘
- 분석 과정이 직관적이며, 이해와 설명하기가 쉬움
- 스케일링 등의 전처리 영향도가 크지 않음
- 분석 과정을 실제로 눈으로 확인할 수 있음 -> 화이트박스 모델
- 과적합으로 모델 성능이 떨어지기 쉬움
- 트리 깊이를 제한하는 가지치기 튜닝이 필요함
- 회귀의 경우 해당 terminal node의 종속변수(y)의 평균을 예측값으로 반환
- 분류의 경우 terminal node의 종속변수(y)의 최빈값을 예측값으로 반환
불순도
- 순도가 높을 수록 분류가 잘 된 것임
- 구분 완료 후 각 영역의 순도(homogeneity)는 증가, 불순도(impurity) 혹은 불확실성(uncertainty)은 최대한 감소하도록 학습을 진행
- 지니 불순도(Gini Impurity), 엔트로피(Entropy)로 불순도를 수치화 할 수 있음
가지치기
- 가지치기를 하지 않으면 모델이 학습 데이터에는 매우 잘 맞지만, 평가 데이터에는 잘 맞지 않을 수 있음 -> 과대적합, 일반화 되지 못함
- 여러 하이퍼파라미터 값을 조정해 가지치기를 할 수 있음 (max_depth 등)
- 학습 데이터에 대한 성능은 낮아지나, 평가 데이터에 대한 성능을 높일 수 있음)
- 가장 적절한 하이퍼파라미터 값을 찾도록 노력해야 함