Machine Learning/Preprocessing 7

SMOTE 오버샘플링

Over Sampling 분류 문제 중 간혹 클래스의 데이터 양이 균등하지 않은 경우가 있다. 예를들어 신용카드 기록 중 정상 기록과 신용카드 사기 기록을 분류한다고 할 때 모든 데이터셋에서 정상 기록이 월등히 많을 수 밖에 없다. 이렇게 불균등한 데이터셋으로 학습을 진행할 경우 모델이 bias를 가지게 되거나 데이터가 적은 클래스의 다양한 유형을 학습하지 못하는 문제가 있다. 이를 해결하기 위한 방법이 오버샘플링(Over Sampling)이다. 오버샘플링은 적은 데이터를 가진 클래스의 데이터를 다른 클래스와 동일한 크기로 증식시키는 방법이다.  언더 샘플링(under sampling, 오버샘플링과는 반대로 많은 데이터를 가진 클래스의 데이터를 적은 데이터를 가진 클래스와 동일한 크기로 감소시키는 방법)..

하이퍼 파라미터 튜닝 기법 (Grid Search, 베이지안 최적화)

머신러닝 알고리즘의 성능을 가장 간단하게 올릴 수 있는 방법은 하이퍼 파라미터를 적절하게 튜닝하는 것이다. 이번 글에서는 대표적인 하이퍼 파라미터 튜닝 기법인 Grid Search와 베이지안 최적화에 대해 소개한다. Hyper Parameter 하이퍼 파라미터란 학습 모델의 '설정'과도 같다. 모델 선언시 각각의 모델이 가진 설정을 변경하지 않는다면 기본값으로 설정되고, 모델은 이 설정을 참고하여 학습을 진행한다. 대표적인 하이퍼 파라미터로는 학습률(Learning Rate), 반복 횟수(Epoch, 주로 딥러닝에서 사용) 등이 있다. 각각의 학습 모델은 특정 하이퍼 파라미터 값의 조합에서 가장 높은 성능을 발휘한다. 이 조합은 같은 종류의 모델이더라도 데이터셋의 크기나 종류에 따라 완전히 다른 조합이 ..

타이타닉 생존자 예측

이번 글에서는 Kaggle의 유명한 competition중 하나인 타이타닉 생존자 예측 문제에 대한 [파이썬 머신러닝 완벽가이드]의 코드를 리뷰한다(import문은 생략한다). 타이타닉 생존자 예측 문제의 데이터셋 설명은 Kaggle 홈페이지에서 확인할 수 있다. 여기서는 전체 코드를 리뷰하는 것이 아닌 중요 코드만 발췌하여 리뷰한다. 전처리 타이타닉 데이터셋의 변수 정보이다. label은 'Survived'이며, feature는 'Survived'를 제외한 나머지이다. 전처리가 필요한 부분은 다음과 같다.null값을 적절한 값으로 채우기학습에 필요하지 않은 feature 제거하기object자료형을 가지는 변수 인코딩하여 int로 바꾸기fillna()함수를 이용하면 null값을 원하는 값으로 메꿀 수 있..

피처 스케일링(feature scaling)

수치형 데이터의 경우 feature의 종류에 따라 각각 다른 분포를 가진다. 예를 들어 키의 경우 대부분 150~190의 값을 가지고, 몸무게의 경우 40~90 사이의 값을 가진다. 이렇게 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업을 피처 스케일링(feature scaling)이라고 한다. 이번 글에서는 피처 스케일링에 대해 소개한다. 피처 스케일링의 대표적인 방법으로는 표준화와 정규화가 있다. 표준화(Standardization) 표준화는 데이터의 feature 각각이 평균이 0이고 분산이 1인 가우시안 정규분포를 가진 값으로 변환하는 것이다. 이는 공식을 이용하여 간단하게 구할 수 있다. 서포트 벡터머신(Surport Vector Machine)이나 선형 회귀(Linear Regress..

데이터 인코딩 (Data Encoding)

데이터 전처리(preprocessing)란, 데이터를 학습에 사용할 수 있도록, 보다 학습 결과가 좋게 나타날 수 있도록 데이터를 처리하는 과정이다. 전처리에서 사용하는 기법은 여러가지가 있는데 이번 글에서는 그 중 하나인 데이터 인코딩에 대해서 소개한다. 레이블 인코딩(label encoding) 사이킷런의 머신러닝 알고리즘은 문자열을 입력값으로 허용하지 않는다. 따라서 모든 문자열은 인코딩 돼서 숫자 형으로 변환해야 한다. 예를 들어 성별을 나타내는 피쳐의 경우 'male', 'female'과 같이 문자열의 형태로 데이터가 저장되어 있을 수 있다. 이는 바로 input으로 사용할 수 없기 때문에 male ->0, female -> 1과 같이 int형태로 바꾼 후 input으로 이용해야 한다. 위에서와..

교차 검증 (Cross Validation)

모델을 학습 시켰다면, 검증 과정을 통해 모델이 과적합 혹은 과소적합에 빠지지 않도록 조정해야 한다. 이번 글에서는 K-Fold, Stratified K-Fold, cross_val_score(), GridSearchCV()에 대해 소개한다. K-Fold이전 장에서 소개한 train_test_split()은 한 가지 문제점을 가지고 있다. 고정된 train셋과 test셋을 이용하면 특정 test셋에 편향되게 학습될 수 있다. 이러한 현상을 과적합(overfitting)이라고 한다. 학습에 이용한 test셋을 이용하여 평가할 경우 매우 높은 성능을 보이지만 다른 test셋을 이용하면 성능이 현저히 떨어지는 것이다. K-Fold는 train셋과 test셋을 나누는 과정을 k번 진행하고 k번 학습한다. 그 후..

train_test_split(), fit(), predict()

사이킷런(scikit-learn): 파이썬 머신러닝 라이브러리 중 가장 많이 사용되는 라이브러리. 특히 데이터 분석에서 많이 사용된다. 머신러닝을 통한 예측 프로세스는 다음과 같다.데이터 세트 분리모델 학습예측 수행평가이번 글에서는 다음 프로세스를 진행하기 위해 사이킷런(sklearn)에서 사용되는 메서드들에 대해 리뷰한다. train_test_split() 메서드학습을 진행하기 위해서는 학습에 이용할 데이터와 검증에 이용할 데이터를 분리해 주어야 한다. 사이킷런에서는 train_test_split()을 이용하여 작업을 간편하게 할 수 있다.변수이름을 보면 X,y,train,test들로 구성되어 있다.  -X는 사용할 변수들을 일컫는다. 붓꽃 품종을 예측하기 위한 모델을 만든다고 하면, 예측에 사용될 변..