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

    View Slide

  2. 16.1
    문제
    1
    장에서 다루었던 어떤 사용자들이 유료 계정을 이용하는가
    의 문제
    변수: 경력 소득 유료계정 등록 여부
    종속변수는 유료계정 유무이고 0 or 1
    의 값을 가지게 된다
    이 경우 가장 쉽게 활용 가능한 것이 선형회귀분석
    is_paid = b + (b ∗ year) + (b ∗ income) + e
    위 수식과 같이 모델링
    0 1 2
    밑바닥부터 시작하는 데이터과학 스터디 2

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  6. 16.3
    모델 적용하기
    결과:
    beta_hat = [-1.90, 4.05, -3.87]
    beta_hat_unscaled = [7.61, 1.42, -0.000249]
    위 결과에서 값의 의미를 해석하는 것은 어렵다
    최종 예측값을 결정하는데는 경력 뿐 아닌 다른 변수들의 영향도 있기 때문
    하지만 "경력이 많을 수록 유료 계정을 많이 할 가능성이 높고,
    월급이 높을수록
    유료계정을 많이 할 가능성이 높다"
    는 경향을 확인할 수 있다
    밑바닥부터 시작하는 데이터과학 스터디 6

    View Slide

  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

    View Slide

  8. 16.5 SVM
    dot(beta_hat, x_i)
    의 값이 0
    이 되는 부분이 두 클래스의 경계면
    전체 파라미터 공간을 나누는 경계면을 초평면이라고 부름
    분류를 잘 하는 것 =>
    잘 분류시키는 초평면을 찾는 것 => SVM
    은 그 중 하나
    SVM
    은 초평면에서 가장 가까운 점까지의 거리를 최대화 하는 방식으로 초평면
    을 찾는다.
    하지만 언제나 초평면이 존재하는 것은 아니다
    밑바닥부터 시작하는 데이터과학 스터디 8

    View Slide

  9. 16.5 SVM
    초평면을 찾기 힘들 때 =>
    차원을 한단계 높여보자
    (x) −> (x, x )
    보통 이런 경우에는 직접 차원을 높이는 것보다 커널함수를 이용해
    더 높은 차원에서의 내적을 계산하는 커널 트릭을 사용함
    2
    밑바닥부터 시작하는 데이터과학 스터디 9

    View Slide

  10. 16.6
    더 알아보기
    Scikit-learn
    로지스틱 회귀 분석
    SVM
    모델
    libsvm
    scikit-learn
    의 SVM
    모듈이 쓰는 구현체
    밑바닥부터 시작하는 데이터과학 스터디 10

    View Slide