02-03. 사이킷런의 기반 프레임워크 익히기

Park Jong Hun·2021년 2월 8일
0

위키북스의 파이썬 머신러닝 완벽 가이드 책을 토대로 공부한 내용입니다.


1. Estimator 이해 및 fit(), predict() method


사이킷런은 ML 모델의 학습을 위해서 fit(), 예측을 위해서 predict() method를 제공하고 있다. 지도학습은 주로 분류(classification)와 회귀(regression)로 분류된다. 그리고 사이킷런은 분류와 회귀의 다양한 알고리즘을 구현하였고, fit(), predict() method만으로 간단하게 학습과 예측이 가능하다. 사이킷런에서는 분류 알고리즘을 구현한 클래스를 Classifier로, 회귀 알고리즘을 구현한 클래스를 Regressor로 부른다. 그리고 이 둘을 합쳐서 Estimator 클래스라고 부른다. 즉, 지도학습의 모든 알고리즘을 구현한 클래스를 통칭해서 Estimator라고 부르고, Estimator 클래스는 fit()과 predict() method를 내부에서 구현하고 있다.

cross_val_score()와 같은 evaluation 함수, GridSearchCV와 같은 hyper parameter 튜닝을 지원하는 클래스에서는 이 Estimator 객체를 인자로 받는다. cross_val_score() 함수나 GridSearchCV.fit() 함수 내에서 Estimator 객체의 fit(), predict() method를 호출하여 사용하기 때문이다.

그리고 비지도학습인 차원 축소, 클러스터링, 피처 추출(feature extraction) 등을 구현한 클래스에서는 대부분 fit(), transform() method를 사용한다. 지도학습과는 다르게 비지도학습의 fit() method는 학습을 의미하는 것이 아니라 input 데이터의 형태에 맞추어 데이터를 변환하기 위해 사전에 구조를 맞추는 작업이다. fit()으로 사전 구조를 맞추고 나면 transform()으로 데이터를 변환한다. 사이킷런은 fit()과 transform()을 결합시킨 fit_transform()도 제공하고 있다. 하지만 fit()과 transform()으로 나눠서 사용하는 것과 약간의 차이가 있어서 정확하게 알고 사용하는 것이 중요하다.


2. 사이킷런의 주요 모듈


분류모듈명설명
예제 데이터
sklearn.datasets
사이킷런에 내장되어 예제로 제공하는 dataset
피쳐 처리
sklearn.preprocessing
데이터 전처리에 필요한 다양한 가공 기능 제공
(문자열을 숫자형 코드 값으로 인코딩, 정규화, 스케일링)
피쳐 처리
sklearn.feature_selection
알고리즘에 큰 영향을 미치는 피처를 우선순위대로 셀렉션 작업을 수행하는 다양한 기능 제공
피쳐 처리
sklearn.feature_extraction
텍스트 데이터나 이미지 데이터의 벡터화된 피처를 추출하는데 사용됨
예를 들어, 텍스트 데이터에서 Count Vectorizer나 Tf-idf Vectorizer 등을 생성하는 기능 제공
텍스트 데이터의 피처 추출은 sklearn.feature_extraction.text 모듈에,
이미지 데이터의 피처 추출은 sklearn.featrue_sxtraction.image 모듈에 지원 API가 있음
피쳐 처리 & 차원 축소
sklearn.decomposition
차원 축소와 관련한 알고리즘을 지원하는 모듈임
PCA, NMF, Truncated SVD 등을 통해 차원 축소 기능을 수행할 수 있음
데이터 분리, 검증 & 파라미터 튜닝
sklearn.model_selection
교차 검증을 위한 학습용/테스트용 분리, 그리드 서치(Grid Search)로 최적 파라미터 추출 등의 API 제공
평가
sklearn.metrics
분류, 회귀, 클러스터링, 페어와이즈(Pairwise)에 대한 다양한 성능 측정 방법 제공
Accuracy, Precision, Recall, ROC-AUC, RMSE 등 제공
ML 알고리즘
sklearn.ensemble
앙상블 알고리즘 제공
랜덤 포레스트, 에이다 부스트, 그래디언트 부스팅 등을 제공
ML 알고리즘
sklearn.linear_model
주로 선형 회귀, 릿지(Ridge), 라쏘(Lasso) 및 로지스틱 회귀 등 회귀 관련 알고리즘을 지원
또한 SGD(Stochastic Gradient Descent) 관련 알고리즘도 제공
ML 알고리즘
sklearn.naive_bayes
나이브 베이즈 알고리즘 제공, 가우시안 NB, 다항 분포 NB 등
ML 알고리즘
sklearn.neighbors
최근접 이웃 알고리즘 제공, K-NN 등
ML 알고리즘
sklearn.svm
서포트 벡터 머신 알고리즘 제공
ML 알고리즘
sklearn.tree
의사 결정 트리 알고리즘 제공
ML 알고리즘
sklearn.cluster
비지도 클러스터링 알고리즘 제공 (K-평균, 계층형, DBSCAN 등)
유틸리티
sklearn.pipeline
피처 처리 등의 변환과 ML 알고리즘 학습, 예측, 등을 함께 묶어서 실행할 수 있는 유틸리티 제공

일반적으로 머신러닝 모델을 구축하는 주요 프로세스는 feature의 가공, 변경, 추출을 수행하는 feature processing, ML 알고리즘 학습/예측 수행, 그리고 모델 평가의 단계를 반복적으로 수행하는 것이다.


3. 내장된 예제 dataset


사이킷런에 내장 되어 있는 dataset은 분류나 회귀를 연습하기 위한 예제용도의 dataset과 분류나 클러스터링을 위해 표본 데이터로 생성될 수 있는 dataset으로 나뉘어진다.

  • 분류나 회귀 연습용 예제 데이터
API 명설명
datasets.load_boston()
회귀 용도이며, 미국 보스턴의 집 피쳐들과 가격에 대한 dataset
datasets.load_breast_cancer()
분류 용도이며, 위스콘신 유방암 피처들과 악성/음성 레이블 dataset
datasets.load_diabets()
회귀 용도이며, 당뇨 dataset
datasets.load_digits()
분류 용도이며, 0에서 9까지 숫자의 이미지 픽셀 dataset
datasets.load_iris()
분류 용도이며, 붓꽃에 대한 피처를 가진 dataset

fetch 계열의 명령은 데이터의 크기가 커서 패키지에 저장되지 못하고, 인터넷에서 내려받아 홈 디렉토리 아래의 scikit_learn_data라는 서브 디렉토리에 저장한 후 추후에 불러들이는 데이터이다.

  • fetch_covtype() : 회귀 분석용 토지 조사 자료
  • fetch_20newsgroups() : 뉴스 그룹 텍스트 자료
  • fetch_olivetti_faces() : 얼굴 이미지 자료
  • fetch_lfw_people() : 얼굴 이미지 자료
  • fetch_rcv1() : 로이터 뉴스 말뭉치
  • fetch_mldata() : ML 웹사이트에서 다운로드
  • 분류와 클러스터링을 위한 표본 데이터 생성기
API 명설명
datasets.make_classifications()
분류를 위한 dataset을 만든다. 특히 높은 상관도, 불필요한 속성
등의 노이즈 효과를 위한 데이터를 무작위로 생성해 준다.
datasets.make_blobs()
클러스터링을 위한 dataset을 무작위로 생성해 준다. 군집 지정 개수에 따라
여러 가지 클러스터일을 위한 dataset을 쉽게 만들어 준다.

사이킷런에 내장된 dataset은 일반적으로 dictionary 형태로 되어있다. key는 보통 data, target, target_name, feature_names, DESCR로 구성되어있다.

  • data : 피처의 dataset을 가리킨다.
  • target : 분류 시 label 값, 회귀일 때는 숫자 결과값 dataset이다.
  • target_name : 개별 label의 이름을 말한다.
  • feature_names : feature의 이름을 말한다.
  • DESCR : dataset에 대한 설명과 각 feature의 설명을 나타낸다.

그리고 data, target은 numpy 타입이며, target_names, feature_names는 numpy 타입 혹은 list 타입이다. DESCR은 string 타입이다.

profile
NLP, AI, LLM, MLops

0개의 댓글