모델 정리
- Linear Regression
- K-Nearest Neighbor
- Decision Tree
- Logistic Regression
- Random Forest
- XGBoost
- Light GBM
Linear Regression
- 이름과 같이 회귀만 가능!
- 선형 직선을 이용하여 값을 예측하는 방식
단순 회귀
- 독립변수 개수로 회귀분석을 단순 회귀와 다중 회귀로 분류
- 독립변수 하나가 종속변수에 영향을 미치는 선형 회귀
- 𝑥 값 하나만으로 𝑦값을 설명할 수 있는 경우
- 독립변수의 최선의 가중치와(w1)와 편향(w0)을 찾음
다중 회귀
- 여러 독립변수가 종속변수에 영향을 미치는 선형 회귀
- 𝑦 값을 설명하기 위해서는 여러 개의 𝑥 값이 필요한 경우
- 각 독립변수의 최선의 가중치와(w1, w2, w3, w4…)와 편향(w0)을 찾음
code
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score
K-Nearest Neighbor
- k-Nearest Neighbor: k 최근접 이웃(가장 가까운 이웃 k개)
- 학습용 데이터에서 k개의 최근접 이웃의 값을 찾아 그 값들로 새로운 값을 예측하는 알고리즘
- 회귀와 분류에 사용되는 매우 간단한 지도학습 알고리즘
- 다른 알고리즘에 비해 이해하기 쉽지만, 연산 속도가 느림
k값의 중요성
- k(탐색하는 이웃 개수)에 따라 데이터를 다르게 예측할 수도 있음
- k 값에 따라 예측 값이 달라지므로 적절한 k 값을 찾는 것이 중요(기본값=5)
- 검증 데이터로 가장 정확도가 높은 k를 찾아 KNN 알고리즘의 k로 사용
Scaling
- 거리를 사용하기 때문에 정규화가 성능에 영향을 미침
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
code
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_absolute_error, r2_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix, classification_report
model = KNeighborsRegressor(n_neighbors=5)
Decision Tree
- 특정 변수에 대한 의사결정 규칙을 나무 가지가 뻗는 형태로 분류해 나감
- 분류와 회귀 모두에 사용되는 지도학습 알고리즘
- 분석 과정이 직관적이며, 이해와 설명하기가 쉬움
- 스케일링 등의 전처리 영향도가 크지 않음
- 과적합으로 모델 성능이 떨어지기 쉬움
- 트리 깊이를 제한하는(=가지치기) 튜닝이 필요
가지치기
- 가지치기를 하지 않으면 모델이 학습 데이터에는 매우 잘 맞지만, 평가 데이터에는 잘 맞지 않음
- 여러 하이퍼파라미터 값을 조정해 가지치기 할 수 있음
- max_depth, min_samples_leaf, min_samples_split 등
- 학습 데이터에 대한 성능은 낮아지나, 평가 데이터에 대한 성능을 높일 수 있음
- 가장 적절한 하이퍼파라미터 값을 찾도록 노력해야 함
code
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error, r2_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix, classification_report
model = DecisionTreeRegressor(max_depth=5)
Logistic Regression
- Sigmoid를 활용하여 분류만 가능한 모델!
로지스틱 함수
- 시그모이드(sigmoid) 함수라고도 부름
- 확률 값 𝑝 는 선형 판별식 값이 커지면 1, 작아지면 0에 가까운 값이 됨
- (-∞, ∞) 범위를 갖는 선형 판별식 결과로 (0, 1) 범위의 확률 값을 얻게 됨
- 기본적으로 확률 값 0.5를 임계값(Threshold)로 하여 이보다 크면 1, 아니면 0으로 분류함
- 𝑥 데이터가 주어졌을 때 확률을 예측하는 로지스틱 회귀분석은 학습 데이터를 잘 설명하는 선형 판별식의 기울기(𝑎)와 절편(𝑏)을 찾는 문제
code
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report
model = LogisticRegression()
앙상블(Ensemble)
- 통합은 힘이다(Unity is strength)
- 약한 모델이 올바르게 결합하면 더 정확하고 견고한 모델을 얻을 수 있다!
- 여러 개의 모델을 결합하여 훨씬 강력한 모델을 생성하는 기법
배깅(Bagging)
- Bootstrap Aggregating의 약자
- 데이터로부터 부트스트랩 한 데이터로 모델들을 학습시킨 후, 모델들의 예측 결과를 집계해 최종 결과를 얻는 방법
- 같은 유형의 알고리즘 기반 모델들을 사용
- 데이터 분할 시 중복을 허용(복원 랜덤 샘플링 방식이라고 함)
- 범주형 데이터(Categorical Data)는 투표 방식(Voting)으로 결과를 집계
- 연속형 데이터(Continuous Data)는 평균으로 결과를 집계
- 대표적인 배깅 알고리즘: Random Forest
부스팅(Boosting)
- 같은 유형의 알고리즘 기반 모델 여러 개에 대해 순차적으로 학습을 수행
- 이전 모델이 제대로 예측하지 못한 데이터에 대해서 가중치를 부여하여 다음 모델이 학습과 예측을 진행하는 방법
- 계속하여 모델에게 가중치를 부스팅하며 학습을 진행해 부스팅 방식이라 함
- 예측 성능이 뛰어나 앙상블 학습을 주도함
- 배깅에 비해 성능이 좋지만, 속도가 느리고 과적합 발생 가능성이 있음
- 대표적인 부스팅 알고리즘: XGBoost, LightGBM
code
from sklearn.ensemble import RandomForestRegressor
from xgboost import XGBRegressor
from sklearn.metrics import mean_absolute_error, r2_score
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from sklearn.metrics import confusion_matrix, classification_report
model = RandomForestRegressor(max_depth=5, n_estimators=100, random_state=1)
model = XGBRegressor(max_depth=5, n_estimators=100, random_state=1)