Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

Deep Learning 40

[모델 튜닝] 머신러닝/딥러닝 Validation Set 만드는 이유와 방법

이번 포스팅에서는 머신러닝 모델을 구현할 때 Validation Set을 만드는 이유와 방법을 다룬다. | Validation Set이란? Validation Set을 직역하면 '검증데이터 집합'이다. 글자 그대로 '머신러닝 모델을 검증하기 위한 데이터셋' 즉, 성능 평가를 위한 데이터 셋이라고 보면 된다. 보통 위 그림과 같이 전체 데이터 셋의 20% 정도 떼어서 만든다. 그냥 Test Set으로 성능 평가하면 되는 거 아니야? Nope! 이는 하나의 머신러닝 모델을 구축하는 프로세스를 이해하면 쉽게 이해가 될 것이다. 모델검증과 모델평가는 분리해서 생각해야한다. 모델 검증은 모델의 성능을 평가하고, 그 결과를 토대로 모델을 튜닝하는 작업을 진행한다. 반면 모델 평가는 최종적으로 '이 모델이 실전에서 ..

[데이터 전처리] 스케일 조정

이번 포스팅에서는 AI 모델을 구현할 때, 데이터 전처리 단계에서 스케일 조정을 해야하는 이유와 방법에 대해서 다룬다. 데이터 전처리가 필요한 이유? 사이킷런과 같은 머신러닝 패키지에 준비되어있는 데이터는 대부분 실습을 위한 것이므로 잘 가공되어 있다. 하지만 실전에서 수집된 데이터는 그렇지 않다. 누락된 값이 있을 수도 있고 데이터의 형태가 균일하지 않을 수도 있다. 이런 데이터들을 그대로 사용하면 제대로 결과를 얻을 수 없다. 이런 경우 데이터를 적절히 가공하는 데이터 전처리(Data preprocessing) 과정이 필요하다. 그런데, 잘 정리된 데이터에 대해서도 전처리를 해야하는 경우가 생기는데, 바로 특성의 스케일이 다른 경우이다. 스케일이란 어떤 특성이 가지고 있는 값의 범위를 말한다. 예를 ..

[모델 구축] 이진분류 로지스틱 회귀모델 구현하기 - 심화

이번 포스팅에서는 이전 포스팅에서 만들었던 로지스틱 회귀 모델을 좀 더 다듬어본다. STEP1. 손실함수 결괏값 추적하기 저번 포스팅에서 로지스틱 회귀모델이 경사하강법을 통해 최적의 가중치를 찾도록 구현했다. 그런데 경사하강법은 손실함수의 결괏값을 최소화하는 방향으로 가중치를 업데이트 하기 때문에 손실함수 결괏값의 추이를 보면 가중치가 잘 업데이트 되었는지, 즉 모델의 학습과정이 타당했는지 판단할 수 있다. 위 그림과 같이 우하향하는 그래프라면 손실함수의 결괏값이 감소하고 있다는 뜻이기 때문에 모델이 올바른 방향으로 학습을 진행하고 있다고 볼 수 있다. 반면에 손실함수의 결괏값이 감소하지 않는다면 모델의 학습과정에 문제가 있는 것이다. (1) 초기화 함수 추가 # (1) 초기화 함수 추가 def __in..

[모델 구축] 이진분류 로지스틱 회귀모델 구현하기 - 기본

이번 포스팅에서는 python을 사용하여 로지스틱 회귀모델을 구현해본다. 로지스틱 회귀모델 구조 훈련단계 예측단계 기능 최적의 가중치와 절편을 찾음. 예측값 계산, 향후 성능평가에 사용. 사용 데이터세트 훈련세트 테스트세트 머신러닝 모델 구현로직은 크게 훈련단계와 예측단계로 나눌 수 있다. 훈련단계는 최적의 가중치와 절편을 찾는 로직인데, 입력데이터로 훈련세트를 사용한다. 예측단계는 훈련단계에서 찾은 가중치와 절편을 사용하여 예측을 실행하는 단계이다. 이때 출력된 예측값은 모델의 성능을 평가하는데 사용한다. 입력데이터로는 테스트세트를 사용한다. 로지스틱 회귀모델의 구조를 살펴보고, 각 단계에서 어떤 함수들이 필요한지 정리해보자. 로지스틱 회귀모델은 선형함수, 활성화함수, 임계함수로 이루어져 있다. 선형함..

[모델 평가] 훈련데이터셋 나누기 (feat.train_test_split())

이번 포스팅에서는 머신러닝/딥러닝 모델의 성능평가를 위해 훈련데이터셋을 나누는 이유와 방법에 대해 알아본다. WHY ? 인공지능 모델을 구축하면 실제 상황에 적용하기 전에 성능평가를 진행해야한다. 이때 훈련데이터 세트로 학습된 모델을 다시 훈련 데이터세트로 평가하면 높은 성능이 나올 것이다(과도하게 낙관적으로 일반화 성능이 추정되었다). 그 모델에는 이미 훈련데이터 셋에 맞는 규칙이 반영되었기 때문이다. 이런 문제를 해결하기 위해 훈련 데이터셋을 훈련용 데이터와 성능평가용 데이터로 나눈 후 성능평가 단계에서는 모델 학습에 이용하지 않은 성능평가용 데이터를 사용한다. 이때 훈련용 데이터를 훈련세트(training set), 성능평가용 데이터를 테스트세트(test set)이라고 한다. CONDITIONS! ..

[데이터 탐색] 데이터 탐색에 유용한 함수 2탄 - boxplot(), unique()

이번 포스팅에서는 데이터 탐색에 쓰이는 함수 2가지를 알아본다. 샘플 데이터 로드 from sklearn.datasets import load_breast_cancer cancer = load_breast_cancer() cancer 사이킷 런에서 제공하는 위스콘신 유방암 데이터 세트를 사용했다. 유방암 데이터 세트에는 유방암 세포의 특징 10개에 대해 평균, 표준오차, 최대 이상치가 기록되어 있다. 또한 각 세포가 악성종양(1)인지 정상종양(0)인지에 대한 정보가 target 데이터에 담겨있다. boxplot() # 박스플롯 그리기 import matplotlib.pyplot as plt plt.boxplot(cancer.data) plt.xlabel('feature') plt.ylabel('value..

[모델 구축] 로지스틱 손실함수와 오류 역전파 이해하기

이번 포스팅에서는 로지스틱 회귀 모델의 손실함수인 로지스틱 손실함수에 대해서 알아보고, 가중치를 업데이트하는 식을 작성한다. 로지스틱 손실함수 로지스틱 회귀모델의 손실함수는 로지스틱 손실함수이다. 로지스틱 손실함수는 크로스엔트로피 손실함수에서 변형한 것이다. 크로스엔트로피 손실함수는 다중분류 모델을 위한 손실함수인데, 로지스틱 회귀모델이 이진분류를 위한 모델이니 다중분류 모델의 손실함수에서 파생되었다는 것이 납득이 간다. 이진분류는 크게 보면 다중분류에 속하는 개념이고, 실무에서는 같은 개념으로 보기도 하기 때문이다. 로지스틱 손실함수가 손실함수로서 자격이 있을까? 로지스틱 손실함수는 결과가 양성 클래스일 때와 음성클래스일 때로 식을 분리해서 생각할 수 있다. 양성클래스 즉, y =1 일 때는 L = -..

[모델 선정] 이진분류 알고리즘 3가지 (퍼셉트론, 아달린, 로지스틱 회귀)

이번 포스팅에서는 이진분류 알고리즘 3가지를 알아본다. 먼저 이진분류의 개념에 대해서 짚고 넘어가자. 이진분류란 임의의 샘플 데이터를 True나 False로 구분하는 문제를 말한다. 예를 들어 특정 종양 샘플이 주어졌을 때 이 종양이 양성(True)인지 음성(False)인지 판단하는 것이 있다. 이진분류 알고리즘은 퍼셉트론 → 아달린 → 로지스틱 회귀 순으로 발전했다. 이번 포스팅에서 하나씩 살펴본다. | 1. 퍼셉트론(Perceptron) 퍼셉트론은 1957년 코넬 항공 연구소의 프랑크 로젠블라트가 발표한 알고리즘으로, 이진분류 문제에서 최적의 가중치를 학습하는 알고리즘이다. 퍼셉트론의 구조를 도식화하면 아래와 같다. 퍼셉트론 이전 포스팅에서 다뤘던 선형회귀 알고리즘과 유사하다. 선형회귀 알고리즘이 선..

[모델 구축] 선형회귀 알고리즘 구현하기 (전체 소스코드 첨부)

이번 포스팅에서는 선형회귀 알고리즘을 구현한다. 선형회귀 알고리즘의 틀을 아래와 같이 정리했다. 1. 가중치 초기화 for ( 에포크 반복 ) : for ( 샘플 반복 ) : 2. 예측값 구하기 3. 가중치 업데이트 하나하나씩 살펴보고 구현해보자. | 훈련 데이터 세팅 본격적으로 알고리즘을 구현하기 전에, 훈련데이터부터 세팅해보자. 사이킷런에서 제공하는 당뇨병 데이터를 로드해서 사용한다. 다만 특성을 2개 이상 사용하면 3차원 이상의 그래프를 그려야하기 때문에 x의 특성 중 하나만 선택했다. from sklearn.datasets import load_diabetes diabetes = load_diabetes() x = diabetes.data[:,2] y = diabetes.target | STEP ..

[데이터 탐색] 데이터 탐색을 위한 파이썬 명령어 3가지

이번 포스팅에서는 기본적인 데이터탐색에 사용할 수 있는 파이썬 명령어 3가지를 다룬다. 우선, 예시에서 사용할 데이터를 세팅해보자. 사이킷런에서 제공하는 당뇨병 환자의 데이터 세트를 로드해서 사용하겠다. 로드한 데이터 셋은 diabetes라는 변수에 저장했다. from sklearn.datasets import load_diabetes diabetes = load_diabetes() | 1. numpy 배열의 shape 속성 머신러닝에서는 데이터를 넘파이 배열로 저장하는 경우가 많다. 넘파이 배열의 shape 속성은 배열의 크기 정보를 담고있다. 배열의 크기정보를 통해서 우리는 데이터 세트에서 샘플의 개수와 특성의 수를 파악할 수 있다. 샘플이란 데이터 1 세트를 의미하고, 특성이란 한 샘플의 여러 특징..