사이킷런은 머신러닝 모델 학습을 위해 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
복사