위키북스의 파이썬 머신러닝 완벽 가이드 책을 토대로 공부한 내용입니다.
사이킷런은 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()으로 나눠서 사용하는 것과 약간의 차이가 있어서 정확하게 알고 사용하는 것이 중요하다.
분류 모듈명 설명 예제 데이터 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 알고리즘 학습/예측 수행, 그리고 모델 평가의 단계를 반복적으로 수행하는 것이다.
사이킷런에 내장 되어 있는 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() 분류 용도이며, 붓꽃에 대한 피처를 가진 datasetfetch 계열의 명령은 데이터의 크기가 커서 패키지에 저장되지 못하고, 인터넷에서 내려받아 홈 디렉토리 아래의 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 타입이다.