독립변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는데 사용되는 통계기법이다. 사건의 발생 가능성(=확률)을 예측 하기 때문에 0과 1사이로 output 값이 제한된다. 종속변수가 범주형 데이터를 대상으로 하며, 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나뉘기 때문에 일종의 분류(classification)기법이다.
Logistic Regression 과정
모든 피처들의 coefficients와 intercept 을 0으로 초기화
각 속성들의 값에 coefficients 를 곱해서 log-odds를 구함
Log-odds를 sigmoid 함수에 넣어서 [0, 1] 범위의 확률을 구함
계산한 확률값과 실제 label을 비교하여 Loss를 계산하고, gradient descent로 최적화된 coefficients와 intercept를 계산
최적화된 파라미터를 구했다면 classification threshold 값을 조절하여 positive class와 negative class를 어떻게 나눌지를 설정
Log-odds Odds: 사건이 발생할 확률/사건이 발생하지 않을 확률 Log-odds는 위에서 구한 odds값에 log를 취한 값 0<odds<∞ 범위에 속하기 때문에 범위에 제약이 존재 log를 취하게 되면 −∞<log(𝑜𝑑𝑑𝑠)<∞의 범위를 가지며, 대칭성 또한 가짐
Sigmoid function
로지스틱 함수라고 부르기도 하며, Log-odds인 z값을 취해서 0과 1사이의 값으로 반환한다. Binary classification에서 마지막 레이어의 활성화 함수로 주로 사용된다.
예측된 확률값이 threshold를 넘느냐 넘지 못하느냐로 classification 진행한다. 디폴트 값은 0.5로 설정하며, 특정 데이터의 예측된 확률 값이 0.5 보다 크거나 같다면 해당 데이터는 positive class로 분류한다.(0.5보다 낮으면 negative class로 분류함)
def predict_class(features, coefficients, intercept, threshold):
z = log_odds(features, coefficients, intercept)
a = sigmoid(z)
return np.where(a >= threshold, 1, 0)
위의 코드는 예시를 들기 위해서 함수로 구성했지만 실제로 로지스틱 회귀를 사용할때는 sklearn의 라이브러리를 이용하는 것이 일반적이다.