Search

사이킷런의 기반 프레임워크 익히기

사이킷런은 머신러닝 모델 학습을 위해 fit() 와 predict() 메서드를 제공한다.
사이킷런에서는 분류 알고리즘을 가지는 클래스는 Classifier로 , 회귀 알고리즘을 가지는 클래스는 Regressor로 지칭한다. 이들을 합쳐서 Estimator 클래스라고 부른다.

Estimator 이해 및 fit(), predict() 메서드

evaluation 함수, 하이퍼 파라미터 튜닝을 지원하는 클래스의 경우 이 Estimator를 인자로 받는다. 이 Estimator내에서 작동하는 fit()과 predict()를 호출해서 평가하고 하이퍼 파라미터를 튜닝하는 것이다.
분류모형
DecisionTreeClassifier ( 의사결정 모형 )
RandomForestClassifier ( 랜덤포레스트 분류 모형 )
GradientBoostingClassifier ( GBM )
GaussianNB
SVC ( 서포트벡터머신 모형 )
회귀모형
LinearRegression ( 선형 회귀 모형 )
Ridge ( 릿지 모형 )
Lasso ( 라쏘 모형 )
RandomForestRegressor ( 랜덤포레스트 회귀 모형 )
GradientBoostingRegressor ( GBM )
비지도학습인 차원축소, 클러스터링, 피처 추출 등을 구현하는 클래스에도 fit() 과 transform() 을 적용한다.
비지도학습에서의 fit()은 학습이 아니라 입력 데이터의 형태에 맞춰 데이터를 변환하기 위한 사전 구조를 맞추는 작업이라고 할 수 있다.
실제 작업은 transform() 으로 수행한다.
사이킷런은 fit 과 transform을 합친 fit_transform() 도 제공한다. 하지만 사용의 주의가 필요하다. 이 주의는 비지도학습에서 설명한다.

사이킷런의 주요 모듈

자주 쓰이는 핵심 모듈 위주다.
분류
모듈명
설명
예제 데이터
sklearn.datasets
사이킷런에 내장된 데이터 세트
피처 처리
sklearn.preprocessing
데이터 전처리에 필요한 다양한 가공 기능 제공(문자열을 숫자형 코드 값으로 인코딩, 정규화, 스케일링 등)
피처 처리
sklearn.feature_selection
알고리즘에 큰 영향을 미치는 피처를 우선순위대로 셀렉션 작업을 수행하는 다양한 기능 제공
피처 처리
sklearn.feature_extraction
텍스트 데이터나 이미지 데이터의 벡터화된 피처를 추출하는데 사용됨. 텍스트 데이터의 피처 추출은 sklearn.feature_extraction.text 모듈에, 이미지 데이터의 피처 추출은 sklearn.feature_extraction.image 모듈에 지원 API가 있다.
피처 처리 & 차원 축소
sklearn.decomposition
차원 축소와 관련한 알고리즘을 지원하는 모듈. PCA, NMF, Truncated SVD 등을 통해서 차원 축소 기능을 수행할 수 있음
데이터 분리, 검증 & 파라미터 튜닝
sklearn.model_selection
교차 검증을 위한 학습/테스트용 분리, 그리드 서치로 최적 파라미터 추출 등의 API 제공
평가
sklearn.metrics
분류, 회귀, 클러스터링, 페어와이즈에 대한 다양한 성능 측정 방법 제공( accuracy, precision, recall, roc-auc, rmse 등 제공)
ML 알고리즘
sklearn.ensemble
앙상블 알고리즘 제공 ( 랜덤 포레스트, 에이다 부스트, 그래디언트 부스팅 등을 제공 )
ML 알고리즘
sklearn.linear_model
주로 선형 회귀, 릿지, 라쏘 및 로지스틱 회귀 등 회귀 관련 알고리즘을 지원. 또한 SGD 관련 알고리즘도 제공
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 알고리즘 학습, 예측 등을 함께 묶어서 실행할 수 있는 유틸리티 제공

내장된 예제 데이터 세트

사이킷런에 내장 되어 있는 데이터 세트는 분류나 회귀를 연습하기 위한 예제용도의 데이터 세트와 분류나 클러스터링을 위해 표본 데이터로 생성될 수 있는 데이터 세트로 나뉜다.
<분류나 회귀 연습용 예제 데이터>
datasets.load_boston() : 회귀 용도. 미국 보스턴의 집 피처들과 가격에 대한 데이터 세트
datasets.load_breast_cancer() : 분류 용도. 위스콘신 유방암 피처들과 악성/음성 레이블 데이터 세트
datasets.load_diabetes() : 회귀 용도. 당뇨 데이터 세트
datasets.load_digits() : 분류 용도. 0에서 9까지 숫자 이미지 픽셀 데이터 세트
datasets.load_iris() : 분류 용도. 붓꽃에 대한 피처를 가진 데이터 세트
fetch 계열의 명령은 데이터 크기가 커서 패키지에 처음부터 저장되어 있지 않고 인터넷에서 내려받아 홈 디렉터리 아래의 scikit_learn_data라는 서브 디렉터리에 저장한 후 추후 불러들이는 데이터다.
최초 사용 시에 인터넷에 연결되어 있지 않으면 사용할 수 없다.
fetch_covtype() : 회귀 분석용 토지 조사 자료
fetch_20newsgroups() : 뉴스 그룹 텍스트 자료
fetch_olivetti_faces() : 얼굴 이미지 자료
fetch_lfw_people() : 얼굴 이미지 자료
fetch_lfw_pairs() : 얼굴 이미지 자료
fetch_rcv1() : 로이터 뉴스 말뭉치
fetch_mldata() : ML 웹사이트에서 다운로드
분류와 클러스터링을 위한 표본 데이터 생성기
API 명
설명
datasets.make_classification()
분류를 위한 데이터 세트를 만든다. 높은 상관도, 불필요한 속성 등의 노이즈 효과를 위한 데이터를 무작위로 생성해 준다.
datasets.make_blobs()
클러스터링을 위한 데이터 세트를 무작위로 생성. 군집 지정 개수에 따라 여러 가지 클러스터링을 위한 데이터 세트를 쉽게 만들어준다.
사이킷런에 내장된 데이터 세트는 일반적으로 딕셔너리 형태로 되어 있다.
키는 보통 data, target, target_names, feature_names, DESCR 로 구성되어 있다.
data 는 데이터 세트를 가르킨다
target 은 분류 시 레이블 값, 회귀일 경우 결과값을 의미한다.
target_names 는 개별 레이블의 이름을 나타낸다
feature_names 는 특성의 이름을 나타낸다.
DESCR는 데이터 세트에 대한 설명과 각 특성에 대한 설명을 나타낸다.
data, target은 넘파이 배열 타입, target_names, feature_names는 넘파이 배열 또는 파이썬 리스트 타입이다. DESCR는 스트링 타입이다.
from sklearn.datasets import load_iris iris_data = load_iris() print(type(irsi_data)) # <class 'sklearn.utils.Bunch'> # 이 클래스는 파이썬 딕셔너리 자료형과 유사하다. # 데이터 세트의 key 값을 확인해보자. keys = iris_data.keys() print('붓꽃 데이터 세트의 키들:',keys) ''' 붓꽃 데이터 세트의 키들: dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename']) ''' # 데이터 값 추출하려면 # 데이터 세트.data 또는 데이터 세트['data'] 를 이용하면 된다. print('\n feature_names의 type:', type(iris_data.feature_names)) # feature_names의 type: <class 'list'> print(' feature_names의 shape:', len(iris_data.feature_names)) # feature_names의 shape: 4 print(iris_data.feature_names) # ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] print('\n target_names의 type:', type(iris_data.target_names)) # target_names의 type: <class 'numpy.ndarray'> print(' target_names의 shape:', len(iris_data.target_names)) # target_names의 shape: 3 print(iris_data.target_names) # ['setosa' 'versicolor' 'virginica'] print('\n target_names의 type :', type(iris_data.target_names)) print(' target_names의 shape :', len(iris_data.target_names)) print('\n data의 type :', type(iris_data.data)) print(' data의 shape:', iris_data.data.shape) print(iris_data['data']) print('\n target의 type:', type(iris_data.target)) print(' target의 shape:', iris_data.target.shape) print(iris_data.target)
Python
복사