하이퍼파라미터 값

Python에서의 하이퍼파라미터 튜닝

Alex Scriven

Data Scientist

하이퍼파라미터 값

 

처음 튜닝할 때 더 중요한 하이퍼파라미터가 있습니다.

그렇다면 어떤 하이퍼파라미터 '값'을 시도할까요?

  • 알고리즘·하이퍼파라미터별로 다름
  • 모범 사례와 팁이 일부 있습니다

핵심 팁을 살펴봅시다!

Python에서의 하이퍼파라미터 튜닝

충돌하는 하이퍼파라미터 선택

충돌하는 하이퍼파라미터 선택에 유의하세요.

  • LogisticRegression()solverpenalty 조합에는 충돌 옵션이 있습니다.
The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.

일부는 명시적 경고 없이 '무시'되기도 합니다(ElasticNetnormalize 하이퍼파라미터):

This parameter is ignored when fit_intercept is set to False

항상 Scikit-Learn 문서를 확인하십시오!

Python에서의 하이퍼파라미터 튜닝

엉뚱한 하이퍼파라미터 값

 

알고리즘에 맞지 않는 '엉뚱한' 값을 피하세요:

  • 랜덤 포레스트의 트리 수가 너무 적음
    • 트리가 2개면 '포레스트'라고 할 수 있을까요?
  • KNN에서 이웃 수를 1로 설정
    • 한 사람의 '투표'만 평균내면 견고하지 않습니다!
  • 하이퍼파라미터를 아주 조금만 증가시킴

합리적 범위를 문서화해 두면 큰 도움이 됩니다.

Python에서의 하이퍼파라미터 튜닝

하이퍼파라미터 선택 자동화

 

이전 연습에서 다음과 같이 모델을 만들었습니다:

knn_5 =  KNeighborsClassifier(n_neighbors=5)
knn_10 = KNeighborsClassifier(n_neighbors=10)
knn_20  = KNeighborsClassifier(n_neighbors=20)

이 방식은 비효율적입니다. 더 나은 방법이 있을까요?

Python에서의 하이퍼파라미터 튜닝

하이퍼파라미터 튜닝 자동화

for 루프로 여러 옵션을 순회해 보세요:

neighbors_list = [3,5,10,20,50,75]

accuracy_list = []
for test_number in neighbors_list: model = KNeighborsClassifier(n_neighbors=test_number) predictions = model.fit(X_train, y_train).predict(X_test)
accuracy = accuracy_score(y_test, predictions) accuracy_list.append(accuracy)
Python에서의 하이퍼파라미터 튜닝

하이퍼파라미터 튜닝 자동화

결과를 DataFrame에 저장해 봅시다:

results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
print(results_df)

이웃 수별 정확도 표

Python에서의 하이퍼파라미터 튜닝

러닝 커브

러닝 커브 그래프를 만들어 봅시다

이번에는 훨씬 더 많은 값을 시험합니다

neighbors_list = list(range(5,500, 5))

accuracy_list = [] for test_number in neighbors_list: model = KNeighborsClassifier(n_neighbors=test_number) predictions = model.fit(X_train, y_train).predict(X_test) accuracy = accuracy_score(y_test, predictions) accuracy_list.append(accuracy) results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
Python에서의 하이퍼파라미터 튜닝

러닝 커브

더 큰 DataFrame을 그려 봅시다:

plt.plot(results_df['neighbors'], 
    results_df['accuracy'])

# 레이블과 제목 추가 plt.gca().set(xlabel='n_neighbors', ylabel='Accuracy', title='Accuracy for different n_neighbors') plt.show()
Python에서의 하이퍼파라미터 튜닝

러닝 커브

그래프:

KNN에서 정확도 vs 이웃 수 러닝 커브

Python에서의 하이퍼파라미터 튜닝

값 생성 요령

Python의 range 함수는 소수 간격을 지원하지 않습니다.

유용한 요령: NumPy의 np.linspace(start, end, num)을 사용합니다

  • 지정한 구간(start, end)에서 num개 값을 균등 간격으로 생성합니다.
print(np.linspace(1,2,5))
[1.   1.25 1.5  1.75 2.  ]
Python에서의 하이퍼파라미터 튜닝

연습해 봅시다!

Python에서의 하이퍼파라미터 튜닝

Preparing Video For Download...