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

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

Avatar for Beomi Beomi
February 26, 2017

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

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

Avatar for Beomi

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