본문 바로가기
오늘의 복습 정리

머신러닝 모델 성능 검증, 하이퍼 파라미터

by misohee 2023. 3. 10.

K-Fold Cross Validation

K개의 분할에 대한 모든 성능 추정치 (K = 2 이상의 수)

:모든 데이터가 평가에 1번, 학습에 k-1번 사용된다.

->cross_val_score 함수 사용 결과 얻은 성능의 평균을 곧 모델의 성능으로 본다.

 

장점 : 반복학습과 평가로 정확도 향상

           데이터 과소적합 방지

           평가 데이터 편향 해소(모든 데이터를 학습/평가에 사용하기 때문)

           비교적 일반화된 모델을 만들 수 있다.

단점 : 반복횟수가 많은 만큼 학습과 평가에 많은 시간이 소요된다.

 

1. 불러오기
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
2. 선언하기
model = DecisionTreeClassifier( )
3. 검증하기
cv_result = cross_val_score (model, x_train , y_train , cv=10) #cv : 분할개수K (기본값 = 5)
4. 확인
print(cv_result)
print( cv_result.mean)


Hyperparameter

:모델링시 최적화를 위해 조절할 수 있는 옵션

Ex) KNN의 n_neighbors , Decision Tree

      Decision Tree의 max_depth ..

 

파라미터값  찾는 방법 

GridSearch : 1~n 사이의 파라미터값을 주고 각 모델 성능정보 수집

                     가장 성능이 좋던 때의 파라미터값을 사용

                     # n까지의 모든 정수를 해보기 때문에 n이 크면 시간이 오래걸림

Random Search : 1~n사이의 정수중 랜덤하게 m개 골라 파라미터값으로 주고 각 모델 성능정보 수집

                             가장 성능이 좋던 때의 파라미터 값 사용

                               # 랜덤으로 m개만 보기 때문에 최적의 값인지 확신이 없음

 

Random Search사용코드(KNN)
#모듈 불러오기
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import RandomizedSearchCV #GridSearch -> GridSearchCV
#파라미터 선언
param = {'n_neighbors': range(150010),   #파라미터 범위를 딕셔너리 형태로 지정해준다.
         'metric': ['euclidean ''manhattan']}
#기본모델 선언
knn_model = KNeighborsClassifier()
#Grid Search모델 선언
model = RandomizedSearchCV(knn_model,  #위에 선언한 기본 모델
                                                      param, 
                                                      cv=3, 
                                                      n_iter = 수행횟수(m)#Gridsearch에서는 사용안함
#학습하기
model.fit(x_train, y_train)
#수행 정보
model.cv_results_
#최적 파라미터
model.best_params_
#최고 성능
model.best_score_