그리드 탐색(Grid Search)
-가능한 모든 하이퍼파라미터 조합을 시도해보는 방법이다.
-모든 경우의 수를 시도하므로 최적의 하이퍼파라미터를 찾을 수 있다.
-하지만 계산 시간이 많이 소요될 수 있으며, 적절한 범위와 간격을 설정해야한다
랜덤 탐색(Random Search)
-지정한 범위 내에서 무작위로 하이퍼파라미터를 선택하여 시도해보는 방법입니다.
-그리드 탐색에 비해 계산 시간이 적게 소요되며, 적절한 범위와 간격을 설정해야 합니다.
-무작위 선택이기 때문에 최적의 하이퍼파라미터를 보장하지는 않습니다.
따라서, 하이퍼파라미터를 선택할 때는 적절한 범위와 간격을 설정하고, 그리드 탐색과 랜덤 탐색 중 적절한 방법을 선택하여 실험을 진행하시면 됩니다. 또한, 변수 선택 알고리즘에서는 선택된 변수의 개수를 지정할 수 있는 경우가 많으므로, 이를 조정하여 적절한 변수 개수를 선택할 수도 있습니다
그리드 탐색(Grid Search)
그리드 탐색은 가능한 모든 하이퍼파라미터 조합을 시도해보는 방법입니다.
예를 들어, 모델의 학습률과 배치 크기를 조정하는 두 개의 하이퍼파라미터가 있다고 가정해보겠습니다.
학습률은 0.1, 0.01, 0.001 중에서 선택할 수 있고, 배치 크기는 32, 64, 128 중에서 선택할 수 있다면, 가능한 모든 조합을 시도하는 방법입니다.
그리드 탐색은 시간이 오래 걸리지만, 가능한 모든 조합을 시도하므로 가장 좋은 성능을 내는 하이퍼파라미터 조합을 찾을 수 있습니다.
아래는 그리드 탐색을 사용하여 하이퍼파라미터를 조정하는 예제 코드입니다.
예제에서는 scikit-learn의 GridSearchCV 클래스를 사용합니다. 이 클래스는 그리드 탐색을 간단하게 수행할 수 있도록 도와줍니다.
위 코드에서는 load_iris 함수를 사용하여 붓꽃 데이터셋을 로드하고, KNeighborsClassifier 클래스를 사용하여 K-NN 분류기 객체를 생성합니다.
그리고 param_grid 변수에 가능한 하이퍼파라미터 조합을 딕셔너리 형태로 지정합니다.
이때, n_neighbors, weights, algorithm은 모델의 하이퍼파라미터이며, 리스트에 가능한 값들을 지정해줍니다.
이후 GridSearchCV 클래스를 사용하여 그리드 탐색을 수행합니다. 이 클래스는 첫 번째 인자로 모델 객체를, 두 번째 인자로 하이퍼파라미터 조합을 받습니다.
코드에서 cv 인자는 교차 검증의 폴드 개수를 지정합니다. fit 메소드를 호출하여 그리드 탐색을 수행하면, GridSearchCV 클래스는 가능한 모든 하이퍼파라미터 조합에 대하여 교차 검증을 수행합니다.
이후, 가장 성능이 좋은 하이퍼파라미터 조합을 출력하고, 해당 조합을 사용하여 모델을 학습시킵니다.
랜덤 탐색(Random Search)
랜덤 탐색은 그리드 탐색과 달리, 하이퍼파라미터 조합을 무작위로 선택하여 탐색합니다.
이 방법은 가능한 하이퍼파라미터 조합 중에서 일부만을 선택하여 시도해보므로 그리드 탐색보다 적은 시간이 걸립니다.
하지만 그리드 탐색보다 성능이 떨어지는 경우가 있을 수 있습니다.
아래는 랜덤 탐색을 사용하여 하이퍼파라미터를 조정하는 예제 코드입니다.
예제에서는 scikit-learn의 RandomizedSearchCV 클래스를 사용합니다. 이 클래스는 랜덤 탐색을 간단하게 수행할 수 있도록 도와줍니다.
위 코드에서는 load_iris 함수를 사용하여 붓꽃 데이터셋을 로드하고, KNeighborsClassifier 클래스를 사용하여 K-NN 분류기 객체를 생성합니다.
그리고 param_dist 변수에 가능한 하이퍼파라미터 범위를 딕셔너리 형태로 지정합니다.
이때, n_neighbors, weights, algorithm은 모델의 하이퍼파라미터이며, range 함수를 사용하여 가능한 값을 지정합니다. 이후 RandomizedSearchCV 클래스를 사용하여 랜덤 탐색을 수행합니다.
이 클래스 param_distributions 인자에는 가능한 하이퍼파라미터 범위를 딕셔너리 형태로 지정합니다.
랜덤 탐색을 수행할 때는, 이 범위 내에서 무작위로 조합을 선택하여 모델을 학습하고 성능을 평가합니다. n_iter 인자는 몇 번의 무작위 조합을 선택하여 수행할지를 지정합니다. cv 인자는 교차 검증을 수행할 때 폴드 개수를 지정합니다.
RandomizedSearchCV 클래스의 fit 메소드를 호출하여 랜덤 탐색을 수행하면, 모든 무작위 조합에 대하여 교차 검증을 수행하고, 가장 좋은 성능을 보인 하이퍼파라미터 조합을 출력합니다.
위 코드에서는 랜덤 탐색을 10번 수행하도록 지정하였습니다.
또한 cv 인자를 5로 설정하여 5-폴드 교차 검증을 수행하도록 하였습니다.
fit 메소드를 호출한 후에는 best_params_ 속성을 사용하여 최적의 하이퍼파라미터 조합을 출력할 수 있습니다. 또한 best_score_ 속성을 사용하여 가장 좋은 성능을 보인 모델의 정확도를 출력할 수 있습니다.
마무리
그리드 탐색과 랜덤 탐색은 머신러닝 모델의 성능을 향상시키기 위한 중요한 방법 중 하나입니다.
하지만 가능한 조합의 개수가 매우 많은 경우에는 그리드 탐색이 너무 오래 걸리는 단점이 있습니다.
이때는 랜덤 탐색을 사용하여 일부 하이퍼파라미터 조합만을 선택하여 성능을 평가할 수 있습니다.
또한 최적의 하이퍼파라미터 조합을 찾기 위해서는 교차 검증을 수행해야 합니다. 이를 통해 모델의 성능을 더욱 신뢰할 수 있게 됩니다.