📌 Linear Regression
- 최적의 회귀모델
- 최선의 회귀모델은 전체 데이터의 오차 합이 최소가 되는 모델을 의미
- 결국 오차 합이 최소가 되는 가중치 w1와 편향w0을 찾는 것을 의미
단순 회귀(Simple Regression)
-
독립변수 하나가 종속변수에 영향을 미치는 선형 회귀
-
x값 하나만으로 y값을 설명할 수 있는 경우
-
회귀식: y^=w0+w1x1
-
독립변수의 최선의 가중치와(w_1)와 편향(w_0)을 찾음
-
모델 학습 후 회귀계수 확인 가능
* coef_: 회귀계수(=가중치)
다중 회귀(Multiple Regression)
- 여러 독립변수가 종속변수에 영향을 미치는 선형 회귀
- 𝑦 값을 설명하기 위해서는 여러 개의 𝑥 값이 필요한 경우
- 회귀식: y^=w0+w1x1+⋯+wnxn
- 각 독립변수의 최선의 가중치와(w1,w2,⋯)와 편향(w0)을 찾음
- 회귀계수가 여럿이므로 독립변수 이름과 같이 확인하는 것을 권고
모델 구현
- 회귀 모델에만 사용
- 알고리즘 함수: sklearn.linear_model.LinearRegression
- 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등
📌 K-Nearest Neighbor
- k 근접 이웃(가장 가까운 이웃 k개)
- 학습용 데이터에서 k개의 최근접 이웃의 값을 찾아 그 값들로 새로운 값을 예측하는 알고리즘
- 회귀와 분류에 사용되는 간단한 지도학습 알고리즘
- 다른 알고리즘에 비해 이해는 쉬우나, 연산속도가 느림
Scaling
필요성: KNN은 거리 기반 알고리즘이다. k개의 가장 가까운 이웃을 선택한 다음 이러한 이웃을 기반으로 새 관측값에 대한 클래스(분류 문제의 경우)를 할당하거나 값(회귀 문제의 경우)을 예측한다.
이러한 거리 기반 알고리즘은 모두 변수 규모의 영향을 받는다. 알고리즘은 더 높은 크기의 변수 쪽으로 편향되어서는 안된다. 이 문제를 극복하기 위해 모든 변수를 동일한 규모로 축소할 수 있다.
대표적인 스케일링 방법
회귀모델 구현
- 알고리즘 함수: sklearn.neighbors.KNeighborsRegressor
- 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등
분류모델 구현
- 알고리즘 함수: sklearn.neighbors.KNeighborsClassifier
- 성능평가 함수: sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report등
📌 Decision Tree
- 결정 트리, 의사 결정 나무
- 특정 변수에 대한 의사결정 규칙을 나무 가지가 뻗는 형태로 분류해 나감
- 분류와 회귀 모두에 사용되는 지도학습 알고리즘
- 훈련 데이터에 대한 제약 사항이 거의 없는 유연한 모델
- 과적합으로 모델 성능이 떨어지기 쉬움
- 트리 깊이를 제한하는(=가지치기) 튜닝이 필요
용어
- Root Node(뿌리마디): 전체 자료를 갖는 시작하는 마디
- Terminal Node(끝마디): 자식 마디가 없는 마디(= Leaf Node)
- Internal Node(중간 마디): 부모 마디와 자식 마디가 모두 있는 마디
- Branch(가지): 연결되어 있는 2개 이상의 마디 집합
- Depth(깊이): 뿌리 마디로부터 끝 마디까지 연결된 마디 개수
불순도(Impurity)
불순도를 수치화 할 수 있는 지표
지니 불순도
- 지니불순도=1−(양성클래스비율2+음성클래스비율2)
Gini=1−∑i=1c(pi)2
- 분류 후에 얼마나 잘 분류했는지 평가하는 지표
- 특징
- 지니 불순도가 낮을수록 순도가 높음
- 지니 불순도응 0 ~ 0.5 사이의 값(이진 분류의 경우)
- 순수하게 분류되면 → 0
- 완벽하게 섞이면(50:50) → 0.5
- 지니 불순도가 낮은 속성으로 의사결정 트리 노드 결정
엔트로피(Entropy)
- 엔트로피=−음성클래스비율×log2(음성클래스비율)−양성클래스비율×log2(양성클래스비율)
Entropy=−∑i=1mpilog2pi
- p_i = 집합 안에서 속성 i의 확률을 나타냄
- 엔트로피는 0~1 사이의 값
- 순수하게 분류되면 → 0
- 완벽하게 섞이면(50:50) → 1
정보 이득(Information Gain)
- 어떤 속성이 얼마나 많은 정보를 제공하는가
- 정보 이득 공식
Gain(T,X)=Entropy(T)−Entropy(T,X)
- 정보 이득이 크다 = 어떤 속성으로 분할할 때 불순도가 줄어든다
- 모든 속성에 대해 분할한 후 정보 이득 계산
- 정보 이득이 가장 큰 속성부터 분할
가지치기
-
가지치기 하지 않으면 과대적합, 일반화되지 못함
-
여러 하이퍼파라미터 값을 조정해 가지치기 가능
-
학습 데이터에 대한 성능은 낮아지나, 평가 데이터에 대한 성능을 높일 수 있음
-
적절한 하이퍼파라미터 값을 찾도록 노력
-
주요 하이퍼파라미터
- max_depth: 트리의 최대 깊이(기본값: None)
- min_samples_split: 노드를 분할하기 위한 최소한의 샘플 개수(기본값: 2)
- min_samples_leaf: 리프 노드가 되기 위한 최소한의 샘플 수(기본값: 1)
- max_feature: 최선의 분할을 위해 고려할 Feature 수(기본값: None)
- max_leaf_node: 리프 노드 최대 개수
회귀모델 구현
- 알고리즘 함수: sklearn.tree.DecisionTreeRegressor
- 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등
분류모델 구현
- 알고리즘 함수: sklearn.tree.DecisionTreeClassifier
- 성능평가 함수: sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report등
📌 Logistic Regression
로지스틱 함수
-
시그모이드(sigmoid) 함수
p=1=e−f(x)1
-
확률 값 𝑝 는 선형 판별식 값이 커지면 1, 작아지면 0에 가까운 값이 됨
-
(−∞, ∞) 범위를 갖는 선형 판별식 결과로 (0,1) 범위의 확률 값을 얻게 됨
-
기본적으로 확률 값 0.5를 임계값(Threshold)로 하여 이보다 크면 1, 아니면 0으로 분류
분류모델 구현
- Logistic Regression 알고리즘은 분류모델에만 사용할 수 있음
- 알고리즘 함수: sklearn.linear_model.LogisticRegression
- 성능평가 함수: sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report등
📌 K-Fold Cross Validation
- 모든 데이터가 평가에 한 번, 학습에 k-1번 사용
- K개의 분할(Fold)에 대한 성능을 예측 → 평균과 표준편차 계산 → 일반화 성능
- 단, k는 2 이상이 되어야 함(최소한 한 개씩의 학습용, 검증용 데이터가 필요)
- 모델 선언 후 cross_val_score(모델, x_train, y_train, 분할 개수) 형태로 사용
- 기본 분할 개수(cv) 값은 5이며, 필요에 따라 적절히 조절할 수 있음
- cross_val_score 함수 결과로 얻은 성능들의 평균을 모델의 성능으로 봄
📌 Hyperparameter 튜닝
- Hyperparameter
- Random Search, Grid Search
이 부분에 대해선 더 공부가 필요하다. 공부를 하면서 차차 추가해 보도록 하겠다.