소란한 블로그
[TIL-210202] Logistic Regression 본문
1. 데이터 세트 나누기 (train/validate/test)
- Training
: 모델에 학습시키기 위한 데이터. 이 데이터만을 가지고 모델을 학습시킨다.
- Validation
: training set을 통해 학습시킨 모델을 검증하기 위한 dataset.
: test set에서 성능을 평가하기 전에 validate set을 통해 먼저 성능을 평가하고 좋지 않으면 다시 train set을 이용하여 학습 알고리즘을 수정한다. 다시말해 train set을 통해 학습시킨 모델을 test set에 적용하기 전에 validate set에 먼저 적용해 보면서 모델을 수정해 나가며 overfitting을 방지하도록 한다.
- Testing
: test set은 오로지 최종 성능을 평가하기 위해 쓰인다. test set을 참고하여 모델을 고친다면 다른 데이터셋에 모델을 적용해볼 때 overfitting(과적합- 분산이 커지는 현상)이 나타날 수 있다.
먼저 전체 데이터셋에서 train - test를 나누고, train set에서 train과 validate set을 나눈다.
# 훈련, 테스트 세트 분리
train, test = train_test_split(df, random_state=2)
print("train shape: ", train.shape)
print("test shape: ", test.shape)
# 훈련, 검증 세트 분리
train, val = train_test_split(train, random_state=2)
print("train shape: ", train.shape)
print("test shape: ", val.shape)
2. 분류(Classification) 문제
- 기준 모델 정하는 방법 (Majority class baseline)
분류문제에서는 타겟 변수에서 가장 빈번하게 나타나는 범주를 기준모델로 설정한다. 대부분 범주 분류 문제들은 범주들의 비율이 서로 차이가 많이나기 때문에, 다수 범주를 기준모델로 해야한다.
만약 클래스 1과 0의 비율 중 1이 차지하는 비율이 90%인 데이터를 가지고 학습한 모델이 있다면 이 모델은 무슨 테스트 데이터던지 1이라고 예측할 수도 있다. 이 모델의 정확도를 측정해보면 90%가 나올테지만 사실은 성능에 문제가 있는 모델이다. 따라서 정확도가 90%인 기준모델을 설정하고 90%보다 더 높은 정확도를 보이는 모델을 만들어야 한다.
- 평가지표(evaluation metrics)
분류문제에서는 회귀와는 다른 평가지표를 이용해야 한다.
분류에서는 평가지표로 accuracy를 사용한다. accuracy는 제대로 분류된 데이타의 비율을 뜻한다.
accuracy = (TP + TN) / (전체 데이터의 수 = P + N)
sklearn.metrics에서 제공하는 메소드가 존재한다.
accuracy_score()의 파라미터는 (모델 학습에 이용한 train target, train set을 이용해 학습된 모델을 이용해 예측한 값) 이다.
from sklearn.metrics import accuracy_score
y_pred = model.predict(X_train)
print("training accuracy: ", accuracy_score(y_train, y_pred))
3. 로지스틱 회귀(Logistic Regression)
로지스틱 회귀는 데이터를 바탕으로 target을 분류해주는 회귀 모델이다.
특성 변수를 로지스틱 함수 형태로 표현하여 특정 클래스에 속할 확률값으로 관측치를 계산해준다. 이 확률 값을 이용하여 어느 클래스에 속해있는지 판단할 수 있다. 예를 들어 확률값이 기준 값보다 크면 1 아니면 0이라고 예측할 수 있다.
logistic regression 역시 sklearn에서 제공하는 메소드를 이용하면 쉽게 구현할 수 있다.
이때 정확도를 구하기 위해 .score() 메소드를 이용할 수 있는데, 위에서 본 accuracy와는 약간 다르다고 한다.
from sklearn.linear_model import LogisticRegression
logistic = LogisticRegression()
logistic.fit(X_train_imputed, y_train)
print('검증세트 정확도', logistic.score(X_val_imputed, y_val))
- Logistic Regression를 이용한 multiple classMulti Class Classification
Logistic Regression in Multi-class ClassificationProblems (CS229)
One vs all classificationExamples Email foldering : work$(y=1)$, firends$(y=2)$, family$(y=3)$, hobby$(y=4)$, … Medical diagrams : not ill$(y=1)$, cold$(y=2)$, flu$(y=3)$, … Weather : Sunny$(y=1)$, Cl
www.shuhanyu.com
'Today I Learned' 카테고리의 다른 글
[TIL-210406] 역전파(Backpropagation) (0) | 2021.04.06 |
---|---|
[TIL-210205] Random Forest (0) | 2021.02.05 |
[TIL-210204] Decision Tree (0) | 2021.02.04 |
[TIL-210201] Ridge Regression (0) | 2021.02.01 |