Upgrade to Pro — share decks privately, control downloads, hide ads and more …

로지스틱 회귀 분석 | 밑바닥부터 시작하는 데이터 과학 16장

Beomi
February 26, 2017

로지스틱 회귀 분석 | 밑바닥부터 시작하는 데이터 과학 16장

로지스틱 회귀 분석 | 밑바닥부터 시작하는 데이터 과학 16장
데이터 과학 스터디 2017년 02월 26일 발표 자료

Beomi

February 26, 2017
Tweet

More Decks by Beomi

Other Decks in Programming

Transcript

  1. 16 장: 로지스틱 회귀 분석 밑바닥부터 시작하는 데이터 과학 스터디

    2017. 02. 26. 이준범 ([email protected]) 밑바닥부터 시작하는 데이터과학 스터디 1
  2. 16.1 문제 1 장에서 다루었던 어떤 사용자들이 유료 계정을 이용하는가

    의 문제 변수: 경력 소득 유료계정 등록 여부 종속변수는 유료계정 유무이고 0 or 1 의 값을 가지게 된다 이 경우 가장 쉽게 활용 가능한 것이 선형회귀분석 is_paid = b + (b ∗ year) + (b ∗ income) + e 위 수식과 같이 모델링 0 1 2 밑바닥부터 시작하는 데이터과학 스터디 2
  3. 16.2 로지스틱 함수 BUT 선형회귀분석은 결과가 큰 양수/ 음수일 수

    있기 때문에 로지스틱 함수(Logistic Function) 을 사용함 로지스틱 함수는 입력값이 커질수록 1 에 가까워지고 작을수록 0 에 가까워짐 y = f(x b) + e ( 단, f 는 로지스틱 함수) 이전 선형회귀분석에서는 오차의 제곱합의 최소가 데이터의 likelihood 을 최대화, 하지만 로지스틱 회귀 분석에서는 두 상태가 동치가 아니다 따라서 경사 하강법을 이용해 likelihood 를 직접 최대화 해 주어야 함 i i 밑바닥부터 시작하는 데이터과학 스터디 3
  4. 16.2 로지스틱 함수 p(y ∣x , b) = f(x b)

    ∗ (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
  5. 16.3 모델 적용하기 데이터를 학습데이터와 테스트데이터로 분할 후 경사 하강법을

    적용하기 랜덤으로 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
  6. 16.3 모델 적용하기 결과: beta_hat = [-1.90, 4.05, -3.87] beta_hat_unscaled

    = [7.61, 1.42, -0.000249] 위 결과에서 값의 의미를 해석하는 것은 어렵다 최종 예측값을 결정하는데는 경력 뿐 아닌 다른 변수들의 영향도 있기 때문 하지만 "경력이 많을 수록 유료 계정을 많이 할 가능성이 높고, 월급이 높을수록 유료계정을 많이 할 가능성이 높다" 는 경향을 확인할 수 있다 밑바닥부터 시작하는 데이터과학 스터디 6
  7. 16.4 적합성 (Goodness of Fit) 에측된 값이 0.5 가 넘을

    때 유료 계정으로 등록한다고 가정 이 때 정밀도는 93%, 재현율은 82% true_positives = false_positives = true_negatives = false_negatives = 0 for x_i, y_i predict = logistic(dot(beta_hat, x_i)) if y_i == 1 and predict >= 0.5: # TP: 예측, 실제 모두 결제 += 1 elif y_i == 1: false_negatives += 1 elif predict >= 0.5: false_positives += 1 else: true_negatives += 1 # FN: 결제한 유저( 하지만 예측은 안결제) # FP: 비결제 유저( 하지만 예측은 결제) # TN: 비결제 유저( 둘다) 밑바닥부터 시작하는 데이터과학 스터디 7
  8. 16.5 SVM dot(beta_hat, x_i) 의 값이 0 이 되는 부분이

    두 클래스의 경계면 전체 파라미터 공간을 나누는 경계면을 초평면이라고 부름 분류를 잘 하는 것 => 잘 분류시키는 초평면을 찾는 것 => SVM 은 그 중 하나 SVM 은 초평면에서 가장 가까운 점까지의 거리를 최대화 하는 방식으로 초평면 을 찾는다. 하지만 언제나 초평면이 존재하는 것은 아니다 밑바닥부터 시작하는 데이터과학 스터디 8
  9. 16.5 SVM 초평면을 찾기 힘들 때 => 차원을 한단계 높여보자

    (x) −> (x, x ) 보통 이런 경우에는 직접 차원을 높이는 것보다 커널함수를 이용해 더 높은 차원에서의 내적을 계산하는 커널 트릭을 사용함 2 밑바닥부터 시작하는 데이터과학 스터디 9
  10. 16.6 더 알아보기 Scikit-learn 로지스틱 회귀 분석 SVM 모델 libsvm

    scikit-learn 의 SVM 모듈이 쓰는 구현체 밑바닥부터 시작하는 데이터과학 스터디 10