Menu
CoddyTech

グリッドサーチ

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 39/58。

手作業で調整するには、ループを入れ子にする必要があります。GridSearchCVは設定の組み合わせをすべて交差検証し、最良のものを保持します。300件の路面電車の移動について、遅延か定刻かを予測します。

平均正解率を示す3×3のグリッド:縦軸は木の深さ2、4、6、横軸は葉あたりの最小行数1、5、20。深さ4、葉5の最良のセルは0.876で、枠で囲まれている

辞書は各設定を試す値に対応付けます。min_samples_leafは、葉が保持できる最小の行数です。

from sklearn.model_selection import GridSearchCV

grid = {"max_depth": [2, 4, 6], "min_samples_leaf": [1, 5, 20]}
search = GridSearchCV(DecisionTreeClassifier(random_state=0), grid, cv=5)
search.fit(X_train, y_train)
print(search.best_params_)
print(f"{search.best_score_:.3f}")
print(f"{search.score(X_test, y_test):.3f}")

これは次のように出力されます:

{'max_depth': 4, 'min_samples_leaf': 5}
0.876
0.813

探索では、すべての学習用行を使って最良のモデルを再学習するため、search.scoreで1回テストします。グリッドは小さく保ちましょう。各セルには5回の適合処理が必要です。

challenge icon

チャレンジ

中級

衛星チームは k-NN を使って、ピクセルを雲または晴天として分類します。プログラムは試す最大の k を読み込みます。スターターコードではデータを分割します。

  1. 1 からその数までの奇数の k すべてについて、weights を "uniform" または "distance"(近い近傍ほど重く数える)として、cv=5 でグリッドサーチします。
  2. 最適な設定と、その交差検証精度およびテスト精度を小数点以下3桁で出力します。

ほかのピクセルと 7 の場合:

Best k: 7, weights: distance
Cross-validated accuracy: 0.885
Test accuracy: 0.800

自分で試してみよう

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier

max_k = int(input())

# 以下の行は変更しないでください:衛星画像の画素が360個あり、それぞれに光の測定値が4つあります。ラベル1は雲を意味します
X, y = make_classification(n_samples=360, n_features=4, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.7, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ