이번 글에서는 사이킷런(Scikit_Learn)을 통해 학습 데이터를 준비하는 방법을 설명합니다.
1.Scikit-learn이란??
머신러닝에는 데이터가 많으면 많을수록 유리하고 더 정확한 결과를 도출해 내지만 데이터가 적더라도 머신러닝을 사용할 수 있는 방법이 있습니다. 바로 Cross-Validation인데 이를 파이썬 언어를 통해 활용하기 위해서 Scikit-learn을 먼저 알아보도록 하겠습니다.
사이킷런(Scikit-learn)은 파이썬(Python) 프로그래밍 언어용 오픈소스 기계학습 라이브러리입니다. 지원 벡터 머신, 랜덤 포레스트, 그레디언트 부스팅, K-means 및 DBSCAN을 포함한 다양한 분류, 회귀 및 클러스터링 알고리즘을 제공하며 파이썬 수치 및 과학 라이브러리 Numpy 및 Scipy와 상호 운용되도록 설계되었습니다. 이처럼 사이킷런은 라이브러리 외적으로 scikit 스택을 사용하고 있기 때문에 다른 라이브러리와의 호환성이 좋다는 것이 가장 큰 장점입니다. 라이브러리 내적으로는 통일된 인터페이스를 가지고 있기 때문에 매우 간단하게 여러 기법을 적용할 수 있어 쉽고 빠르게 최상의 결과를 얻을 수 있습니다.
사이킷런의 주요 모듈
- Example Data
- sklearn.datasets : 예제 데이터 세트 제공
- feature 처리
- sklearn.preprocessing : 데이터 전처리에 필요한 다양한 가공 기능 제공
- sklearn.feature_selection : 중요한 feature를 우선순위로 선택하기 위한 수행 기능 제공
- sklearn.feature_extraction : 데이터의 벡터화된 feature 추출 기능 제공
- feature 처리 & 차원 축소
- sklearn.decomposition : 차원 축소와 관련된 알고리즘 제공
- 데이터 분리, 검증 & 파라미터 튜닝
- sklearn.model_selection : 교차 검증을 위한 데이터 세트 분리(Train & Test), GridSearch)로 파라미터 추출 등 API 제공
- 평가 (Evaluation)
- sklearn.metrics : Classification, Regression, Clustering 등 성능 측정 방법 제공
- ML 알고리즘
- sklearn.ensemble : 앙상블 알고리즘 제공
- sklearn.linear_model : 선형 회귀 및 로지스틱 회귀 등 Regression 관련 알고리즘 지원
- sklearn.naive_bayes : 나이브 베이즈 알고리즘 제공
- sklearn.neighbors : 최근접 이웃 알고리즘 제공
- sklearn.svm : Support Vector Machine 알고리즘 제공
- sklearn.tree : 의사 결정 트리 알고리즘 제공
- sklearn.cluster : 비지도 클러스터링 (Unsupervised Clustering) 알고리즘 제공
- 유틸리티
- sklearn.pipeline : feature 처리 등의 변환과 ML 알고리즘 학습, 예측 등을 함께 묶어서 실행할 수 있는 유틸리티 제공
위의 모듈을 통해 필요한 데이터, 모델을 불러오고 **fit()**과 **predict()**함수로 모델을 학습시키고 결과를 예측합니다.
2.Machine Learning
머신러닝의 정의:
머신 러닝(영어: machine learning) 또는 기계 학습(機械 學習)은 인공 지능의 한 분야로, 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야를 말한다. 가령, 기계 학습을 통해서 수신한 이메일이 스팸인지 아닌지를 구분할 수 있도록 훈련할 수 있다.
1959년, 아서 사무엘은 기계 학습을 “컴퓨터에게 배울 수 있는 능력, 즉 코드로 정의하지 않은 동작을 실행하는 능력에 대한 연구 분야”라고 정의하였다.
위키피디아에 입력된 머신러닝의 정의입니다.
머신러닝은 대량의 데이터를 컴퓨터에게 수학적 모델을 통하여 입력시켜준 후에 비슷한 데이터가 입력이 되었을 경우에 매우 높은 정확성으로 예측 결과를 도출하는 알고리즘이나 프로그램을 작성하는 것을 뜻합니다.
최근 강력해진 컴퓨팅 파워와 다양한 기술발전 그리고 흘러넘치는 데이터를 통하여 예전부터 있었던 머신러닝 이론에 데이터마이닝, 빅데이터 , 영상인식, 음성 인식, 자연어처리를 적용시켜 현재 머신러닝은 가장 Hot한 Issue중 하나로 급부상 하였습니다.
이러한 머신러닝에서 가장 중요한 요소는 컴퓨팅 파워 , 알고리즘 , 높은 수학적 지식 또는 프로그래밍 스킬이 아닌 데이터를 다루는 일입니다.
하지만 현실세계의 Data는 너무 지저분하고 불필요한 요소들이 많아 아무리 최적의 모델을 사용하더라도 정확한 결과를 도출하는것이 쉽지 않습니다. 데이터에 너무 의존적인것이 머신러닝의 단점인데 데이터를 잘 가공해주지 않으면 Training시에 최적의 결과를 도출하지 않고 실제 Test 데이터 적용시 Overfit되기가 쉽습니다.
3.Data Set
이 머신러닝 프로그램을 만들기 위해 가장 중요한 것은 Data Set을 잘 만드는 것입니다.
여기서 Data Set이란 Machine Learning 모델을 만들기 위해 필요한 데이터의 모임 또는 머신 러닝을 통해 해석이 필요한 데이터들의 모임을 말합니다.
요즘에는 다양한 Data Set을 모아둔 사이트들이있는데 이를 잘 활용하면 됩니다.
Ex)
—> MINST , CIFAR-10 , ImageNet (Vision에서 가장 많이 쓰임)
—> Penn Tree Bank(PTB) , WikiText-2 / WikiText-103 , 1B Words (Language Model에 많이 사용)
일반적으로 머신러닝에 사용하는 데이터셋을 다음과 같이 정의합니다.
- 학습 데이터셋(Training set) : 알고리즘 학습에 입력하는 데이터 세트
- 개발 데이터셋(Dev1, development set): 파라미터 튜닝, 피처 선별 및 학습 알고리즘 관련 결정에 내리기 위해 사용하는 데이터 세트. 홀드-아웃 교차 검증 세트(Hold-out cross validation set)라고도 함.
- 테스트 데이터셋(Test set) : 알고리즘 성능 평가에 사용하는 데이터 세트. 학습 알고리즘이나 파라미터 관련 결정에는 사용하지 말아야 함
개발 데이터셋(dev/developement set)와 테스트 세트를 만들었다면, 개발팀은 여러 학습 알고리즘 파라미터와 같은 다양한 것을 시도해보고, 가장 적합한 것(상태)을 찾을 것입니다. 개발 데이터셋과 테스트 데이터셋을 이용하여 알고리즘이 얼마나 잘 작동하는지 빠르게 확인할 수 있습니다. 다시 말해서, 개발 데이터셋과 테스트 데이터셋의 목적은 머신러닝 시스템에 발생하는 가장 중요한 변경(설정 상태로)에 대하여 개발팀에게 방향을 제시하는 것입니다.
따라서 좋은 모델을 만들기 위해서는 다음과 같은 rule을 지켜주는 것이 좋습니다.
- 개발 데이터셋과 테스트 데이터셋은 앞으로 입력될 데이터의 특성을 잘 반영하는 데이터셋으로 만들어야 합니다.
- 우리가 지금 배우는 머신러닝의 목적은 바로 데이터 예측을 잘 할 수 있는 어떤 수학적 모델을 만드는 것입니다.
- 좋은 모델은 주어진 훈련 데이터 외에도 다른 데이터도 같이 예측을 잘 하는 모델을 말합니다.
여기서 중요한 것은 만약 Bias가 너무 높으면 훈련 데이터를 제대로 표현하지 못하게 되므로 Underfit이 된 것이다.와 Variance가 너무 높으면 훈련 데이터를 너무 지나치게 자세하게 표현하여 새로운 데이터를 오히려 제대로 예측하지 못하게 되는 Overfit현상이 발생한다.는 것입니다.
Overfit현상을 해결하는 방법에는 2가지가 있는데
- Feature수를 줄이는 방법
- 정규화(Regularization)
1번째 방법은 feature가 너무 많아서 생기는 문제이므로 feature을 줄여 해결하는 방법입니다.
2번째 방법은 feature을 그대로 사용하는 대신 parameter의 값과 크기를 줄여서 해결하는 방법입니다.
Reqularization
정규화에 대한 개념을 직관적으로 살펴보면,
아래 그림에서 왼쪽의 h 함수는 2차방정식으로 되어 있고, 오른쪽의 h 함수는 4차방정식으로 되어 있습니다. 과적합화가 된 모습이죠.
우리가 배운 Linear regression에서 Cost 함수를 그대로 사용한다고 생각하고 뒤에 세타three와 세타four를 1000으로 곱해서 추가한다고 생각해보겠습니다.
이 새롭게 추가된 Cost 함수는 minimize 세타를 찾기 때문에 세타three와 세타four의 값은 아주 작은 거의 0에 가까운 값이 될 것입니다. 결국 4차방정식의 h 함수가 뒤에 뒤에 두개 항이 0이 되므로 2차 방정식과 같아지게 됩니다. 이것이 정규화에 개념이 됩니다.
출처:https://daeson.tistory.com/184[대소니]
이제 사이킷런을 사용해 데이터가 적은 상황에서 학습을 시키는 방법인 Cross Validation을 알아보겠습니다.
검증 데이터 셋(Validation Data Set)
검증 데이터 셋(Validation Data Set)은 모델에 대해 Training data set으로 모델링을 할 때, 모델이 학습을 잘하고 있는지 중간에 확인을 하거나, 확인을 해서 하이퍼 파라미터(Hyper Parameter, 사용자가 임의로 값을 줄 수 있는 Parameter)를 조절할 수 있게 해주는 데이터 셋입니다. 이 Validation data set은 Training data Set에서 7:3 또는 8:2 비율로 나눠서 Validation Data Set을 만들어 줍니다.
Validation Set에서 Cross Validation이 나왔는데, 교차검증은 대체적으로, Training data set에 대한 크기가 작은 경우에 사용합니다. Training data set의 크기가 작다면, Test Set에 대한 모델의 성능 평가를 할 때 정확하지 않는 결과가 나올 수 있습니다. 그래서, 교차검증은 이러한 문제를 해결하기 위해 사용하곤 합니다.
그래서, 모든 data가 꼭 한 번은 validation set으로 이용되어 문제점을 해결합니다. 즉, 모델을 Training data로 모델링을 하는데,
이 Training data에서 여러 부분으로 나눠서 일정 부분을 Validation data로 이용한다는 말입니다. 이 여러 부분을 나누는 기준은 보통 5개나 10개로 나눠서 사용을 합니다. Cross Validation의 방법들로는 K-Fold , Stratified K-Fold , Leave One Out , Shuffle-split , Bootstrap등이 있습니다.
https://m.blog.naver.com/PostView.nhn?blogId=ssdyka&logNo=221298211287&proxyReferer=https%3A%2F%2Fwww.google.com%2F
[파이썬][머신러닝][모델평가] 교차 검증
< 모델 평가와 성능 향상 > 지금까지 지도학습과 비지도 학습이론을 다루면서 다양한 머신러닝 알고...
blog.naver.com
위의 블로그에서는 K-fold 와 Stratified K-fold의 장단점과 간단한 예시 코드를 볼 수 있습니다.
'Artificial Intelligence > Machine Learning' 카테고리의 다른 글
machine learning을 위한 확률과 통계 (0) | 2019.09.19 |
---|---|
머신러닝 프로젝트 진행 과정(Workflow) (1) | 2019.08.21 |