#6. Classification with logistic regression
Logistic regression
Binary classification : 2개의 class(0,1)만 output으로 나오는 것
- 기존 선형회귀로는 binary classification을 수행하기 어려움
- 이에 sigmoid(Logistic) 함수를 활용하여 1과 0 을 구분(threshold = .5 기준)
Logistic regression
- z = w*x + b 라고 가정
- z를 시그모이드 함수의 변수로 설정
- 해석 : 시그모이드 함수의 값이 0.7일 경우 → 1일 확률이 70%이다
- 표기법 (베이지안 언제 공부하지..)
Decision boundary
: 결과값을 0으로 판단할 지 1로 판단할 지 나누는 기준선 (z=0이 되는 경우의 선)
#7. Cost function for logistic regression
Cost function for logistic regression
- 선형회귀에서는 Squared error cost를 사용했음. 하지만 로지스틱 회귀에선 이를 동일하게 사용했다간 경사하강법 수행 시 너무 많은 global minima들을 만나서 성능이 나오지 않을 수 있음 → 로지스틱 회귀에서 Cost를 convex(포물선)형태로 만들어주는 다른 수식을 취해야 함
- 여기서 Cost function은 오차들의 평균이었는데, 우선 이 오차 함수(Loss)에 보다 집중해서 살펴보면,
실제값 y가 1일때의 오차는 -log(f(x))
- 예측값 f(x)가 1에 가까울수록 오차가 0에 가까워지고 예측값이 0에 가까워질수록 오차가 무한대에 가까워지는 것을 확인
(x axis : f(x), y axis : loss)
실제값 y가 0일때의 오차는 -log(1-f(x))
- 예측값이 0에 가까워질수록 오차 또한 0에 수렴하며 1에 가까워질수록 무한대로 발산함
그러므로 로지스틱 회귀에서는 Sqaured error function이 아니라 loss의 평균을 cost function으로 가져야 함
Simplified Cost Function for Logistic Regression
- y가 1일때 y가 0 일때의 수식을 없애고 y가 0일때 y가 1일때의 수식을 없게 해줌. 심지어 이거 그래프로 하면 convex됨. 왜그런지는...통계학적인 웅앵 이니까 여기선 일단 넘아가도 됨다!
- 이러한 loss의 평균이 cost function이므로 이를 평균취해주면 아래와 같음
#로지스틱회귀에서 Cost 계산하긔
def compute_cost_logistic(X, y, w, b):
"""
Computes cost
Args:
X (ndarray (m,n)): Data, m examples with n features
y (ndarray (m,)) : target values
w (ndarray (n,)) : model parameters
b (scalar) : model parameter
Returns:
cost (scalar): cost
"""
m = X.shape[0]
cost = 0.0
for i in range(m):
z_i = np.dot(X[i],w) + b
f_wb_i = sigmoid(z_i)
cost += -y[i]*np.log(f_wb_i) - (1-y[i])*np.log(1-f_wb_i)
cost = cost / m
return cost