Pythonでのハイパーパラメータチューニング
Alex Scriven
Data Scientist
まず調整すべき重要なハイパーパラメータがあります。
では、どの“値”を試すべきでしょうか?
主要なヒントを見ていきましょう。
競合するハイパーパラメータ設定に注意します。
LogisticRegression() の solver と penalty には競合する組合せがあります。The 'newton-cg', 'sag' and 'lbfgs' solvers support only l2 penalties.
明示されずに「無視」される場合もあります(ElasticNet の normalize など):
This parameter is ignored when fit_intercept is set to False
必ず Scikit-learn のドキュメントを確認しましょう。
“妙な”値の設定に注意しましょう:
妥当な範囲を文書化しておくことは有益です。
前の演習では次のようにモデルを作成しました:
knn_5 = KNeighborsClassifier(n_neighbors=5)
knn_10 = KNeighborsClassifier(n_neighbors=10)
knn_20 = KNeighborsClassifier(n_neighbors=20)
これは非効率です。改良できるでしょうか。
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)
結果を表示用にDataFrameへ保存します:
results_df = pd.DataFrame({'neighbors':neighbors_list, 'accuracy':accuracy_list})
print(results_df)

学習曲線グラフを作成しましょう
今回はさらに多くの値を試します
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})
より大きい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 の 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でのハイパーパラメータチューニング