머신러닝(Machine Learning)
- 명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야
- 머신러닝은 데이터를 통해 다양한 패턴을 감지하고, 스스로 학습할 수 있는 모델 개발에 초점
지도학습(Supervised Learning)
- 지도 학습은 주어진 입력으로 부터 출력 값을 예측하고자 할 때 사용
- 입력과 정답 데이터를 사용해 모델을 학습 시킨 후 새로운 입력 데이터에 대해 정확한 출력을 예측하도록 하는 것이 목표
- 지도 학습 알고리즘의 학습 데이터를 만드는 것은 많은 사람들의 노력과 자원이 필요하지만 높은 성능을 기대할 수 있음
분류와 회귀
- 지도 학습 알고리즘은 크게 분류(classification)와 회귀(regression)로 구분
- 분류는 입력 데이터를 미리 정의된 여러개의 ㅋㄹ래스 중 하나로 예측하는 것
- 분류는 클래스의 개수가 2개인 이진분류(binary classification)와 3개 이상의 다중분류(multi-class classification)로 나눌 수 있음
- 회귀는 연속적인 숫자를 예측하는 것으로 어떤 사람의 나이, 농작물의 수확량, 주식 가격 등 출력 값이 연속성을 갖는 다면 회귀 문제라고 할 수 있음
지도 학습 알고리즘
- 선형 회귀(Linear Regression)
- 로지스틱 회귀(Logistic Regression)
- 서포트 벡터 머신(Support Vector Machine)
- k-최근접 이웃(k-Nearest Neighbors)
- 결정 트리(Decision Tree)
- 앙상블(Ensemble)
- 신경망(Neural Networks)
비지도 학습(Unsupervised Learning)
- 비지도 학습은 원하는 출력 없이 입력 데이터 사용
- 입력 데이터의 구조나 패턴을 찾는 것이 목표
- 미리 정해진 결과가 없고, 방대한 양의 데이터에서 유용한 통찰력을 얻을 수 있음
클러스터링, 차원축소, 연관규칙
- 비지도 학습 알고리즘은 크게 클러스터링(Clustering), 차원 축소(Dimensionality Reduction), 연관 규칙(Association Rules)으로 구분
- 클러스터링은 공간상에서 서로 가깝고 유사한 데이터를 클러스터로 그룹화
- 차원 축소는 고차원의 데이터에 대해서 너무 많은 정보를 잃지 않으면서 데이터를 축소시키는 방법
- 연관 규칙은 데이터에서 특성 간의 연관성이 있는 흥미로운 규칙을 찾는 방법
비지도 학습 알고리즘
- 클러스터링(Clustering)
- k-Means
- DBSCAN
- 계층 군집 분석(Hierarchical Cluster Analysis)
- 이상치 탐지(Outlier Detection), 특이값 탐지(Novelty, Detection)
- 차원축소(Dimensionality Reduction)
- 주성분 분석(Principal Component Analysis)
- 커널 PCA(Kernel PCA)
- t-SNE(t-Distributed Stochastic Neighbor Embedding)
- 연관 규칙(Association Rule Learning)
- Apriori
- Eclat
준지도 학습(Semi-supervised Learning)
- 레이블이 있는 것과 없는 것이 혼합된 경우 사용
- 일반적으로는 일부 데이터에만 레이블이 있음
- 준지도 학습 알고리즘은 대부분 지도 학습 알고리즘과 비지도 학습 알고리즘의 조합으로 구성
강화학습(Reinforcement Learning)
- 동적 환경과 함께 상호 작용하는 피드백 기반 학습 방법
- 에이전트(Agent)가 환경을 관찰하고, 행동을 실행하고, 보상(reward) 또는 별점(penality)를 받음
- 에이전트는 이러한 피드백을 통해 자동으로 학습하고 성능을 향상시킴
- 어떤 지도가 없이 일정한 목표를 수행
온라인 vs 배치
- 온라인 학습(Online Learning)
- 적은 데이터를 사용해 미니배치(mini-batch) 단위로 점진적으로 학습
- 실시간 시스템이나 메모리 부족의 경우 사용
- 배치 학습(Batch Learning)
- 전체 데이터를 모두 사용해 오프라인에서 학습
- 컴퓨팅 자원이 풍부한 경우 사용
사례 기반 vs 모델 기반
- 사례 기반 학습(Instance-based Learning)
- 훈련 데이터를 학습을 통해 기억
- 예측을 위해 데이터 사이의 유사도 측정
- 새로운 데이터와 학습된 데이터를 비교
- 모델 기반 학습(Model-based Learning)
- 훈련 데이터를 사용해 모델을 훈련
- 훈련된 모델을 사용해 새로운 데이터를 예측
일반화, 과대적합, 과소적합
일반화(generalization)
- 일반적으로 지도 학습 모델은 학습 데이터로 훈련 시킨 뒤 평가 데이터에서도 정확하게 예측하기를 기대함
- 훈련된 모델이 처음보는 데이터에 대해 정확하게 예측한다면, 이러한 상태를 모델이 일반화 되었다고 함
- 모델이 항상 일반화 되는 것은 아님
과대적합
- 주어진 훈련 데이터에 비해 복잡한 모델을 사용한다면, 모델은 훈련 데이터에서만 정확한 성능을 보이고, 평가 데이터에서는 낮은 성능을 보임
- 즉, 모델이 주어진 훈련 데이터는 잘 예측하지만 일반적인 특징을 학습하지 못해 평가 데이터에서는 낮은 성능을 보이는 상태를 과대적합(Overfitting)이라 함
과소적합
- 과대적합과 반대로 주어진 훈련 데이터에 비해 너무 간단한 모델을 사용하면, 모델이 데이터에 존재하는 다양한 정보들을 제대로 학습하지 못함
- 이러한 경우 모델은 훈련 데이터에서도 나쁜 성능을 보이고 평가 데이터에서도 낮은 성능을 보이는 과소적합되었다고 함
모델 복잡도와 데이터셋 크기의 관계
- 데이터의 다양성이 클수록 더 복잡한 모델을 사용하면 좋은 성능을 얻을 수 있음
- 일반적으로 더 큰 데이터셋(데이터 수, 특징 수)일수록 다양성이 높기 때문에 더 복잡한 모델을 사용할 수 있음
- 하지만, 같은 데이터를 중복하거나 비슷한 데이터를 모으는 것은 다양성 증가에 도움이 되지 않음
- 데이터를 더 많이 수집하고 적절한 모델을 만들어 사용하면 지도 학습을 사용해 놀라운 결과를 얻을 수 있음
훈련 세트 vs 테스트 세트 vs 검증 세트
- 머신러닝 모델의 일반화 성능을 측정하기 위해 훈련세트 , 테스트 세트로 구분
- 훈련 세트로 모델을 학습하고 테스트 세트로 모델의 일반화 성능 측정
- 하이퍼파라미터는 알고리즘을 조절하기 위해 사전에 정의하는 파라미터
- 테스트 세트를 이용해 여러 모델을 평가하면 테스트 세트에 과대적합됨
- 모델 선택을 위해 훈련세트, 테스트 세트, 검증 세트로 구분
scikit-learn 특징
- 다양한 머신러닝 알고리즘을 구현한 파이썬 라이브러리
- 심플하고 일관성 있는 API, 유용한 온라인 문서, 풍부한 예제
- 머신러닝을 위한 쉽고 효율적인 개발 라이브러리 제공
- 다양한 머신러닝 관련 알고리즘과 개발을 위한 프레임워크와 API 제공
- 많은 사람들이 사용하며 다양한 환경에서 검증된 라이브러리
scikit-learn 주요 모듈
sklearn.datasets | 내장된 예제 데이터 세트 |
sklearn.preprocessing | 다양한 데이터 전처리 기능 제공 (변환, 정규화, 스케일링 등) |
sklearn.feature_selection | 특징(feature)를 선택할 수 있는 기능 제공 |
sklearn.feature_extraction | 특징(feature) 추출에 사용 |
sklearn.decomposition | 차원 축소 관련 알고리즘 지원 (PCA, NMF, Truncated SVD 등) |
sklearn.model_selection | 교차 검증을 위해 데이터를 학습/테스트용으로 분리, 최적 파라미터를 추출하는 API 제공 (GridSearch 등) |
sklearn.metrics | 분류, 회귀, 클러스터링, Pairwise에 대한 다양한 성능 측정 방법 제공 (Accuracy, Precision, Recall, ROC-AUC, RMSE 등) |
sklearn.pipeline | 특징 처리 등의 변환과 ML 알고리즘 학습, 예측 등을 묶어서 실행할 수 있는 유틸리티 제공 |
sklearn.linear_model | 선형 회귀, 릿지(Ridge), 라쏘(Lasso), 로지스틱 회귀 등 회귀 관련 알고리즘과 SGD(Stochastic Gradient Descent) 알고리즘 제공 |
sklearn.svm | 서포트 벡터 머신 알고리즘 제공 |
sklearn.neighbors | 최근접 이웃 알고리즘 제공 (k-NN 등) |
sklearn.naive_bayes | 나이브 베이즈 알고리즘 제공 (가우시안 NB, 다항 분포 NB 등) |
sklearn.tree | 의사 결정 트리 알고리즘 제공 |
sklearn.ensemble | 앙상블 알고리즘 제공 (Random Forest, AdaBoost, GradientBoost 등) |
sklearn.cluster | 비지도 클러스터링 알고리즘 제공 (k-Means, 계층형 클러스터링, DBSCAN 등) |
estimator API
- 일관성: 모든 객체는 일관된 문서를 갖춘 제한된 메서드 집합에서 비롯된 공통 인터페이스 공유
- 검사(inspection): 모든 지정된 파라미터 값은 공개 속성으로 노출
- 제한된 객체 계층 구조
- 알고리즘만 파이썬 클래스에 의해 표현
- 데이터 세트는 표준 포맷(NumPy 배열, Pandas DataFrame, Scipy 희소 행렬)으로 표현
- 매개변수명은 표준 파이썬 문자열 사용
- 구성: 많은 머신러닝 작업은 기본 알고리즘의 시퀀스로 나타낼 수 있으며, Scikit-Learn은 가능한 곳이라면 어디서든 이 방식을 사용
- 합리적인 기본값: 모델이 사용자 지정 파라미터를 필요로 할 때 라이브러리가 적절한 기본값을 정의
API 사용 방법
- Scikit-Learn으로부터 적절한 estimator 클래스를 임포트해서 모델의 클래스 선택
- 클래스를 원하는 값으로 인스턴스화해서 모델의 하이퍼파라미터 선택
- 데이터를 특징 배열과 대상 벡터로 배치
- 모델 인스턴스의 fit() 메서드를 호출해 모델을 데이터에 적합
- 모델을 새 데이터에 대해서 적용
- 지도 학습: 대체로 predict() 메서드를 사용해 알려지지 않은 데이터에 대한 레이블 예측
- 비지도 학습: 대체로 transform()이나 predict() 메서드를 사용해 데이터의 속성을 변환하거나 추론
실사용 코드
- 내용이 방대해서 파일로 정리
- +아래 코드 틀을 기본으로
- 선형모델
- 로지스틱 회귀
- 서포트 벡터 머신
- 최근접 이웃
- 나이브 베이즈 분류
- 결정 트리
- 앙상블
- XGBosost, LightGBM
- 군집화
- 다양체 학습
- 분해
- 추천 시스템 등을 API 사용법만 알면 바로 적용 및 하이퍼 파라미터 최적화 가능
https://colab.research.google.com/drive/1woBGsdfWtzq_KQ6CuaPy5o3LRKIMiZiM?usp=sharing
_2사이킷런(scikit-learn) .ipynb
Colaboratory notebook
colab.research.google.com
참고문헌
- scikit-learn 사이트: https://scikit-learn.org/
- Aurelien Geron, "Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems", O'Reilly