지극히 개인적인 공부 노트/인공지능(AI)

[인공지능] 사이킷런(Scikit-learn) 패키지

AS J 2021. 5. 15. 00:17

k-최근접 이웃, 선형 회귀, 릿지, 라쏘, 다항 회귀, 로지스틱 회귀, 확률적 경사 하강법, 결정 트리 등의 알고리즘을 갖고 있는 대표적인 머신러닝 패키지입니다. 데이터를 이 패키지의 입력 데이터로 활용하기 위해선 2차원 리스트(배열 포함)로 입력 또는 변환해야 합니다. 또, 사이킷런을 통해 필요한 머신러닝 알고리즘을 임포트, 머신러닝 알고리즘의 모델 생성, 모델 평가 등의 순서로 이용합니다.

 

1. 모듈

1) model_selection: 모델의 데이터를 구성, 변환해주는 모듈

(1) train_test_split(): 훈련 세트와 테스트 세트로 함수 자체에서 랜덤하게 분리하며, 입력 데이터와 정답 데이터를 입력으로 받고, 이를 다음과 같이 각 변수에 자동으로 저장합니다.

from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(data, target)

(2) cross_validate(): 교차 검증을 진행하는 함수입니다. 평가할 모델 객체를 첫 번째 매개변수로 전달 받고, 이후 훈련 세트 전체를 입력합니다. fit_time, score_time, test_score 키를 가진 딕셔너리로 반환되며, 각각 모델을 훈련하는 시간, 검증하는 시간, 검증 결과를 의미합니다. 매개변수 cv로 폴드 수를 지정할 수 있으며, 기본값은 5입니다. 반면, 이 함수는 훈련 세트를 따로 섞어서 폴드를 나누지 않기 때문에 섞기 위해선 StratifiedKFold와 같은 분할기를 지정할 필요가 있습니다.

from sklearn.model_selection import cross_validate
scores = cross_validate(모델 객체, train_input, train_target)

매개변수

scoring: 검증에 사용할 평가 지표를 지정하는 매개변수. 기본적으로 분류 모델은 정확도를 의미하는 'accuracy', 회귀 모델은 결정계수를 의미하는 'r2'가 됩니다.

cv: 교차 검증 폴드 수나 스플리터 객체를 지정하는 매개변수. 기본값은 5이고, 회귀일 때는 KFold 클래스를, 분류일 때는 StratifiedKFold 클래스를 사용합니다.

n_jobs: 사용할 CPU의 코어 수를 지정하는 매개변수. 1은 하나의 코어, -1은 시스템에 있는 모든 코어를 뜻합니다.

return_train_score: 기본값은 False이며, True로 지정하면 훈련 세트의 점수도 반환합니다.


(3) StratifiedKFold: cross_validate()는 기본적으로 회귀 모델일 경우 KFold 분할기를 사용하고, 분류 모델일 경우엔 타깃 클래스를 골고루 나누기 위해 다음 코드와 같이 StratifiedKFold를 사용합니다.

from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=10, shuffle=True)	#n_splits는 폴드 수를 지정하는 매개변수
scores = cross_validate(모델 객체, train_input, train_target, cv=skf)

(4) GridSearchCV: 모델이 직접 학습할 수 없어서 사용자가 지정해야만 하는 '하이퍼파라미터'를 탐색하고, 교차 검증을 한 번에 수행하는 클래스입니다. 탐색 대상 모델과 딕셔너리 형태의 지정할 변수를 전달 받습니다.

대체로 이 클래스를 사용할 때는, 탐색할 매개변수 지정, 각각의 훈련 세트(폴드된 세트)에서 그리드 서치를 수행, 최상의 평균 검증 점수가 나오는 매개변수 조합 탐색(이 조합은 그리드 서치 객체에 저장됨), 그리드 서치는 다시 전체 훈련 세트를 사용해서 최종 모델을 훈련(이 모델 또한 그리드 서치 객체에 저장됨)의 과정을 거칩니다.

from sklearn.model_selection import GridSearchCV
gs = GridSearchCV(모델 객체, 파라미터_딕셔너리 형태)
gs.fit(train_input, train_target)
a = gs.best_estimator	#검증 점수가 가장 높은 모델의 매개변수 조합으로 저장된 속성. 다시 모델처럼 사용 가능.
gs.best_params_	#검증 점수가 가장 높은 파라미터가 저장된 속성.

(5) RandomizedSearchCV: 그리드 서치 클래스에서 랜덤 기능이 추가된 클래스입니다. 변경하려는 파라미터에 scipy.stats의 uniform, randint 클래스를 이용해 랜덤으로 샘플링을 하고, 랜덤 서치 클래스를 적용합니다.

from sklearn.model_selection import RandomizedSearchCV
gs = RandomizedSearchCV(알고리즘, 랜덤 샘플링을 적용한 변수, n_iter=100)	#n_iter: 총 몇 번을 샘플링하여 교차 검증할 것인지 지정하는 매개변수
gs.fit(train_input, train_target)
a = gs.best_estimator_	#훈련된 랜덤 서치 모델 중 최상의 성능 모델을 a로도 전달

 

2) metrics: 여러 가지 측정 도구를 제공하는 모듈

(1) mean_absolute_error(): 타깃과 예측 데이터의 절댓값 오차를 평균하여 반환하는 함수입니다.

from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error(test_target, test_prediction)

 

3) preprocessing

(1) PolynomialFeatures: 특성을 만들거나 전처리하기 위해 사이킷런에서 제공하는 (특성공학을 위한) 변환기 클래스입니다. 이 클래스는 fit(), transform() 함수(번거롭다면 한 번에 fit_transform() 함수로 변환 가능)로 기존의 특성을 이용해 특성 개수를 증폭시키는 클래스입니다.

from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures()
poly.fit('입력 데이터')
poly.transform('입력 데이터')
poly.get_feature_names()	#각 특성이 어떻게, 어떤 순서로 증폭, 나열됐는지 알려주는 함수

(2) StandardScaler: (규제를 위한) 변환기 클래스이며, 평균과 표준편차를 통한 데이터 전처리를 더 쉽게 수행해주는 기능을 합니다. 이 클래스도 fit(), transform()을 순서대로 이용하며, 훈련 세트와 테스트 세트 모두 이 변환기를 통해 전처리해야 한다는 것을 유의해야 합니다.

from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit('입력 데이터')
ss.transform('입력 데이터')

 

 

 

2. 함수

1) fit(): 사이킷런 모델을 훈련할 때 사용하는 함수. 입력 변수로 훈련 데이터(train dadta), 정답 데이터(target data)를 입력한다.

ml.fit(train_input, train_target)	#ml은 임의의 머신러닝 알고리즘을 지정한 모델

2) predict(): 사이킷런 모델을 훈련하고 예측할 때 사용하는 함수. 입력 변수로 특성 데이터 하나만 입력 받습니다.

ml.predict(test_input)

3) score(): 훈련된 사이킷런 모델의 성능을 측정하는 함수. 입력 변수로 특성 데이터와 정답 데이터를 입력 받으며, 함수 자체에서 predict() 함수로 먼저 예측 수행, 이후 정답과 비교하여 올바르게 예측한 개수의 비율을 반환하는 원리로 동작합니다.

ml.score(test_input, test_target)	#이전에 ml 모델을 fit()으로 훈련해놓은 상태여야 합니다.