머신러닝&딥러닝/Do it ! 딥러닝 입문 18

교차 검증

교차 검증(cross validation)은 전체 데이터 샘플 개수가 많지 않을 때 검증 세트를 훈련 세트에서 분리하느라 훈련 세트의 샘플 개수가 줄어들어 모델을 훈련시킬 데이터가 부족해지는 경우에 검증 세트를 분리하지 않기 위해 사용한다. 교차 검증의 원리 교차 검증은 훈련 세트를 작은 덩어리로 나누어 다음과 같이 진행하는데, 이때 훈련 세트를 나눈 작은 덩어리를 '폴드'라고 부른다. 위 그림을 보면 교차 검증을 쉽게 이해할 수 있다. 교차 검증은 전체 데이터 세트를 8:2로 나눈 다음 8에 해당하는 훈련 세트를 다시 5개의 작은 덩어리로 나눈다. 그런 다음 작은 덩어리를 1번씩 검증에 사용하고 나머지 덩어리를 훈련에 사용한다. 교차 검증 과정을 정리하면 다음과 같다. 1. 훈련 세트를 k개의 폴드(f..

규제 방법

과대적합을 해결하는 대표적인 방법 중 하나로 가중치 규제(regularization)이 있다. 가중치 규제란 말 그대로 가중치의 값이 커지지 않도록 제한하는 기법이다. 가중치를 규제하면 모델의 일반화 성능이 올라간다. 아래에 간단한 샘플 데이터와 모델 2개를 그래프로 나타내었다. 이 그래프로 가중치 규제를 설명하겠다. 두 그래프 중에 경사가 급한 그래프보다 경사가 낮은 그래프가 박스로 표시한 샘플 데이터를 더 잘표현하기 때문에 경사가 급한 그래프보다는 경사가 완만한 그래프가 성능이 좋다고 평가한다. 하지만 이렇게 샘플 데이터에 딱 맞는 그래프는 샘플 데이터 6개에 너무 집착한 나머지 박스로 표시한 샘플 데이터를 제대로 표현하지 못하고 있다. 모델이 몇 개의 데이터에 집착하면 새로운 데이터에 적응하지 못하..

과대적합과 과소적합

훈련 세트와 검증 세트는 모델의 과대적합(overfitting), 과소적합(underfitting)이라는 문제와 깊은 연관이 있다. 과대적합과 과소적합이란 과대적합이란 모델이 훈련 세트에서는 좋은 성능을 내지만 검증 세트에서는 낮은 성능을 내는 경우를 말한다. 구체적인 예로 분류 문제에서 훈련 세트의 정확도가 99%이고 검증 세트의 정확도가 80% 수준이라면 과대적합을 의심할 수 있다. 반면에 과소적합은 훈련 세트와 검증 세트의 성능에는 큰 차이가 없지만 모두 낮은 성능을 내는 경우이다. 위와 같은 그래프를 학습 곡선(learning curve)이라고 부른다. 첫 번째 학습 곡선은 과대적합의 전형적인 모습이다. 훈련 세트와 검증 세트에서 측정한 성능의 간격이 크다. 그래서 과대적합된 모델을 '분산이 크다..

검증 세트를 나누고 전처리 과정 배우기

이전에 위스콘신 유방암 데이터 세트를 두 덩어리로 나눈 '훈련 세트'와 '테스트 세트'를 준비했다. 훈련 세트는 fit() 메서드에 전달되어 모델을 훈련하는 데 사용하였고, 테스트 세트는 score() 메서드에 전달해 모델의 성능을 평가했다. 이번에는 '테스트 세트'의 사용 방법에 대해 조금 더 깊이 알아보겠다. 목표는 '어느 데이터 세트에만 치우친 모델을 만들지 않는 것'이다. 테스트 세트로 모델을 튜닝 이전에 했던 것처럼 cancer 데이터 세트를 읽어 들여 훈련 세트와 테스트 세트로 나눈다. 그런 다음 SGDClassifier 클래스를 이용하여 로지스틱 회귀 모델을 훈련해 보겠다. fit() 메서드에 x_train_all, y_train_all을 전달하여 모델을 훈련한다. 그리고 score() 메서..

사이킷런으로 로지스틱 회귀 수행하기

사이킷런의 경사 하강법이 구현된 클래스는 SGDClassifier이다. 이 클래스는 로지스틱 회귀 문제 외에도 여러 가지 문제에 경사 하강법을 적용할 수 있다. 사이킷런으로 경사 하강법 적용 SDGClassifier 클래스에 로지스틱 회귀를 적용하려면 loss 매개변수에 손실 함수로 log를 지정한다. max_iter 매개변수를 통해 반복 횟수를 100으로 지정하고 반복 실행했을 때 결과를 동일하게 재현하기 위해 random_state를 통해 난수 초깃값을 42로 설정한다. 반복할 때마다 로지스틱 손실 함수의 값이 tol에 지정한 값만큼 감소되지 않으면 반복을 중단하도록 설정한다. 만약 tol의 값을 설정하지 않으면 max_iter의 값을 늘리라는 경고가 발생하는데 이는 모델의 로지스틱 손실 함수의 값이..

로지스틱 회귀 뉴런으로 단일층 신경망 만들기

사실 이전 글에서 이미 단일층 신경망을 구현했다. 로지스틱 회귀는 단일층 신경망(single layer neural network)과 동일하기 때문이다. 하지만 지금까지는 층(layer)이라는 개념을 전혀 사용하지 않았는데 이 글에서는 신경망과 관련된 개념을 정리한다. 일반적인 신경망의 모습 일반적으로 신경망은 다음과 같이 표현한다. 여기서 가장 왼쪽이 입력층(input layer), 가장 오른쪽이 출력층(output layer) 그리고 가운데 층들을 은닉층(hidden layer)이라고 부른다. 오른쪽에 작은 원으로 표시된 활성화 함수는 은닉층과 출력층의 한 부분으로 간주한다. 이전 글에서 설명한 로지스틱 회귀는 은닉층이 없는 신경망이라고 볼 수 있다. 이런 입력층과 출력층만 가지는 신경망을 단일층 신..

로지스틱 회귀를 위한 뉴런 만들기

훈련된 모델이 실전에서 얼마나 좋은 성능을 내는지 어떻게 알 수 있을까. 우리가 만든 모델의 성능을 평가하지 않고 실전에 투입하면 잘못된 결과를 초래할 수도 있으니 위험하다. 또 훈련 데이터 세트로 학습된 모델을 다시 훈련 데이터 세트로 평가하면 어떨까. 만약 모델이 훈련 데이터 세트를 몽땅 외워버렸다면 평가를 해도 의미가 없을 것이다. 모델을 만들기 전에 성능 평가에 대해 잠시 알아보겠다. 훈련 세트와 테스트 세트 훈련된 모델의 실전 성능을 일반화 성능(generalization performance)이라고 부른다. 그런데 앞에서 말한 것처럼 모델을 학습시킨 훈련 데이터 세트로 다시 모델의 성능을 평가하면 그 모델은 당연히 좋은 성능이 나올 것이다. 이런 성능 평가를 '과도하게 낙관적으로 일반화 성능을..

분류용 데이터 세트 준비

분류 문제를 위하여 데이터 세트를 준비해 보겠다. 데이터 세트는 사이킷런에 포함된 '위스콘신 유방암 데이터 세트(Wisconsin breast cancer dataset)'를 사용한다. 유방암 데이터 세트 유방암 데이터 세트에는 유방암 세포의 특징 10개에 대하여 평균, 표준 오차, 최대 이상치가 기록되어 있다. 여기서 해결할 문제는 유방암 데이터 샘플이 악성 종양(True)인지 혹은 정상 종양(False)인지를 구분하는 이진 분류 문제이다. 의학 분야에서는 건강한 종양을 양성 종양이라고 부르고 건강하지 않은 종양을 악성 종양이라고 부른다는 것을 주의해야 한다. 지금은 해결 과제가 악성 종양이므로 양성 샘플이 악성 종양인 셈이다. 정리하면 아래와 같다. 앞에서 부터 의학, 이진 분류이다. - 좋음 : 양..

로지스틱 손실 함수를 경사 하강법에 적용

선형 회귀의 목표는 정답과 예상값의 오차 제곱이 최소가 되는 가중치와 절편을 찾는 것이다. 그렇다면 로지스틱 회귀와 같은 분류의 목표는 무엇일까. 바로 올바르게 분류된 샘플 데이터의 비율 자체를 높이는 것이 분류의 목표이다. 예를 들면 사과, 배, 감을 분류하는 문제에서 사과, 배, 감으로 분류한 과일 중 진짜 사과, 배, 감으로 분류한 비율을 높이는 것이 분류의 목표이다. 하지만 올바르게 분류된 샘플의 비율은 미분 가능한 함수가 아니기 때문에 경사 하강법의 손실 함수로 사용할 수 없다. 대신 비슷한 목표를 달성할 수 있는 다른 함수를 사용해야 되는데 그 함수가 로지스틱 손실 함수이다. 로지스틱 손실 함수 로지스틱 손실 함수는 다중 분류를 위한 손실 함수인 크로스 엔트로피(cross entropy) 손실..

시그모이드 함수로 확률 만들기

이전 글에서 로지스틱 회귀는 정방향 계산으로 구한 z를 활성화 함수를 통과시켜 a를 구하고 그 a를 임계 함수에 넣어 y_hat을 구한다고 설명했다. 로지스틱 회귀에서 사용하는 활성화 함수인 시그모이드 함수는 z를 0~1사이의 확률값으로 변환시켜주는 역할을 한다. 즉, 시그모이드 함수를 통과한 값 a를 암 종양 판정에 사용하면 '양성 샘플일 확률(악성 종양일 확률)'로 해석할 수 있다. 확률은 해석하기 나름이지만 보통 a가 0.5(50%)보다 크면 양성 클래스, 그 이하면 음성 클래스라고 구분한다. 시그모이드 함수가 만들어지는 과정 시그모이드 함수가 만들어지는 과정은 다음과 같다. "오즈 비 -> 로짓 함수 -> 시그모이드 함수" 오즈 비 시그모이드 함수는 오즈 비(odds ratio)라는 통계를 기반으..