python

python gridSearch, RandomSearch

cj92 2020. 7. 30. 00:25

파이썬은 쓰면 쓸 수록 제공하는 부분에서는 친절하고 제공 안하는 부분에 대해서는 불친절한 것 같다.

 

pandas data frame 형태 데이터를 gridSearch 를 한번 해보려했는데 구조가 뭔가 복잡해서 

 

검색해도 바로 찾지 못하겠어서 공유를 하고자 한다.

 

https://scikit-learn.org/stable/

 

scikit-learn: machine learning in Python — scikit-learn 0.23.1 documentation

Model selection Comparing, validating and choosing parameters and models. Applications: Improved accuracy via parameter tuning Algorithms: grid search, cross validation, metrics, and more...

scikit-learn.org

 

위 사이트는 scikit-learn 사이트이다. 이 사이트를 왜 공유하냐면 모델마다 하이퍼파라메터가 상이한데 이에 해당하지 않으면 에러가 뜨기 때문이다. 

 

사실 영어를 잘하면 도큐먼트를 읽으면되나 시간도 없고.. 영어도 못하고..

 

우선 scikit-learn에서 제공하는게 뭔지 잘 모르겠다면,

 

anaconda의 경로로 가보자.

 

default세팅이라고하면, 사용자>계정명>Anaconda3>Lib>site-packages>sklean에 있을 것이다.

 

가상환경의 경우, 사용자>계정명>Anaconda3>envs>가상환경명>Lib>site-packages>sklean이다.

 

무튼 잘 들어왔다면, 다양한 폴더들이 있는데

 

우리가 import sklearn을 하지 않고

 

from sklearn.svm import BaseCrossValidator를 임력했다고하면, 

 

sklearn패키지 안에 svm이라는 폴더안에 객체인 BaseCrossValidator를 의미한다.

 

BaseCrossValidator에 해당하는 부분은 __init__.py 파일에 있는 것 같다.

 

다시 본론으로 grid Search를 어떻게 하느냐로 돌아가겠다.

 

우선 document에서 우리가 쓰고자 하는 모델을 검색해보자. 

 

RandomForestRegressor를 쓰고자 한다면 

 

 

아래와 같이 입력.

 

입력에는 parameter가 다양하게 있는데

 

이를 grid search 할 수 있다. 

from sklearn.ensemble import RandomForestRegressor

rf=RandomForestRegressor()

grid search 할 목록을 딕셔너리의 형태로 구성해보자.

rf_grid={'criterion':['mse','mae'],
		'max_features':['auto','sqrt','log2',None]}

다음과 같이 구성되었다면 

from sklearn.model_selection import GridSearchCV
model=GridSearch(rf,rf_grid)
model.fit(X_train,Y_train)

 이렇게 간단히 할 수 있다.