의 문제 변수: 경력 소득 유료계정 등록 여부 종속변수는 유료계정 유무이고 0 or 1 의 값을 가지게 된다 이 경우 가장 쉽게 활용 가능한 것이 선형회귀분석 is_paid = b + (b ∗ year) + (b ∗ income) + e 위 수식과 같이 모델링 0 1 2 밑바닥부터 시작하는 데이터과학 스터디 2
있기 때문에 로지스틱 함수(Logistic Function) 을 사용함 로지스틱 함수는 입력값이 커질수록 1 에 가까워지고 작을수록 0 에 가까워짐 y = f(x b) + e ( 단, f 는 로지스틱 함수) 이전 선형회귀분석에서는 오차의 제곱합의 최소가 데이터의 likelihood 을 최대화, 하지만 로지스틱 회귀 분석에서는 두 상태가 동치가 아니다 따라서 경사 하강법을 이용해 likelihood 를 직접 최대화 해 주어야 함 i i 밑바닥부터 시작하는 데이터과학 스터디 3
∗ (1 − f(x b)) y 가 0 일 때는 1 − f(x b) 이며, y 가 1 일 때는 f(x b) 가 된다. 이 때 log likelihood 를 최소화 하려면 logL(b∣x , y ) = y logf(x b) + (1 − y )log(1 − f(x b)) 위 식에서 log는 단조증가 함수 => log likelihood 를 최대화하는 b 이때 데이터 전체에 대한 log likelihood 는 개별 데이터의 log likelihood 의 단순 합 i i i yi i 1−yi i i i i i i i i i i 밑바닥부터 시작하는 데이터과학 스터디 4
적용하기 랜덤으로 2/3 을 학습 데이터, 1/3 을 테스트 데이터 random.seed(0) x_train, x_test, y_train, y_test = train_test_split(rescaled_x, y, 0.33) # want to maximize log likelihood on the training data fn = partial(logistic_log_likelihood, x_train, y_train) gradient_fn = partial(logistic_log_gradient, x_train, y_train) # pick a random starting point beta_0 = [random.random() for _ in range(3)] # and maximize using gradient descent beta_hat = maximize_batch(fn, gradient_fn, beta_0) 밑바닥부터 시작하는 데이터과학 스터디 5
= [7.61, 1.42, -0.000249] 위 결과에서 값의 의미를 해석하는 것은 어렵다 최종 예측값을 결정하는데는 경력 뿐 아닌 다른 변수들의 영향도 있기 때문 하지만 "경력이 많을 수록 유료 계정을 많이 할 가능성이 높고, 월급이 높을수록 유료계정을 많이 할 가능성이 높다" 는 경향을 확인할 수 있다 밑바닥부터 시작하는 데이터과학 스터디 6
두 클래스의 경계면 전체 파라미터 공간을 나누는 경계면을 초평면이라고 부름 분류를 잘 하는 것 => 잘 분류시키는 초평면을 찾는 것 => SVM 은 그 중 하나 SVM 은 초평면에서 가장 가까운 점까지의 거리를 최대화 하는 방식으로 초평면 을 찾는다. 하지만 언제나 초평면이 존재하는 것은 아니다 밑바닥부터 시작하는 데이터과학 스터디 8